自顶向下的太空飞行物理- AddForce -物体移动的速度越快
本文关键字:移动 速度 AddForce 太空飞行 飞行物 自顶向下 太空 | 更新日期: 2023-09-27 18:16:07
我刚刚开始了一个小项目,我希望玩家从自上而下的角度控制一艘船。我希望整个东西都使用基于物理的运动。
我的问题是,当我向刚体添加力时,它所附着的对象似乎越快越偏离其位置。然而,变换。位置似乎没问题。
我把这个小统一包放在一起。如果你按W键,你按W键的时间越长,船就会向上移动并偏离中心。
代码相当简单:
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方法中,我认为您会很好(如果我正确理解了问题)。如果你需要进一步的解释,你可以找这个。
下面是我用来获得所需结果的脚本(基于在包中找到的脚本):
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);
}
}