Hello everybody, in my AI code i want my NPC to, for instance, turn right if there is an obstacle left of him. I detect this by raycast and set a boolean to true so that it moves if obstacleleftofyou == true. However, this never returns to its false state in my code, even though i think i make it set to false whenever !obstacleleftofyou. Can anybody see what i did wrong here?
//if obstacle is left of you, known by raycast, turn right.
if (obstacleleftofyou == true){transform.Rotate(Vector3(0,1,0) * rotationSpeed * Time.deltaTime);
myTransform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);}
///
var distance = Vector3.Distance(target.position, myTransform.position);
if (distance < range && obstacleleftofyou == false){
transform.LookAt(Vector3(target.position.x, transform.position.y, target.position.z));
myTransform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);}
if (Input.GetKeyDown ("escape")){
Screen.lockCursor = false; // unfreeze mouse on pressing escape
}
var rightray = new Ray (transform.position, transform.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, transform.forward); //Shoots ray in front of object
var hitforw : RaycastHit; // hit information
if (Physics.Raycast (forwray, hitforw, obstacleavoidancerangeforward)){ 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, -transform.right); //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");
//yield WaitForSeconds(0.5);{obstacleleftofyou = false;}}
}
function AvoidObstacleForward (){
Debug.Log("obstacle in front");
}
↧