- Home /
2D Top Down Character being Pulled down and movement script not working?
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!!! alt text
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);
}
}
Answer by YardGnomeNinja · Nov 30, 2016 at 07:36 AM
I'm pretty new to this, so I apologize if I lead you astray, but I think you need to change your method FixedUpdate to Update as FixedUpdate is used for objects with a RigidBody component and physics enabled.
Take a look at the second line of the FixedUpdate documentation
It Didn't solve the problem but thank you for trying to help, greatly appreciated.
Answer by Rowanty23 · Aug 05, 2020 at 12:39 AM
I'm having the same problem and this isn't solving it. It seems to be something wrong with the box collider.
Your answer
Follow this Question
Related Questions
Round Planets and Movement on them 2 Answers
How to turn off gravity? 4 Answers
EnemyAi animations, are bugged while moving 0 Answers
Distribute terrain in zones 3 Answers
Jump and run on a circle (2D) 0 Answers