將觸摸優化的輸入控件與螢幕控制結合使用

更新頁 :
頁面創建日期 :

驗證環境

窗戶
  • 視窗 11
統一編輯器
  • 2020.3.25f1
輸入系統包
  • 1.2.0

此提示的先決條件

作為此提示描述的前提,已預先進行了以下設置。

您還應該熟悉以下提示:

關於觸摸螢幕控制

我經常使用鍵盤或遊戲手柄玩遊戲。 在只能通過觸摸操作的設備(例如智慧手機)上,您將通過觸摸玩遊戲。

Unity 的輸入系統包使用螢幕控制來類比觸摸交互,就像它們由控制器控制一樣。

螢幕控制之前

本文有點長,但本主題與螢幕控制沒有直接關係。 如果可以在其他步驟中使用輸入系統包來檢查輸入,例如遊戲手柄,那很好。

在此提示中,我們將創建一個操作地圖。 介紹如何模擬觸摸遊戲手柄,就好像您正在與遊戲手柄交互一樣。

順便說一下,它還支援在腳本中使用 Keyboard 類和 Gamepad 類而不是操作映射的方法。 這次我不會解釋它,但如果你想用這些類嘗試一下,你可以準備下一頁描述的代碼。

首先,在畫布上放置一個文本對象以顯示您的輸入。 稍後,我們將觸摸物件放在底部,因此請留出一些空間。

首先,創建操作映射,如下所示: 您正在建立的操作與描述操作映射時相同的操作。

由於操作圖的解釋不是主要內容,因此綁定很簡單。 有關操作地圖的詳細資訊,請參閱以下頁面。

這一次,輸入採集是通過腳本而不是“發送消息”或“調用 Unity 事件”執行的。 這也不僅限於腳本,即使您使用“發送消息”等,它也能正常工作。

確保已從操作映射生成代碼。

文稿如下所示: 這與解釋操作地圖時幾乎相同。

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputActionScript : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>アクションマップから自動生成されたクラス。</summary>
  private InputActionSample _actionMap;

  private void Awake()
  {
    // 各操作を行ったときに呼ばれるイベントを設定する
    _actionMap = new InputActionSample();
    _actionMap.Action2D.Move.performed += context => OnMove(context);
    _actionMap.Action2D.Attack.performed += context => OnAttack(context);
    _actionMap.Action2D.Move.canceled += context => OnMove(context);
    _actionMap.Action2D.Attack.canceled += context => OnAttack(context);
  }

  private void OnEnable()
  {
    // このオブジェクトが有効になったときにアクションマップを有効にする
    _actionMap.Enable();
  }

  private void OnDisable()
  {
    // このオブジェクトが無効になったときにアクションマップが余計な動作を起こさないように無効にする
    _actionMap.Disable();
  }

  /// <summary>
  /// Move 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnMove(InputAction.CallbackContext context)
  {
    // Move の入力量を取得
    var vec = context.ReadValue<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Attack 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnAttack(InputAction.CallbackContext context)
  {
    // Attack ボタンの状態を取得
    var value = context.ReadValueAsButton();
    TextObject.text = $"Attack:{value}\n{TextObject.text}";
  }
}

文稿 EventSystem 附加到 。

運行遊戲以查看它是否可用作操作地圖。

螢幕按鈕

螢幕按鈕類比按下遊戲手柄上的按鈕(如 A 和 B)以及觸摸螢幕上某些物件時的鍵盤上的鍵。 順便說一下,它說觸摸,但它也適用於滑鼠點擊。

首先將按鈕放在螢幕上。 由於您只是附加一個元件,因此它適用於按鈕以外的物件。

從元件添加輸入>螢幕按鈕。

從控制路徑向東設置遊戲手柄的按鈕。 這使得觸摸遊戲手柄上的「東鍵」看起來好像被按下了。

確保在運行遊戲並按下按鈕時出現攻擊。 如果是可觸摸設備,您可以確認它是否適用於觸摸。

屏幕搖桿

屏幕搖桿可讓您通過觸摸移動物體,例如搖桿。 當您移動搖桿時,可以像移動遊戲手柄一樣類比它。 除了觸摸之外,還可以用滑鼠移動它。

在螢幕上放置一個按鈕物件,該物件將成為觸摸桿。 我們在這裡使用按鈕,但它也適用於按鈕以外的物件。

在“添加元件”下,選擇“輸入>屏幕搖桿”。

從「控制路徑」中,選擇操作映射中定義的遊戲板左搖桿。

運行遊戲並嘗試拖動「搖桿」 按鈕。 按鈕繞圈移動,就像移動棍子一樣。 當然,您也可以檢查輸入內容是否在運行時被獲取。

在這種情況下,我們放置了一個按鈕,但也可以通過放置圓形框架和圓形搖桿物件來使其看起來像虛擬搖桿。

順便說一下,這個可移動範圍可以在屏幕搖桿的“移動範圍”中更改。