自上而下的太空飞行物理 - AddForce - 物体偏离中心越快越快

我刚开始一个小项目,我希望玩家能够从自上而下的角度控制船只。我希望整个事情都用基于物理的运动。自上而下的太空飞行物理 - AddForce - 物体偏离中心越快越快

我的问题是,当我给刚体添加力时,它所连接的物体似乎离开它的位置越快。但是,transform.positions似乎没问题。

我放在一起this little unity package。如果按下W,则按下W的时间越长,船将向上移动并离开中心。S另一个方向移动。

的代码很简单:

using UnityEngine; 

using System.Collections;

public class TestController : MonoBehaviour {

public float mainThrust = 100;

private Vector3 cameraOffset = new Vector3(0f, 0f, 150f);

private new Rigidbody rigidbody;

void Start() {

rigidbody = GetComponent<Rigidbody>();

}

void FixedUpdate() {

float axisVertical = Input.GetAxis("Vertical");

Vector2 force = new Vector2(0f, axisVertical) * mainThrust * Time.fixedDeltaTime;

rigidbody.AddRelativeForce(force, ForceMode.Impulse);

Camera.main.transform.position = rigidbody.transform.position - cameraOffset;

Debug.Log("camPos: " + Camera.main.transform.position

+ " - rbPos: " + rigidbody.transform.position);

}

}

任何帮助表示赞赏。

感谢, 尼科

回答:

简单地把你的Camera.main.transform.position = rigidbody.transform.position - cameraOffset;线LateUpdate MonoBehaviour方法,你会好的,我认为(如果我理解正确的问题)。如果您需要进一步解释,您可以查找this。

编辑:

这是我用来获取期望的结果(基于一个在你的包中找到)脚本:

using UnityEngine; 

using System.Collections;

public class TestController : MonoBehaviour

{

public float mainThrust = 100;

private Vector3 cameraOffset = new Vector3(0f, 0f, 150f);

private new Rigidbody rigidbody;

private Vector3 tmpV1 = new Vector3(0f, 0f, 0f);

private Vector3 tmpV2 = new Vector3(0f, 0f, 0f);

// Draw debug cross at camera position

private void drawX()

{

tmpV1.x = Camera.main.transform.position.x - 10f;

tmpV1.y = Camera.main.transform.position.y;

tmpV2.x = Camera.main.transform.position.x + 10f;

tmpV2.y = Camera.main.transform.position.y;

Debug.DrawLine(tmpV1, tmpV2, Color.red);

tmpV1.x = Camera.main.transform.position.x;

tmpV1.y = Camera.main.transform.position.y - 10f;

tmpV2.x = Camera.main.transform.position.x;

tmpV2.y = Camera.main.transform.position.y + 10f;

Debug.DrawLine(tmpV1, tmpV2, Color.red);

}

void Start()

{

rigidbody = GetComponent<Rigidbody>();

}

void FixedUpdate()

{

float axisVertical = Input.GetAxis("Vertical");

// impulse force in Newton

Vector2 force = new Vector2(0f, axisVertical) * mainThrust * Time.fixedDeltaTime;

rigidbody.AddRelativeForce(force, ForceMode.Impulse);

}

void LateUpdate()

{

Camera.main.transform.position = rigidbody.transform.position - cameraOffset;

drawX();

Debug.Log("camPos: " + Camera.main.transform.position + " - rbPos: " + rigidbody.transform.position);

}

}

以上是 自上而下的太空飞行物理 - AddForce - 物体偏离中心越快越快 的全部内容, 来源链接: utcz.com/qa/265691.html

回到顶部