Как я могу повернуть объект в одном направлении, только если это два раза подряд? - PullRequest
0 голосов
/ 24 июня 2019

Объект вращается в обоих направлениях случайным образом.Право или лево.Диапазон составляет от 90 до 270.

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateRandom : MonoBehaviour
{
    bool noTarget = true;
    Quaternion qTo;
    Quaternion[] qTos;
    float rotateSpeed = 3.0f;
    float timer = 0.0f;

    private void Start()
    {
        qTo = Quaternion.Euler(new Vector3(0.0f, Random.Range(90.0f, 270.0f), 0.0f));
        qTos = new Quaternion[100];
        for(int i = 0; i < qTos.Length; i++)
        {
            qTos[i] = Quaternion.Euler(new Vector3(0.0f, Random.Range(90.0f, 270.0f), 0.0f));
        }
    }

    private void Update()
    {

        timer += Time.deltaTime;

        if (noTarget == true)
        {     
            if (timer > 2)
            { // timer resets at 2, allowing .5 s to do the rotating
                qTo = Quaternion.Euler(new Vector3(0.0f, Random.Range(90.0f, 270.0f), 0.0f));
                timer = 0.0f;
            }
            transform.rotation = Quaternion.Slerp(transform.rotation, qTo, Time.deltaTime * rotateSpeed);
        }
    }
}

Я попытался добавить массив qTos и, возможно, сделать это правило уже в Start или использовать этот массивсделать правило внутри обновления.

Или, может быть, сделать правило прямо уже в строке Эйлера в таймере:

qTo = Quaternion.Euler(new Vector3(0.0f, Random.Range(90.0f, 270.0f), 0.0f));

Я пробовал это, но оно не работает, как я хотел, чтобы оно продолжало вращаться случайным образом, как раньше:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateRandom : MonoBehaviour
{
    bool noTarget = true;
    Quaternion qTo;
    float speed = 1.25f;
    float rotateSpeed = 3.0f;
    float timer = 0.0f;
    int counter = 0;

    private void Start()
    {
        qTo = Quaternion.Euler(new Vector3(0.0f, Random.Range(90.0f, 270.0f), 0.0f));
    }

    private void Update()
    {

        timer += Time.deltaTime;

        if (noTarget == true)
        {     
            if (timer > 2)
            {
                var rand = Random.Range(90.0f, 270.0f);
                counter += 1;
                if (rand >= 90 && rand <= 180)
                {
                    if(counter == 2)
                    {
                        rand = Random.Range(180.0f, 270.0f);
                        counter = 0;
                    }
                }

                if (rand >= 270 && rand >= 180)
                {
                    if (counter == 2)
                    {
                        rand = Random.Range(90.0f, 180.0f);
                    }
                    counter = 0;
                }

                qTo = Quaternion.Euler(new Vector3(0.0f, rand, 0.0f));
                timer = 0.0f;
            }
            transform.rotation = Quaternion.Slerp(transform.rotation, qTo, Time.deltaTime * rotateSpeed);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...