当游戏正在运行时,我按下按键时没有停止,我看到飞船越来越快地移动。但是变量推力的价值是所有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);
}
}
答案 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;