I solved the problem
My Player Is moving all over the place!
I have two scripts: one that moves the player and one that keeps the player within certain coordinates. the problem is that my boundary script is interacting with my mover script making my player go all over the place. Here are my scripts (C#).
Mover:
using UnityEngine; using System.Collections;
[System.Serializable]
public class mover : MonoBehaviour // Use this for initialization { public float moveSpeed; public float noSpeed;
void Start()
{
}
// Update is called once per frame void Update() { if (Input.GetKey(KeyCode.RightArrow)) { GetComponent().velocity = new Vector2(+moveSpeed, GetComponent().velocity.y); } if (Input.GetKey(KeyCode.LeftArrow)) { GetComponent().velocity = new Vector2(-moveSpeed, GetComponent().velocity.y); }
if (Input.GetKeyUp(KeyCode.LeftArrow))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(+noSpeed, GetComponent<Rigidbody2D>().velocity.y);
}
if (Input.GetKeyUp(KeyCode.RightArrow))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(+noSpeed, GetComponent<Rigidbody2D>().velocity.y);
}
}
}
and Boundary:
public class boundry : MonoBehaviour {
public int minX; public int maxX; public float minY; public float maxY; public int noSpeed; void Start () {
}
void Update ()
{
Vector3 p = transform.position;
if (p.x > minX )
{
transform.position = p;
GetComponent<Rigidbody2D>().velocity = new Vector2(noSpeed, GetComponent<Rigidbody2D>().velocity.x);
}
if (p.x > maxX)
{
transform.position = p;
GetComponent<Rigidbody2D>().velocity = new Vector2(noSpeed, GetComponent<Rigidbody2D>().velocity.x);
}
if (p.y > minY)
{
transform.position = p;
GetComponent<Rigidbody2D>().velocity = new Vector2(noSpeed, GetComponent<Rigidbody2D>().velocity.y);
}
if (p.y > minY)
{
transform.position = p;
GetComponent<Rigidbody2D>().velocity = new Vector2(noSpeed, GetComponent<Rigidbody2D>().velocity.y);
}
}
}
I just want my boundary script to stop my player from moving and not make the player go all over the place! I am rather new to programming so if you can can you please make the answer easy to understand?
Thanks!!
I actually figured it out. I modified my mover script some:
public class mover : $$anonymous$$onoBehaviour // Use this for initialization { public float moveSpeed; public float noSpeed; public float jumpHeight; public float jumpSpeed; bool grounded;
private Rigidbody rigid;
void Start()
{
rigid = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.RightArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(+moveSpeed, GetComponent<Rigidbody>().velocity.y);
var direction = 1;
transform.localScale = new Vector3(direction, 1, 1);
}
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.LeftArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(-moveSpeed, GetComponent<Rigidbody>().velocity.y);
var direction = -1;
transform.localScale = new Vector3(direction, 1, 1);
}
if (Input.Get$$anonymous$$eyUp($$anonymous$$eyCode.LeftArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(noSpeed, GetComponent<Rigidbody>().velocity.y);
}
if (Input.Get$$anonymous$$eyUp($$anonymous$$eyCode.RightArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(+noSpeed, GetComponent<Rigidbody>().velocity.y);
}
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.UpArrow) && grounded == true)
{
GetComponent<Rigidbody>().velocity = new Vector2(jumpSpeed, jumpHeight);
grounded = false;
}
if (rigid.velocity.y == 0)
{
grounded = true;
}
}
}
then i placed two cubes with their mesh to serve as a wall. feel free to use the script. (2D in C#)
Follow this Question
Related Questions
Need help with boundaries 0 Answers
2D player movement problems (moving by itself) 0 Answers
Roll a Ball Tutorial error 1 Answer
Change player gravity by pressing a key? 1 Answer
How do I Update a Collider's Collison through script? 1 Answer