Как расположить объекты в «радиальном» стиле в Unity? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь написать скрипт в Unity, который создает тип радиального меню вокруг объекта, с которым сталкивается игрок, но количество кнопок в меню является переменной.

Я сгенерировал углы для главного меню, при котором объекты должны появляться достаточно легко ...

            // int buttonCount = number of buttons
            float buttonWidth = 360 / buttonCount;
            for (int i = 1; i <= buttonCount; i++)
            {
                float maxAngle = buttonWidth * i;
                float minAngle;
                if (i == 0)
                {
                    minAngle = 0f;
                }
                else if (i == buttonCount)
                {
                    minAngle = 360 - buttonWidth;
                }
                else
                {
                    minAngle = buttonWidth * (i - 1);
                }
                float buttonAngle = (minAngle + maxAngle) / 2;
            }

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

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Эта функция принимает в качестве параметров объект, вокруг которого вы хотите перемещать кнопки, объект игрока, чтобы вы могли ориентировать новые кнопки к игроку, угол, под которым вы хотите, чтобы кнопка была, и радиус (расстояние до кнопки будет от кнопки Центр). Его вывод - это положение кнопки в мировом пространстве. Вы можете вызывать его для каждой кнопки, которую хотите добавить.

Vector3 positionButton(GameObject buttonCenter, GameObject player, float angle, float radius) {
    //get the up and right vectors from the player object so we can orient the buttons
    Vector3 up = player.transform.up;
    Vector3 right = player.transform.right;

    angle = Mathf.Deg2Rad * angle;  //convert degrees to radians.  radians=degrees * 2pi / 360

    //cos(angle) give an x coordinate, on a unit circle centered around 0
    //sin(angle) is the y coordinate on the unit circle
    //take those values, multiply them by the up and right vectors to orient them to the player, 
    //multiply by the radius to move them the correct distance from the buttoncenter, 
    //and add the buttoncenter position so they circle around the correct point
    Vector3 buttonPos =buttonCenter.transform.position +  (radius * right * Mathf.Cos(angle)) + (radius* up * Mathf.Sin(angle));
    return buttonPos;
}
0 голосов
/ 01 мая 2018

Сначала определите источник и расстояние для каждой кнопки от него. Поскольку у вас есть углы, вы можете применить тригонометрию, которая позволит вам найти координату точки с учетом угла, расстояния и исходной точки. Точка будет определяться как cos () и sin () угла.

Взгляните на 2-й раздел здесь

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