我有以下問題。我正在嘗試制作具有自上而下視圖的游戲(類似于第一個 GTA 游戲)。問題是當我按下播放器正在移動但無法停止的鍵時。在這里你可以看到我的腳本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovemenet : MonoBehaviour
{
private Rigidbody2D m_Rigidbody;
private Transform playerTransform;
public float m_Speed = 100.0f;
// Start is called before the first frame update
void Start()
{
m_Rigidbody = GetComponent<Rigidbody2D>();
playerTransform = GameObject.Find("Player").transform;
}
// Update is called once per frame
void FixedUpdate()
{
Vector3 playerPos = playerTransform.eulerAngles;
if (Input.GetKey(KeyCode.UpArrow))
{
m_Rigidbody.velocity= transform.up * Time.deltaTime * m_Speed;
}
if (Input.GetKey(KeyCode.DownArrow))
{
m_Rigidbody.velocity = transform.up * Time.deltaTime * (-m_Speed);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(0, 0, -1 * m_Speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(0, 0, 1 * m_Speed * Time.deltaTime);
}
}
}
'''
你能告訴我如何解決嗎?感謝您的回答。
uj5u.com熱心網友回復:
請注意,通常速度已經是每秒絕對單位的值,Time.deltaTime在這種情況下您不想乘以。
同樣一般來說,無論何時處理物理,我都不會使用transform,而是通過Rigidbody.
然后當你不按任何鍵時
if (Input.GetKey(KeyCode.UpArrow))
{
m_Rigidbody.velocity = Quaternion.Euler(0, 0, m_Rigidbody.rotation) * Vector3.up * m_Speed;
}
else if (Input.GetKey(KeyCode.DownArrow))
{
m_Rigidbody.velocity = Quaternion.Euler(0, 0, m_Rigidbody.rotation) * Vector3.down * m_Speed;
}
else
{
m_Rigidbody.velocity = Vector2.zero;
}
對于輪換,我也寧愿去
m_Rigidbody.rotation = m_Speed * Time.deltaTime;
和
m_Rigidbody.rotation -= m_Speed * Time.deltaTime;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/397767.html
