在這里,當我按下一個可以作業的空格時,我試圖更改 DirectionX 的值,但我必須多次按下才能更改。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player_Movement_script : MonoBehaviour
{
public float moveSpeed = 1f;
public float DirectionX=1;
Vector2 DirectionMovement;
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
if (DirectionX > 0)
{
DirectionX = -1;
}
else if (DirectionX <0)
{
DirectionX = 1;
}
}
DirectionMovement = new Vector2(DirectionX, 1f);
transform.Translate(DirectionMovement * moveSpeed * Time.deltaTime);
}
}
uj5u.com熱心網友回復:
三點:
您寧愿每次按鍵
GetKeyDown僅使用一次which 為真。否則,您的按鍵可能會被跟蹤兩次,因此您會立即再次更改方向。
您應該獲得單個事件用戶輸入,
Update以免錯過一幀。然后一旦涉及物理 - 我猜是因為你使用
FixedUpdate而不是根本不使用Transform而是通過Rigodbody2D組件
所以像
[SerializeField] private Rigidbody2D _rigidbody;
void Awake ()
{
if(!_rigidbody) _rigidbody = GetComponent<Rigidbody2D>();
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))
{
DirectionX *= -1;
}
}
void FixedUpdate()
{
// Only overwrite the X velocity!
var velocity = _rigidbody.velocity;
velocity.x = DirectionX * moveSpeed;
_rigidbody.velocity = velocity;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/342841.html
上一篇:如何在WPF中制作側邊欄
