вращение на триггере oculus go c # - PullRequest
0 голосов
/ 08 марта 2019

Я хочу, чтобы игровой объект вращался, когда нажата кнопка запуска Oculus Go, но только тогда у меня есть следующий код. К сожалению, это постоянно вращается, даже когда я убираю палец со спускового крючка,

public GameObject dummyrotate;
private bool rotate = false;
float rotationAmount = .3f;
float delaySpeed = .1f;


public void rotateAntiClockwise()

{
    StartCoroutine(SlowSpin2());
}

public IEnumerator SlowSpin2()

{
    float count = 0;
    while (count <= 90)

    {
        dummyrotate.transform.Rotate(new Vector3(0,-rotationAmount,0));
        count += rotationAmount;
        yield return new WaitForSeconds(delaySpeed);
    }
}

большое спасибо Jono

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Если вы просто хотите, чтобы он вращался во время удержания триггера, просто не используйте сопрограмму для этого.Сопрограммы будут работать до тех пор, пока они не будут полностью выполнены, поэтому вместо этого попробуйте что-то вроде этого:

public GameObject dummyrotate;
private bool rotate = false;
float rotationAmount = .3f;
float delaySpeed = .1f;


void Update()
{
    SlowSpin2();
}

public void SlowSpin2()

{
    if (rotate == true) {
        dummyrotate.transform.Rotate(new Vector3(0,-rotationAmount,0));
        count += rotationAmount;
    }
}
0 голосов
/ 11 марта 2019

Ну, проблема в том, что как только вы запускаете вращение, вам понадобится 30 секунд, чтобы завершить ваш coroutine из-за вашего цикла while. А также, когда вы запускаете его снова, вы запускаете еще один coroutine, это будет продолжаться вечно, как это. Я предполагаю, что rotateAntiClockwise метод вызывается при каждом нажатии вашего триггера.

Я также предполагаю, что вы хотите повернуть объект на 90 градусов по оси Y, вы можете добиться этого следующим образом:

 bool isRunning = false;
 //Make sure this variable is true when triggered and false when not
 bool isTrigger = false;
 float rotationAmount = 0.3f;
 public IEnumerator SlowSpin2()
 {
    isRunning = true;
    //This will rotate the object continuously until isTriggered is false
    while (isTriggered)
    {
        Debug.Log("Rotating");
        transform.Rotate(new Vector3(0, -rotationAmount, 0));            
        yield return null;

    }
    Debug.Log(Time.time);
    isRunning = false;
 }

Этот скрипт будет медленно вращать ваш объект от 0 до 90 в течение 2 секунд.

Затем вам нужно изменить rotateAntiClockwise следующим образом, чтобы вы не запускали другую сопрограмму, пока она уже запущена.

public void rotateAntiClockwise()
{
     if(!isRunning)
         StartCoroutine(SlowSpin2());
}
...