如何显示我的飞船的加速度值?

时间:2016-11-23 11:36:10

标签: c# unity3d

当游戏正在运行时,我按下按键时没有停止,我看到飞船越来越快地移动。但是变量推力的价值是所有5个永远不变的。然后是什么值显示和改变加速?什么推力呢?如果我将推力从5改为10?

我在宇宙飞船上添加了一个Rigidbody组件。

我这样做的方法是为我的宇宙飞船增加加速度的正确方法吗?

我希望每次按p键时在OnGUI中显示加速度的值。

 <div class="row">
            <div class="col-xx-12">something</div>
            <div class="col-xx-12">something</div>
            <div class="col-xx-12">something</div>
 </div>

更新

我的脚本现在更改后。当我按下p键时,宇宙飞船快速消失,OnGUI中的加速度值始终为0:

using UnityEngine;
using System.Collections;

public class ControlShip : MonoBehaviour {

    public int rotationSpeed = 75;
    public int movementspeed = 10;
    private int thrust = 5;

    Rigidbody _rigidbody;

    void Start () {

        _rigidbody = GetComponent<Rigidbody>();
        Debug.Log("Acc Speed: " + thrust);
    }

    void Update () {

        var v3 = new Vector3(Input.GetAxis("Vertical"), Input.GetAxis("Horizontal"), 0.0f);
        transform.Rotate(v3 * rotationSpeed * Time.deltaTime);
        transform.position += transform.forward * Time.deltaTime * movementspeed;

        if (Input.GetKey(KeyCode.Z))
            transform.Rotate(Vector3.forward * rotationSpeed * Time.deltaTime);

        if (Input.GetKey("p"))
        {
            _rigidbody.AddRelativeForce(0f, 0f, thrust, ForceMode.Acceleration);
        }
    }

    void OnGUI()
    {
        GUI.Label(new Rect(100, 100, 200, 200), "Acc Speed: " + thrust);
    }
}

2 个答案:

答案 0 :(得分:1)

从头开始,推力是你的星舰的实际力(推力)的值。所以价值越大,它就会越强大。你的星舰。

如果您的脚本有效,那么它是添加加速的好方法(取决于您的想法)

当用户按下&#34; P&#34;时能够显示加速度值。关键是你应该计算加速度值(how to calculate,或者只使用@Dan Wilson回答/评论)。

然后你应该修改你的Update方法:

public void Update(){
    isPKeyDown = Input.GetKey("p");
    // ... rest of your code
} 

更新您的班级成员:

bool isPKeyDown = false;
float acceleration = .0f;

更新您的OnGUI方法:

public void OnGUI(){
    if ( isPKeyDown ) {
        GUI.Label(new Rect(100, 100, 200, 200), "Acc Speed: " + acceleration);
    }
}

并计算你的加速度并使用刚体玩,我建议使用固定更新:

public void FixedUpdate(){
    // calculate acceleration here...
    acceleration = ... ;
    if ( isPKeyDown ) {
        _rigidbody.AddRelativeForce(0f, 0f, thrust, ForceMode.Acceleration);
    }
}

编辑: 找出加速度的最简单方法:

// as a member field
Vector3 previousPosition = Vector3.Zero;

// in update
float distance = Vector3.Distance(previousPosition, transform.Position);
float acceleration = distance / Mathf.Pow(Time.deltaTime, 2);

previousPosition = transform.Position; 

EDIT2: updated code on pastebin

答案 1 :(得分:1)

我认为你所寻找的是速度。要查看特定时间间隔内的加速度,您需要比较速度差除以它们之间的时间。您打印的值5是您添加的值,而不是太空船的值。

acceleration = (rigidbody.velocity - lastVelocity) / Time.fixedDeltaTime;
lastVelocity = rigidbody.velocity;

Further reading with this example here