Пытаетесь установить что-то на другую локальную позицию GameObjects? - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь установить позицию GameObjects относительно другой локальной позиции GameObjects, но мне не повезло. С помощью raycast я проверяю, на какой стороне стоит игрок, и все работает нормально, и я пытаюсь создать преобразование относительно локального положения объекта в зависимости от того, на какой стороне вы стоите. Когда этот объект не вращается, все работает нормально, но когда я поворачиваю объект, целевые позиции, кажется, все еще находятся в мировом пространстве. Я добавил изображения для иллюстрации случая.

Альбом с изображениями, иллюстрирующими проблему

if(right)
{
    Vector3 Pos1 = _pushableT.localPosition;
    Pos1.x = _pushableT.localPosition.x + distBetween;
    _targetPos = Pos1;
}

if (left)
{
    Vector3 Pos2 = _pushableT.localPosition;
    Pos2.x = _pushableT.localPosition.x - distBetween;
    _targetPos = Pos2;
}

if (front)
{
    Vector3 Pos3 = _pushableT.localPosition;
    Pos3.z = _pushableT.localPosition.z + distBetween;
    _targetPos = Pos3;
}

if (back)
{
    Vector3 Pos4 = _pushableT.localPosition;
    Pos4.z = _pushableT.localPosition.z - distBetween;
    _targetPos = Pos4;
}

targetBallDebug.position = _targetPos;

1 Ответ

1 голос
/ 16 марта 2020

Это будет хорошо работать для положения объекта, который смотрит на цель, но не идеален для вращения в трехмерном пространстве

using UnityEngine;

public class TrackToTarget : MonoBehaviour
{
    [SerializeField]
    private Transform target;

    private Vector3 releativePosition;
    private Quaternion targetRotationAtStartInv;
    private Quaternion rotationDiffernce;

    private void Start()
    {
        releativePosition = target.position - transform.position;
        targetRotationAtStartInv = Quaternion.Inverse(target.rotation);
        rotationDiffernce = target.rotation * transform.rotation;
    }

    private void Update()
    {
        transform.position = target.position - target.rotation * (targetRotationAtStartInv * releativePosition);
        transform.rotation = rotationDiffernce * target.rotation;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...