自上而下的太空飞行物理 - 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);
}
}
对不起,没有帮助。 :( –
@NicoBüttner那么我只是尝试了一个空项目和你提供的包,它运行良好......你确定你没有在'LateUpdate()'上输入错字吗?你删除了你复制的行吗到LateUpdate? – Kardux
你确定它适合你吗?我现在在两个系统上测试过,行为是一样的。为了澄清事情,我上传了一个视频(https://youtu.be/12z526xrUpM)给youtube。立方体留在屏幕上的红十字中央,然后看看控制台:Camera.main.position和rigidbody.position是一样的... –
这将有助于如果你能提供的截图/视频这是因为我不是100%确定你的问题是什么。不过,由于脚本的执行顺序,我怀疑你的相机仅仅落后于你的游戏对象,但我可能是错的。 –
顺便说一句,你可以使相机成为船的孩子,它会自动跟随它。 – code11
[视频](https://youtu.be/12z526xrUpM)即将到来。相机似乎不是问题。将相机连接到对象导致相同的行为。 –