Проблемы с ландшафтом Unity и вращением точек поворота - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь создать полупроцедурно сгенерированную карту на Unity для разрабатываемой мной игры. В игре квадратные платформы появляются во всех направлениях, когда игрок движется к ним (север, юг, восток, запад, северо-запад, северо-восток, запад, юго-восток). Эти платформы содержат плоский ландшафт в качестве земли (так что я мог рисовать на них текстуры, а что нет). Чтобы придать игре немного разнообразия, я намерен выбрать случайное вращение этих платформ при их появлении (90, 180 и 270 градусов). Проблема в том, что по умолчанию точка поворота ландшафта не находится в центре, что приводит к действительно неудобным и, в данном случае, разрушительным результатам. Я попытался создать дочерний элемент для пустого игрового объекта с точкой поворота в центре, но получил те же результаты. Кто-нибудь знает способ побороть эту проблему? Я знаю, что это не совсем проблема кодирования, но, тем не менее, техническая. Я искал, и обычное решение - сделать его дочерним элементом пустого, но, как я уже сказал, в этом случае это не работает, если я чего-то не упускаю. Как всегда, заранее благодарим вас за терпение и внимание. Руи Пирес

Примечание: это мой сценарий вращения, на случай, если я смогу чего-то добиться, изменив его:

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

public class AutoRotate : MonoBehaviour
{
    Quaternion rot1;
    private int a;

    private void Awake()
    {
        a = Random.Range(0, 4);
        rot1 = transform.rotation;
    }
    // Start is called before the first frame update
    void Start()
    {
        
        switch(a)
        {
            case 0: transform.rotation = rot1;
                Debug.Log("case 0");
                break;
            case 1: rot1 = Quaternion.AngleAxis(90, Vector3.up);
                transform.rotation = rot1;
                Debug.Log("case 1");
                break;
            case 2: rot1 = Quaternion.AngleAxis(180, Vector3.up);
                transform.rotation = rot1;
                Debug.Log("case 2");
                break;
            case 3:
                rot1 = Quaternion.AngleAxis(270, Vector3.up);
                transform.rotation = rot1;
                Debug.Log("case 3");
                break;
        }
    }

    
}

Изменить: добавлено несколько изображений, чтобы лучше описать проблему. Empty gameObj with terrain and objects as children with pivot centered

Демонстрация непреднамеренного поворота ландшафта при применении 90deg к пустому gameobj

1 Ответ

0 голосов
/ 13 июля 2020
• 1000 Объект игры Terrain.
...