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;
我需要我的 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;