- Home /
Grid Based Movement Raycast Issue - Please Help,Raycast Not Working After Roating - Please Help!
Hi, I've been trying to fix this for hours but have no idea what the problem is. Basically, I'm implementing Grid-Based movement. The movement (left, right, up, down) works fine. However, when I rotate the character the movement completely bugs out.
Here's how it works:
A ray cast is fired from the character. If it hits a wall it moves on position closer to that wall. This all works fine. Here is the code:
public void movePlayer(int rayCastPosition, char axis)
{
//--> Face RayCastControlCamera to correct direction
this.transform.localEulerAngles = new Vector3(this.transform.localEulerAngles.x, rayCastPosition, this.transform.localEulerAngles.z);
//--> Fire a ray cast from the RayCastControlCamera
Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
Physics.Raycast(ray, out hit, Mathf.Infinity); // Test
Debug.DrawRay(ray.origin, ray.direction * Mathf.Infinity, Color.red, 100.0f);
//--> If ray cast hit a target and it's at least 1.5 units way then move towards it.
if (Physics.Raycast(ray, out hit, Mathf.Infinity) && hit.distance >= 1.5)
{
Vector3 targetDest = new Vector3();
isMoving = true;
//Debug.Log("Hit Location " + hit.point.x + ":" + hit.point.z);
//--> Select on what axis we want to use to move towards the object.
switch (axis)
{
case 'x':
{
targetDest = new Vector3(hit.point.x, parentCamera.transform.position.y, parentCamera.transform.position.z);
break;
}
case 'z':
{
targetDest = new Vector3(parentCamera.transform.position.x, parentCamera.transform.position.y, hit.point.z);
break;
}
}
Debug.Log("Moving From " + parentCamera.transform.position.x + ", " + parentCamera.transform.position.z + " To " + targetDest.x + ", " + targetDest.z);
//--> Update the character position.
parentCamera.transform.position = Vector3.MoveTowards(parentCamera.transform.position, targetDest, 1f);
isMoving = false;
}
}
However, if I change the Y-position to 90 (rotate) then the movement completely breaks.
if (rotate_right)
{
//--> Rotate 90*.
if (Mathf.Abs(this.transform.eulerAngles.y - current_rot) < 90)
{
transform.Rotate(Vector3.up * +rot_speed * Time.deltaTime);
}
}
Any idea what could be happening? I only have the above simple script. The player is layed out as follows PlayerCamera > RayCastControlCamera / PlayerModel.
Your answer
Follow this Question
Related Questions
Drawing a 3d Cone ray 2 Answers
nav mesh agent stop ScreenPointToRay after a while 0 Answers
Question about raycasting and UI button 0 Answers
Raycast not hitting the collider properly it always has a weird offset 0 Answers
Boxcast vs Raycast Oddities 1 Answer