Question by
poiler22 · May 20, 2020 at 11:11 AM ·
variableglobal variable
Reassigning variable inside OnCollisionEvent does not change variable inside the Update method
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class DoorOpen : MonoBehaviour { //Hello, To use this script u need: //Assign this script to the door //Tag the door "Door" //Assign camera to a camera value in the script //Press "f" to open the door
public float smooth = 1;
public float angle = 90f;
public Camera cam;
Camera Cam;
public float RayDistance = 1.7f;
public float maxD = 1.7f;
Ray ray;
public Quaternion start;
public Quaternion end;
[Header("Auto = Finds Standard Asset Camera")]
public bool AutoCamera = true;
[Header("Auto Assigns a Tag <Door>")]
public bool AutoTag = true;
public bool open;
public bool count = false;
void Start()
{
if (AutoCamera)
{
cam = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
}
if (AutoTag)
{
tag = "Door";
}
start = Quaternion.Euler(transform.rotation.eulerAngles.x, 0, transform.rotation.eulerAngles.z);
end = Quaternion.Euler(transform.rotation.eulerAngles.x, -angle, transform.rotation.eulerAngles.z);
open = false;
}
//Script by Total_Marginal
void Update()
{
if (open == true)
{
transform.rotation = Quaternion.Slerp(transform.rotation, end, Time.deltaTime * smooth);
//transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, -angle, transform.rotation.eulerAngles.z);
}
else
{
transform.rotation = Quaternion.Slerp(transform.rotation, start, Time.deltaTime * smooth);
//transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, 0, transform.rotation.eulerAngles.z);
}
if (Input.GetKeyDown("f"))
{
ray = cam.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, RayDistance) && hit.transform.tag == "Door")
{
if (Vector3.Distance(hit.transform.position, this.transform.position) < maxD)
{
open = !open;
}
}
}
}
public void OnCollisionStay(Collision collision)
{
//open = !open;
if (collision.gameObject.name == "Nolan")
{
// Debug.Log(collision.gameObject.name);
}
if (collision.gameObject.tag == "AI" || collision.gameObject.name == "Nolan")
{
open = true;
}
}
}
This is my code to open the door when "open" variable is set to true. When I press F, the door open; however, not when I collide with the door. Anyone have any idea why?
Comment
Your answer
Follow this Question
Related Questions
How to use global variable to make counter 1 Answer
Use enum hidden value as something other than int? (C#) 2 Answers
Adding to variable only once? 0 Answers
Logical explaination of this code 1 Answer
name a variable when it's created??? 0 Answers