Скрипт вращения компаса на C# в Unity3d

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

Это легко сделать, но стрелка указывает на северный объект. Но стрелка теперь не следует за пластиной (объектом компаса), на котором она находится. Таким образом, я хотел бы, чтобы стрелка указывала соответственно. Другими словами, вращайте по оси Y.

Мне не нужен код - мне просто нужно общее представление о том, как это сделать. Буду очень признателен за любую помощь:)

2 ответа

Я наконец понял это:D Это было намного проще, чем ожидалось... Вот код, если кому-то это понадобится:

using UnityEngine;
using System.Collections;

public class Compass : MonoBehaviour 
{
    void Update () 
    {
         transform.localRotation = Quaternion.Euler(0, 360-transform.root.rotation.eulerAngles.y, 0);
    }
}

Я бы попытался спроецировать вектор, указывающий от компаса на цель, на плоскость, на которой должна лежать игла. Vector.ProjectOnPlane может быть полезным. Примерно так должно работать (еще не проверено):

Vector3 dir = compassPos - targetPos;
Vector3 needleDir = Vector3.ProjectOnPlane(dir, compassNormal);
Другие вопросы по тегам