我的角色(時間上)是一個立方體。該多維數據集使用C#腳本和Rigid Body組件映射。使用RigidBody.AddRelativeForce改變方向時的奇怪行爲
我使用以下代碼中Update()
改變我的字符(這是一個剛體)的方向:
void Update() {
rigidbody.AddRelativeForce(transform.right * speed, ForceMode.Acceleration);
if (Input.GetKeyDown(KeyCode.LeftArrow)) {
gameObject.transform.Rotate(0, -90, 0);
rigidbody.velocity = transform.right* rigidbody.velocity.magnitude;
}
if (Input.GetKeyDown(KeyCode.RightArrow)) {
gameObject.transform.Rotate(0, 90, 0);
rigidbody.velocity = transform.right* rigidbody.velocity.magnitude;
}
}
的行爲變得:http://youtu.be/NYPNgAulc-k
我期望字符轉動90度左/對,並開始加速到新的方向。但是現在,在它變成曲線之後,它會加速。有關更多信息,請參閱上述視頻。
我錯過了什麼?
UPDATE(1月30日):更改transform.right
到transform.forward
和除去速度改變行:
void Update() {
rigidbody.AddRelativeForce(transform.forward * speed, ForceMode.Acceleration);
if (Input.GetKeyDown(KeyCode.LeftArrow)) {
gameObject.transform.Rotate(0, -90, 0);
}
if (Input.GetKeyDown(KeyCode.RightArrow)) {
gameObject.transform.Rotate(0, 90, 0);
}
}
這導致在另一個方向上移動(因此我改變相機指向矢量)&不左或右箭頭改變方向;只有Runner對象旋轉。
演示視頻:http://youtu.be/UVG6l14oyjw
UPDATE(2月4日):下面應用@的Roboto的答案,有做了一些修改:
void Update() {
if (Input.GetKeyDown(KeyCode.LeftArrow)) {
transform.Rotate(0, -90, 0);
rigidbody.velocity = Vector3.zero;
rigidbody.angularVelocity = Vector3.zero;
}
if (Input.GetKeyDown(KeyCode.RightArrow)) {
transform.Rotate(0, 90, 0);
rigidbody.velocity = Vector3.zero;
rigidbody.angularVelocity = Vector3.zero;
}
}
void FixedUpdate() {
// Physics stuff should be done inside FixedUpdate :)
rigidbody.AddForce(transform.forward * speed, ForceMode.Acceleration);
}
車削終於好了。我有一個額外的功能,使角色跳躍。在Update()
,我添加:
if ((Input.GetButtonDown("Jump") || isTouched) && isOnGround) {
isOnGround = false;
rigidbody.AddForce(jumpHeight, ForceMode.VelocityChange);
}
其中isOnGround
是布爾值,當轉輪對象接觸地面時設置爲true。但是,在離開地面之前,它會沿着Z軸移動。當裝置離開地面時,它會滑動到X-Z軸。這部分更新的問題單獨提出:here。
注:鑑於亞軍對象有3
對不起,我在Unity很新。我應該如何修改代碼以實現我預期的行爲? – Raptor
更改爲'transform.forward'後,該框從開始向左移動而不是向前移動。 – Raptor
查看更新的問題和屏幕截圖視頻 – Raptor