如何相对于球员位置制作此对象?

时间:2015-04-25 15:59:45

标签: c# math unity3d

我的游戏中的玩家可以悬浮物体并用鼠标在世界上移动它们。当他移动时,如何让悬浮物与玩家一起移动?

private void levitateObject() {
//Debug.Log("Levitating");

float yAxis = Input.GetAxis("Mouse Y");
float xAxis = Input.GetAxis("Mouse X");

Vector3 frontForce = playerCamera.transform.TransformDirection(Vector3.forward) * (yAxis * 1.5f) ;
Vector3 rightForce = playerCamera.transform.TransformDirection(Vector3.right) * (xAxis * 1.5f);

Vector3 currPos = levitatingObject.transform.position;
Vector3 nextPos = new Vector3 ( levitatingObject.transform.position, elevation,  levitatingObject.transform.position) + rightForce + frontForce;

levitatingObject.GetComponent < Rigidbody > ().velocity = (nextPos - currPos) * 10;
}

我想做类似下面的事情,但后来我的目标根本不动。

Vector3 nextPos = new Vector3 ( transform.position.x + (levitatingObject.transform.position.x -transform.position.x) , elevation, transform.position.z + (levitatingObject.transform.position.z -transform.position.z));

2 个答案:

答案 0 :(得分:1)

让玩家成为对象的父级。

obj.transform.parent = player.gameObject;

然后对象的位置将始终相对于玩家的位置。当玩家移动时,对象也会移动。

答案 1 :(得分:0)

您可以将其设置为父级,但是这样可能会遇到一些问题,因此,如果您想这样做,则:

开始拾取它时,运行它并将偏移量存储在对象上

public Vector 3 Offset = PickUpObject.transform.position - playerObject.transform.position;

然后在更新方法中运行

transform.position = player.position + offset;