I am trying to make a landing script for a plane and whenever the script runs it freezes Unity and I have to close it with Task Manager. Whenever I reopen unity the script is disabled due to it not saving when I activated it , and when I hit play without it being activated, it works fine, so it only freezes when the script is activated. Here is the script:
Oh, and I use Unity 2018.1, If that is a factor in why it freezes.
public class TieControl : MonoBehaviour {
AudioSource audioSource;
// Use this for initialization
void Start () {
// the is landed by default
land = true;
}
// Update is called once per frame
// when the landing variable is 1, that means it is taking off, when 2, that means it is landing, when 0, that means it has landed or is in the air.
// when land is false, that means it is in the air, when true, that means it is on the ground landed.
public bool land = true;
public int landing = 0;
void Update() {
//default movement without input
if (land == false)
transform.Translate(0f, 0f, -0.2f);
if (Input.GetKey(KeyCode.Space) & (land == false))
landing = 2;
if (Input.GetKey(KeyCode.Space) & (land == true))
landing = 1;
//everything under here is only if land is false
if (Input.GetKey(KeyCode.W) & (land == false))
transform.Translate(0f, 0f, -0.5F);
if (Input.GetKey(KeyCode.S) & (land == false))
transform.Translate(0f, 0f, 0.5f);
if (Input.GetKey(KeyCode.A) & (Input.GetKey(KeyCode.S) & (land == false)))
transform.Rotate(0f, -0.5f, 0f);
else if (Input.GetKey(KeyCode.A) & (land == false))
transform.Rotate(0f, -1, 0f);
if (Input.GetKey(KeyCode.D) & (Input.GetKey(KeyCode.S) & (land == false)))
transform.Rotate(0f, 0.5f, 0f);
else if (Input.GetKey(KeyCode.D) & (land == false))
transform.Rotate(0f, 0.5F, 0f);
if (Input.GetKey(KeyCode.UpArrow) & (Input.GetKey(KeyCode.S) & (land == false)))
transform.Rotate(0.5f, 0f, 0f);
else if (Input.GetKey(KeyCode.UpArrow) & (land == false))
transform.Rotate(1f, 0f, 0f);
if (Input.GetKey(KeyCode.DownArrow) & (Input.GetKey(KeyCode.S) & (land == false)))
transform.Rotate(-0.5f, 0f, 0f);
else if (Input.GetKey(KeyCode.DownArrow) & (land == false))
transform.Rotate(-1f, 0f, 0f);
if (Input.GetKey(KeyCode.LeftArrow) & (Input.GetKey(KeyCode.S) & (land == false)))
transform.Rotate(0f, 0f, -0.5f);
else if (Input.GetKey(KeyCode.LeftArrow) & (land == false))
transform.Rotate(0f, 0f, -1f);
if (Input.GetKey(KeyCode.RightArrow) & (Input.GetKey(KeyCode.S) & (land == false)))
transform.Rotate(0f, 0f, 0.5f);
else if (Input.GetKey(KeyCode.RightArrow) & (land == false))
transform.Rotate(0f, 0f, 1f);
//everything under here is if Landing is true to allow turning while landing
if (Input.GetKey(KeyCode.A) & (landing == 2))
transform.Rotate(0f, -0.2f, 0f);
if (Input.GetKey(KeyCode.D) & (landing == 2))
transform.Rotate(0f, 0.2f, 0f);
//everything under here is the landing movement and the takeoff movement\
//landing
while (landing == 2)
{
transform.Translate(0f, -.2f, 0f);
if ((landing == 2) & (transform.position.y == 40))
landing = 0;
}
//takeoff
while (landing == 1)
{
transform.Translate(0f, .2f, 0f);
land = false;
landing = 0;
}
}
//everything under here has to do with the collider
// this will change landing to 0 when it collides with the terrain
void OnTriggerEnter(Collider other)
{
print("The ship has landed");
land = true;
landing = 0;
{ };
}
}