Повернуть объект на 90 градусов?

#c# #android #unity3d #object #rotation

#c# #Android #unity3d #объект #поворот

Вопрос:

Я знаю, что на этот вопрос отвечали примерно 1000 раз, но я просто не знаю, как именно я должен кодировать. Все, что я хочу, это когда платформа меняет свое положение на оси x или z, затем повернуть всю платформу на 90 градусов. Я попробовал это с помощью platform.transform.Rotate(0, 90, 0), поэтому я думаю, что есть еще что сделать. Сам код:

     public GameObject platform;
    public Transform lastPlatform;
    Vector3 lastPosition;
    Vector3 newPos;
    bool stop;

    private Quaternion rotationQuaternion;

    void Start()
    {
        lastPosition = lastPlatform.position;
        StartCoroutine(SpawnPlatforms());

    rotationQuaternion = transform.rotation;
    }

    void Update()
    {

    }

    IEnumerator SpawnPlatforms()
    {
        while (!stop)
        {
            GeneratePosition();

        Instantiate(platform, newPos, rotationQuaternion * Quaternion.identity);

            lastPosition = newPos;

            yield return new WaitForSeconds(0.1f);
        }
    }

    void GeneratePosition()
    {
        newPos = lastPosition;

        int rand = Random.Range(0, 2);

        if (rand > 0)
        {
            newPos.x  = 1.5f;
        transform.rotation = rotationQuaternion * Quaternion.Euler(0, 90, 0); //one way i tried
        }
        else
        {
            newPos.z  = 1.5f;
            platform.transform.Rotate(0, 90, 0) //another way I tried
        }
    }
 

Я ценю всю помощь!

Комментарии:

1. Я не вижу, где вы что-то вращаете…

2. Потому что я удалил из него. Я попытался повернуть оператор random if, поэтому при изменении положения платформ он также будет вращаться. Но это не так.

3. Пожалуйста, покажите, что вы пробовали 😉

4. Я отредактировал сообщение, пожалуйста, взгляните. Может быть ужасно.

Ответ №1:

Итак, как я вижу, в настоящее время существует несколько проблем / неясных вещей

  • вы вращаетесь примерно 90° каждую 0.1 секунду, поэтому в течение 1 секунды вы вращаетесь 900° . Мне кажется, что это просто способ ускорить.
  • Вы также вращаете transform , а не платформу
  • platform кажется, это сборный объект в активах, поэтому нет смысла его поворачивать

Вы, вероятно, хотите сделать

 void GeneratePosition()
{
    newPos = lastPosition;

    int rand = Random.Range(0, 2);

    if (rand > 0)
    {
        newPos.x  = 1.5f;
    }
    else
    {
        newPos.z  = 1.5f;
    }

    // rather directly rotate the quaternion parameter
    // if you are going to do the same thing in both cases anyway I would rather extract it right away
    rotationQuaternion *= Quaternion.Euler(0, 90, 0);
}
 

а затем также

 // Rotating by "Quaternion.idendity" has no effect
Instantiate(platform, newPos, rotationQuaternion);
 

Тем не менее, для меня это звучит как много нереста, может быть, вы захотите изучить объединение объектов

Комментарии:

1. Спасибо за ваш ответ! Это все равно как-то не работает, платформы не вращаются. Да, появляется много платформ. Я готов решить эту проблему, поэтому для каждого ввода генерируется одна платформа.

Ответ №2:

Мне удалось найти решение проблемы. Может быть, это может быть кому-то полезно, так что поехали:

 public struct SpawnPoint
    {
        public Vector3 position;
        public Quaternion orientation;

        public void Step(float distance)
        {
            if (Random.value < 0.5)
            {
                position.x  = distance;
                orientation = Quaternion.Euler(0, 90, 0);
            }
            else
            {
                position.z  = distance;
                orientation = Quaternion.Euler(0, 0, 0);
            }

            //orientation = Quaternion.Euler(0, 90, 0) * orientation;
        }
    }

    void Start()
    {
        _spawn.position = lastPlatform.position;
        _spawn.orientation = transform.rotation;
    }
 

С этого момента все, что осталось сделать, это создать экземпляр:

 var newPlatform = Instantiate(platform, _spawn.position, _spawn.orientation);
 

Огромное спасибо derHugo за то, что дал мне представление о том, как это сделать!

Комментарии:

1. Когда Step вызывается get? Неясно, как это связано с кодом в вопросе