- 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
![](https://koobas.hobune.stream/wayback/20220612101541im_/https://answers.unity.com/themes/thub/images/avi.jpg)
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