没有统一内置功能

时间:2017-05-29 07:43:30

标签: c# unity3d vector

我正在尝试使用自定义代码将目标对象移动到我的播放器(没有像MoveTowards那样的内置函数)

Vector3 displacment = target.transform.position - player.transform.position;
//you can also get magnitude directly through displacement.magnitude
float xMagnitude = displacment.x * displacment.x;
float yMagnitude = displacment.y * displacment.y;
float zMagnitude = displacment.z * displacment.z;

float customMagnitude =Mathf.Sqrt(xMagnitude + yMagnitude + zMagnitude);
directionToMove = new Vector3(displacment.x / customMagnitude, displacment.y / customMagnitude, displacment.z / customMagnitude);
//directionToMove = displacment.normalized;
Vector3 velocity = directionToMove *  speed;
Vector3 moveAmount = velocity * Time.deltaTime;
target.transform.position += moveAmount;

我首先获得了两个向量之间的位移,而不是我的方向并以速度将其传递到我的位置。但它的方向不是针对玩家。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您想将目标移至播放器,则displacment必须为:

displacment = player.transform.position - target.transform.position;

要生成给定初始点的矢量:A(x1,y1,z1)和最终点B(x2,y2,z2),计算如下:

v = B - A = (x2 - x1, y2 - y1, z2 - z1);

答案 1 :(得分:0)

所以让我直截了当地说:你想要将目标移向玩家,而不是朝向目标的玩家。这是对的吗?

如果你想将目标物体移向玩家,那么位移应该是player.transform.position - target.transform.position,而不是相反。

如果你真的不想使用Unity功能,那么这就是我如何处理你的代码:

Vector3 displacment = player.transform.position - target.transform.position;
float xMagnitude = displacment.x * displacment.x;
float yMagnitude = displacment.y * displacment.y;
float zMagnitude = displacment.z * displacment.z;

float customMagnitude =Mathf.Sqrt(xMagnitude + yMagnitude + zMagnitude);

//multiplying vector by scalar works the same,
//and is more readable (possibly faster too)
directionToMove = displacement * 1f/customMagnitude;

Vector3 velocity = directionToMove *  speed;
Vector3 moveAmount = velocity * Time.deltaTime;
target.transform.position += moveAmount;