X 轴中心对象,在两个其他对象之间

Center object in X axis, between two other objects

我需要我的 PlayerController(动态生成)在每一帧更新它的位置,所以它总是在中心线和锚端之间居中:https://goo.gl/G9ZZTp

这是我现在使用的代码:

使用UnityEngine; 使用 System.Collections;

public class 中心播放器:MonoBehaviour {

private GameObject origin;
private GameObject destination;
private GameObject anchor;

// Use this for initialization
void Start () {
    origin = GameObject.Find("Origin");
    Debug.Log(origin);
    destination = GameObject.Find("Destination");
    anchor = GameObject.Find("Left");
}

// Update is called once per frame
void Update () {
    float targetXposition = (((origin.transform.position.x + destination.transform.position.x) / 2f) + anchor.transform.position.x) / 2f;

    Vector3 position = transform.position; 
    this.transform.position = new Vector3(targetXposition, position.y, position.y);
}

我将此脚本附加到 playerController。它不起作用,我不知道为什么。 线有时会移动,我需要玩家始终在线和锚点之间居中

问题出在这行代码中:

float targetXposition = (((origin.transform.position.x + destination.transform.position.x) / 2f) + anchor.transform.position.x) / 2f;

需要做的是获得一个方向向量,将其归一化,然后计算起点和终点之间的距离,然后将方向向量缩放为距离的一半,如下所示:

Vector3 direction = (origin.transform.position + destination.transform.position).normalized;
Vector3 relativePosition = direction * (0.5f * Vector3.Distance(origin.transform.position, destination.transform.position);

这提供了一个相对位置,在该位置中添加锚点会导致完成目标位置的计算:

float targetXPosition = (anchor.transform.position + relativePosition).x;