I’m making a 2D Top-Down PAC-Man-Esque Game and my character is being pulled down even though gravity is off. My movement script isn’t working either. Please Help!EDIT: Also when I take off the box collider or check “Is Trigger” the character is not pulled towards objects anymore, but the character is pulled back to (x=0, y=0[Does not do this if box collider has “Is Trigger” on, but the character goes through walls then]) and the higher the speed the further the character can move while collider is off
using UnityEngine;
using System.Collections;
public class CharacterMove : MonoBehaviour {
public float speed = 0.4f;
Vector2 dest = Vector2.zero;
void Start() {
dest = transform.position;
}
void FixedUpdate() {
// Move closer to Destination
Vector2 p = Vector2.MoveTowards(transform.position, dest, speed);
GetComponent<Rigidbody2D>().MovePosition(p);
// Check for Input if not moving
if ((Vector2)transform.position == dest) {
if (Input.GetKey(KeyCode.UpArrow) && valid(Vector2.up))
dest = (Vector2)transform.position + Vector2.up;
if (Input.GetKey(KeyCode.RightArrow) && valid(Vector2.right))
dest = (Vector2)transform.position + Vector2.right;
if (Input.GetKey(KeyCode.DownArrow) && valid(-Vector2.up))
dest = (Vector2)transform.position - Vector2.up;
if (Input.GetKey(KeyCode.LeftArrow) && valid(-Vector2.right))
dest = (Vector2)transform.position - Vector2.right;
}
}
bool valid(Vector2 dir) {
// Cast Line from 'next to Character' to 'Character'
Vector2 pos = transform.position;
RaycastHit2D hit = Physics2D.Linecast(pos + dir, pos);
return (hit.collider == GetComponent<Collider2D>());
}
}
Gravity is off!! Even on Physics and Physics2D!!!
Current code (still not working):
using UnityEngine;
using System.Collections;
public class CharacterMove : MonoBehaviour {
public float speed = 0.4f;
private Vector2 moveDirection = Vector2.zero;
public GameObject Character;
void Start() {
moveDirection = transform.position;
}
void FixedUpdate() {
// Move closer to moveDirection
Vector2 p = Vector2.MoveTowards(transform.position, moveDirection, speed);
GetComponent<Rigidbody2D>().MovePosition(p);
// Check for Input if not moving
moveDirection = new Vector2 (Input.GetAxis ("Horizontal"), Input.GetAxis ("Vertical"));
moveDirection = transform.TransformDirection (moveDirection);
GetComponent<Rigidbody2D>().AddForce(moveDirection*=speed);
//Multiply it by speed.
moveDirection *= speed;
// Animation Parameters
Vector2 dir = moveDirection - (Vector2)transform.position;
GetComponent<Animator>().SetFloat("DirX", dir.x);
GetComponent<Animator>().SetFloat("DirY", dir.y);
}
}