Unity - 如何根据当前位置计算具有偏移的目标位置?

时间:2018-04-15 08:47:21

标签: c# unity3d math vector

我想要实现的是根据当前位置计算移动到的对象的位置。

我有(2, 0, 4)的预定义Vector3偏移量,让我们说我的目标位置只是0,0,0,具体取决于我的物体相对于目标位置的方向,最终位置需要使用我从目标位置预定义的偏移量计算。

例如,如果我的对象正好在目标后面,那么最终位置应为(2, 0, -4)

请注意,不需要考虑旋转。我只需要一个新位置移动到保留目标位置的原始方向。我不确定如何进行计算。

private void MoveToTargetWithOffset(Vector3 targetPos) {
    Vector3 offset = new Vector3(2, 0, 4);
    Vector3 currentPos = transform.position;
    Vector3 finalPos = Vector3.zero;

    // Calculate the final position. The position should be a point closest to the currentPos with the offset applied.
    transform.position = finalPos;
}

三角形是我想要移动的对象。虚线表示它们应基于预定义对象的位置。

image

1 个答案:

答案 0 :(得分:4)

这是一张解释它的图片。

enter image description here

根据图片,这是一个代码段:

public class HoverFromTarget : MonoBehaviour {
    public Transform target;
    public float preferredDistance = 5.0f;
    // Use this for initialization
    void Start () {
        //Considering this object is the source object to move
        PlaceObject ();
    }

    void PlaceObject(){
        Vector3 distanceVector = transform.position - target.position ;
        Vector3 distanceVectorNormalized = distanceVector.normalized;
        Vector3 targetPosition = (distanceVectorNormalized * preferredDistance);
        transform.position = targetPosition;
    }
}