2014-09-28 4 views
-1

Мне нужно, чтобы остановить/возобновить вращение вентилятора при нажатии определенной клавиши, так что я написал это C# код:Невозможно прочитать обновленный переменную

public bool rotationFlag = false; 

void Update() 
{ 
    if(rotationFlag) 
    { 
     fan.transform.Rotate(Vector3.up, rotationAngle); 
    } 
} 

public void commuteFan() 
{ 
     rotationFlag = !rotationFlag; 
} 

cummuteFan() метод вызывается при нажатии кнопки ,

переменная начинается с false, и вентилятор правильно не ратифицирует, когда я нажимаю кнопку, вызывается метод, значения переменных меняются и начинают вращаться, но если я хочу остановить его, t работать больше. debug сообщает мне, что значение правильно изменено на false в commuteFan(), но update() продолжает читать старое значение (true), и вентилятор не останавливается.

+0

Вы отслеживаете значение в 'commute' и в' update'? – MVCDS

+0

метод rotate вращает объект данного угла каждый раз, когда он вызывается, поэтому он не запускает поворот, он называется каждым кадром, поскольку он помещается внутри update(). Что вы имеете в виду с отслеживанием? –

+0

Я проверил [это видео] (https://unity3d.com/pt/learn/tutorials/modules/beginner/scripting/translate-and-rotate) и отредактировал мой предыдущий комментарий. Но в видео говорится, что поворот следует использовать только в «кинематических» объектах - я не знаю, что это значит, - но я понял, что при использовании физики с объектом вы должны избегать поворота так, как вы это делали (я не знаю, это ваш случай). – MVCDS

ответ

0

[РЕШИТЬ] Я не знаю, почему, но я создал класс с только BOOL наряду с методами геттер/сеттер в нем, и он работает знаю

0

Таким образом, вы имели свою переменную public, что означает, что любая другая часть проекта может легко отредактировать его. В вашем случае вы меняли его через редактор.

Чтобы избежать подобных проблем в будущем, попробуйте использовать защиту.

public class Test : MonoBehaviour 
{ 
    private bool isRotating = false; 

    public void setIsRotating(bool status) 
    { 
     isRotating = status; 
    } 

    public bool getIsRotating() 
    { 
     return isRotating; 
    } 
} 

Кодирование таким образом сэкономит вам много головных болей позже.

+0

nope, я также пытался сделать что-то подобное, но проблема все еще была –

+0

Это почти невозможно. В любом случае вы должны опубликовать, как вы его исправили, а затем принять свой собственный ответ. – FunctionR

+0

уже размещены. но я не могу принять его еще на 5 часов –

Смежные вопросы