- Home /
Raycast rotating with object rotating
Hello everybody, i have a moving and rotating object that shoots out raycasts to see if there is any obstacle in a specific direction. The problem is that with my current code, the raycasts don't rotate. Does anybody know how to fix this?
Code:
var rightray = new Ray (transform.position, Vector3.right); // shoots ray right even though it says left
var hitright : RaycastHit; // hit information
if(Physics.Raycast (rightray, hitright, obstacleavoidancerangeside)){if (hitright.transform.tag == "metal"){obstaclerightofyou = true;{AvoidObstacleRight();}} // If raycast hits something within o avoid obstacle
else obstaclerightofyou = false; }
var forwray = new Ray (transform.position, Vector3.forward); //Shoots ray in front of object
var hitforw : RaycastHit; // hit information
if (Physics.Raycast (forwray, hitforw, obstacleavoidancerange)){ if (hitforw.transform.tag == "metal"){obstacleinfrontofyou = true;{AvoidObstacleForward();}} // If raycast hits something within o avoid obstacle
else obstacleinfrontofyou = false;
}
var leftray = new Ray (transform.position, Vector3.left); //shoots ray left even though it says right
var hitleft : RaycastHit; // hit information
if (Physics.Raycast (leftray, hitleft, obstacleavoidancerangeside)){ if (hitleft.transform.tag == "metal"){obstacleleftofyou = true;{AvoidObstacleLeft();}} // If raycast hits something within o avoid obstacle
else obstacleleftofyou = false;
}
}
function AvoidObstacleRight (){
Debug.Log("obstacleright");
}
function AvoidObstacleLeft(){
Debug.Log("obstacle left");
}
function AvoidObstacleForward (){
Debug.Log("obstacle in front");
}
Answer by robertbu · Jan 17, 2014 at 04:22 PM
You are using Vector3.right, Vector3.forward, and Vector3.left. Used in this context, these are world directions. Replace the three with transform.right, transform.forward and -transform.right. There is no 'transform.left', but you get it by negating the 'transform.right' vector.
There is also a 'transform.up'. These vectors are the local forward/right/up of the object transformed into world space. Another way to get the same value is:
transform.TransformDirection(Vector3.forward)
This takes the local forward and transforms it into world space.
good answer. It's kinda strange though: just Vector3.forward works on some game objects, and transform.TransformDirection(Vector3.forward) on some other. Why?
Hi. Thanks for the practical answer. It works like a charm. And for those who couldn't type exact transform.TransformDirection(Vector3.forward)
try adding your gameObject's reference before it like here obj.transform.TransformDirection(Vector3.forward)
Your answer
Follow this Question
Related Questions
Detect face of cube clicked 4 Answers
Raycast script help? 1 Answer
Using Raycasting to lob a projectile. 2 Answers
Drag objects uisng the minimap 0 Answers