一點背景關系,這是一個 2D 游戲,我得到了它,所以我可以左右移動和跳躍,我不能在左右移動時跳躍,如果我在半空中移動,那么玩家的體面會顯著減慢這是代碼:
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private float horSpeed;
[SerializeField] private float vertSpeed;
private Rigidbody2D rb;
private bool isJumping;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
if (Input.GetKey(KeyCode.Space) && !isJumping)
rb.velocity = new Vector2(0, horSpeed);
isJumping = true;
if (Input.GetKey(KeyCode.A))
rb.velocity = new Vector2(-vertSpeed, 0);
if(Input.GetKey(KeyCode.D))
rb.velocity = new Vector2(vertSpeed, 0);
if (rb.velocity.y==0f)
{
isJumping = false;
}
}
}
我沒有看到我在這里做錯了什么,可能是我在不同的代碼行上注冊了輸入,但如果這是問題,我不確定如何解決它
uj5u.com熱心網友回復:
提供的代碼處理物件的速度。因此,一旦考慮了所有因素,您希望將計算出的速度分配為一個值。我已經糾正了幾點并提出了這個:
private void Update()
{
// we store the initial velocity, which is a struct.
var v = rb.velocity;
if (v.y==0f)
isJumping = false;
if (Input.GetKey(KeyCode.Space) && !isJumping) {
v.y = vertSpeed;
isJumping = true;
}
if (Input.GetKey(KeyCode.A))
v.x = -horSpeed;
if(Input.GetKey(KeyCode.D))
v.x = horSpeed;
rb.velocity = v;
}
代碼首先存盤速度的原因是因為您對速度結構欄位所做的任何更改都需要作為單個速度更新應用回來(他是值和參考型別物件之間的差異)。
uj5u.com熱心網友回復:
向左或向右移動時無法跳躍的原因是因為您在移動時覆寫了“水平”速度。查看您的代碼以向左或向右移動。注意按下 a 或 d 時如何將 y 速度設定為 0。
嘗試這個:
private void Update() {
if (Input.GetKey(KeyCode.Space) && !isJumping) {
rb.velocity.y = horSpeed;
isJumping = true;
}
if (Input.GetKey(KeyCode.A))
rb.velocity.x = -vertSpeed;
if(Input.GetKey(KeyCode.D))
rb.velocity.x = vertSpeed;
if (rb.velocity.y==0f)
{
isJumping = false;
}
}
我認為這應該可行,但我現在無法訪問 Unity,所以我必須等到我回家檢查它。另外,我沒有在這段代碼中更改它,但似乎您的 horSpeed 和 vertSpeed 翻轉了。上下運動(又名跳躍)應該是 vertSpeed。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517267.html
標籤:C#unity3d二维
上一篇:如何在房間之間移動氧氣?
下一篇:克隆預制件接觸墻時如何提高分數?
