我有一個用于 2D 自上而下游戲的玩家控制器腳本 它使用舊的輸入系統,但我想使用新的輸入系統,以便我的游戲可以支持多種輸入型別(也因為我想學習如何使用新的輸入系統)
我閱讀了有關統一的檔案但仍然無法理解,我找到了這個檔案
然后保存它。單擊它并在檢查器中啟用“生成 C# 類”。然后在你的代碼中是這樣的:
private void Awake()
{
InputActions playerInput = new InputActions();
playerInput.GamePlayPlayer.Move.performed = context => MoveInput(context);
playerInput.Enable();
}
private void MoveInput(InputAction.CallbackContext context)
{
Vector2 input = context.ReadValue<Vector2>();
moveInputData = new Vector3(input.x, 0, input.y);
}
void Update()
{
transform.position = Vector2.MoveTowards(transform.position, movePoint.position, moveSpeed * Time.deltaTime);
if(moveInputData == Vector3.Zero)
return;
if (Vector2.Distance(transform.position, movePoint.position) <= .5f)
{
if (!Physics2D.OverlapCircle(movePoint.position moveInputData, .2f, obstacleMask))
{
movePoint.position = moveInputData;
}
}
}
我沒有測驗它,但我認為它應該沒問題。
uj5u.com熱心網友回復:
您幾乎正確設定了控制方案,您需要將操作型別更改Value為Vector2或控制型別Stick,因為您將獲得兩個軸(上/下和左/右),如下所示:

然后您需要在游戲中設定您的方案,您需要添加一個Player Input組件并選擇您的控制方案:

最后,從您的代碼中,您可以訪問控制方案的所有動作和動作圖,在這種情況下,您無需讀取水平軸和垂直軸,而是像這樣讀取它們:
InputActionAsset actions;
void Awake() {
// Retrieve the action asset
actions = GetComponent<PlayerInput>().actions;
}
void Update() {
// Retrieve the current movement input (horizontal, vertical)
// You can save this action in a variable in the Awake too if you plan to use it multiple times (like during each Update)
Vector2 movement = actions.FindAction("Movement").ReadValue<Vector2>();
// Check if we have horizontal movement
if(movement.x != 0f){
// Do stuff
}
// Check if we have vertical movement
if(movement.y != 0f){
// Do stuff
}
}
最后一點:我會避免在其中使用斜杠 (/) 命名地圖或操作,因為您可以從不同的地圖中檢索操作,例如actions.FindAction("Music_Fight/Movement").
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329223.html
上一篇:獲取列舉的值作為字體樣式
