У меня есть скрипт, который перемещает символ в направлениях, зависит от того, с чем он сталкивается. Heres мой код:Символьный код не работает - Unity3D unityscript
var speed : float = 1;
private var leftBool : boolean;
private var rightBool : boolean;
private var upBool : boolean;
private var downBool : boolean;
function Update() {
if(leftBool == true) {
gameObject.GetComponent(Rigidbody2D).velocity.x = gameObject.GetComponent(Rigidbody2D).velocity.x - speed * Time.deltaTime;
rightBool = false;
upBool = false;
downBool = false;
}
if(upBool == true) {
gameObject.GetComponent(Rigidbody2D).velocity.y = gameObject.GetComponent(Rigidbody2D).velocity.y + speed * Time.deltaTime;
rightBool = false;
leftBool = false;
downBool = false;
}
if(rightBool == true) {
gameObject.GetComponent(Rigidbody2D).velocity.x = gameObject.GetComponent(Rigidbody2D).velocity.x + speed * Time.deltaTime;
rightBool = false;
leftBool = false;
downBool = false;
}
if(downBool == true) {
gameObject.GetComponent(Rigidbody2D).velocity.y = gameObject.GetComponent(Rigidbody2D).velocity.y - speed * Time.deltaTime;
rightBool = false;
leftBool = false;
upBool = false;
}
}
function Start() {
leftBool = true;
}
function OnTriggerEnter2D (other : Collider2D) {
if(other.GetComponent(Arrows).rotationNumber == 1) {
leftBool = true;
Debug.Log("Entered");
}
if(other.GetComponent(Arrows).rotationNumber == 2) {
upBool = true;
Debug.Log("Entered");
}
if(other.GetComponent(Arrows).rotationNumber == 3) {
rightBool = true;
Debug.Log("Entered");
}
if(other.GetComponent(Arrows).rotationNumber == 4) {
downBool = true;
Debug.Log("Entered");
}
}
Это показывает «Поступило» в debug.log но характер не менять направление, когда он сталкивается. Почему это происходит? Благодарю.
Imtaj оставил отличный ответ, но есть и другие проблемы с вашим кодом. (1) Вместо написания 'something == true' вы всегда должны писать только« что-то », потому что это, по сути, одно и то же. (2) Операция GetComponent может быть дорогостоящей, особенно в неэквивалентной форме, поэтому вы, вероятно, должны кэшировать жесткое тело, если вы делаете это в каждом кадре. (3) Логика, которая у вас здесь, по существу, - это [машина состояния] (http://en.wikipedia.org/wiki/Finite-state_machine), и было бы неплохо выразить ее так, как в коде, что на самом деле поможет вам предотвратить эту ошибку. –