Using Raycast for player movement...
Hi,
I am trying to use Raycast in a player movement (using iTween if it makes a difference) script to detect objects in front of them to stop movement in that direction. The raycast doesn't seem to work in the CanMove method. The debug says I hit something but yet sometimes I can still move.
I have my levels set on a 3x3 grid. I am wanting the player to rotate and a ray to cast in front (Space.Self which I think I've done with transform.forward) of the player before each movement to detect if there is an object in the way. If there is something there, don't move in forward, else move forward.
Something easy I'm sure I'm overlooking but I'm stuck...
private bool canMove;
RaycastHit hit;
void Start () {
canMove = true;
}
void Update ()
{
Vector3 startRay = transform.position;
Vector3 endRay = transform.forward * 3f;
Debug.DrawRay(startRay, endRay);
if (Input.GetKey(KeyCode.UpArrow))
{
if(transform.rotation.y != 0)
{
iTween.RotateTo(gameObject, iTween.Hash("y", 0f, "time", .01f, "onComplete", "MovePlayer", "onCompleteTarget", gameObject));
}
}
else if (Input.GetKey(KeyCode.DownArrow))
{
if(transform.rotation.y != 180)
{
iTween.RotateTo(gameObject, iTween.Hash("y", 180f, "time", .01f, "onComplete", "MovePlayer", "onCompleteTarget", gameObject));
}
}
else if (Input.GetKey(KeyCode.RightArrow))
{
if(transform.rotation.y != 90)
{
iTween.RotateTo(gameObject, iTween.Hash("y", 90f,"time", .01f, "onComplete", "MovePlayer", "onCompleteTarget", gameObject));
}
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
if(transform.rotation.y != -90)
{
iTween.RotateTo(gameObject, iTween.Hash("y", -90f, "time", .01f, "onComplete", "MovePlayer", "onCompleteTarget", gameObject));
}
}
}
void MovePlayer()
{
if(canMove)
{
iTween.MoveAdd(gameObject, iTween.Hash("z", 3, "speed", moveSpeed));
}
canMove = CanMove();
}
bool CanMove()
{
Vector3 startRay = transform.position;
Vector3 endRay = transform.forward * 3f;
if (Physics.Raycast(startRay, endRay, out hit, 5))
{
if(hit.collider.gameObject.tag == "Player")
{
return true;
}
else
{
Debug.Log("I hit " + hit.collider.gameObject.name);
return false;
}
}
else
{
return true;
}
}
} [/code]
Your answer
Follow this Question
Related Questions
Moving simultaneously with UP LEFT, W D using GetAxisRaw. Rotating localScale to flip animation 2 Answers
Movement with joystick ,Moving object with the Joystck 0 Answers
Some problems with handmade basic player controller 0 Answers
How do I get players camera to move more/feel smoother 1 Answer
Why does my player move without any buttons being pressed? 1 Answer