- Home /
Question by
greatwhiteshark17283 · Nov 29, 2013 at 10:11 PM ·
functionbooleanontriggerstay
How to detect if a function is "happening"?
I have a script that allows an NPC to walk around and turn when it hits something. It detects if it hit something under the "OnTriggerStay" function. Sometimes this script gets disabled, so the NPC won't pay attention to if it's colliding with another object. The problem is that if the script is turned on when the object is inside a collider, the NPC will spin around in circles. I then made it so then the NPC will stop turning until its exited the collider, just then it never turns anymore. Is there anyway I could make it so I could turn the OnTriggerStay into a boolean? If it helps, this is my script:
var player : Transform;
var distanceToSprint = 50;
var violent : boolean;
private var walking = true;
private var stuck = false;
function Update(){
if(walking == true){
transform.Translate(Vector3.forward * walkSpeed *Time.deltaTime);
animation.Play(walkAnimation);
}
distance = Vector3.Distance(transform.position, player.position);
if(distance < distanceToSprint){
if(Input.GetKeyDown("1")){
walking = false;
audio.Play();
if(violent == true){
gameObject.GetComponent("AI").enabled = true;
gameObject.GetComponent("civilian walk").enabled = false;
}
}
if(Input.GetKeyDown("2")){
walking = false;
audio.Play();
}
}
if(distance > distanceToSprint){
walking = true;
}
if(walking == false){
transform.Translate(Vector3.forward * runSpeed *Time.deltaTime);
animation.Play(runAnimation);
}
if(OnTriggerStay == false){
stuck = false;
}
}
function OnTriggerStay(){
var direction = Random.Range(1,2);
if(direction == 1){
if(stuck == false){
transform.Rotate(Vector3.up * 270 * Time.deltaTime);
}
}
if(direction == 2){
if(stuck == false){
transform.Rotate(Vector3.up * -270 * Time.deltaTime);
}
}
Invoke("GetOut", 3);
}
function GetOut(){
stuck = true;
}
Comment
Best Answer
Answer by greatwhiteshark17283 · Nov 30, 2013 at 12:03 AM
var civilian : GameObject;
var walkSpeed = 3;
var runSpeed = 5;
var distance;
var player : Transform;
var distanceToSprint = 50;
var violent : boolean;
private var walking = true;
private var stuck = false;
function Update(){
if(walking == true){
transform.Translate(Vector3.forward * walkSpeed *Time.deltaTime);
animation.Play(walkAnimation);
}
distance = Vector3.Distance(transform.position, player.position);
if(distance < distanceToSprint){
if(Input.GetKeyDown("1")){
walking = false;
audio.Play();
if(violent == true){
gameObject.GetComponent("AI").enabled = true;
gameObject.GetComponent("civilian walk").enabled = false;
}
}
if(Input.GetKeyDown("2")){
walking = false;
audio.Play();
}
}
if(distance > distanceToSprint){
walking = true;
}
if(walking == false){
transform.Translate(Vector3.forward * runSpeed *Time.deltaTime);
animation.Play(runAnimation);
}
if(OnTriggerStay == false){
stuck = false;
}
}
function OnTriggerStay(){
var direction = Random.Range(1,2);
if(direction == 1){
if(stuck == false){
transform.Rotate(Vector3.up * 270 * Time.deltaTime);
}
}
if(direction == 2){
if(stuck == false){
transform.Rotate(Vector3.up * -270 * Time.deltaTime);
}
}
Invoke("GetOut", 3);
}
function GetOut(){
stuck = true;
}
function OnTriggerExit(){
stuck = false;
CancelInvoke();
}
Your answer
