Enhanced On-Screen Stick
February 22, 2024 · View on GitHub
Provides an advanced virtual joystick compatible with Unity Input System/uGUI.
Enhanced On-Screen Stickは、UnityのInput Systemに対応した高機能な仮想スティックを提供するライブラリです。Input SystemのOn-screen Controlsを用いて、モバイルなどのタッチデバイス上でジョイスティックの入力をシミュレートします。また、タッチ位置の追従やデッドゾーン、操作可能な領域の設定などの高度なカスタマイズも可能となっています。
セットアップ
要件
- Unity 2020.1 以上
- Input System 1.0.0 以上
インストール
- Window > Package ManagerからPackage Managerを開く
- 「+」ボタン > Add package from git URL
- 以下のURLを入力する
https://github.com/AnnulusGames/EnhancedOnScreenStick.git?path=Assets/EnhancedOnScreenStick
またはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記
{
"dependencies": {
"com.annulusgames.enhanced-on-screen-stick": "https://github.com/AnnulusGames/EnhancedOnScreenStick.git?path=Assets/EnhancedOnScreenStick"
}
}
クイックスタート
Enhanced On-Screen Stickを導入することで、Create > Enhanced On-Screen Controls > On-Screen Stickから仮想スティックを作成可能になります。
作成したらCanvas上に配置し大きさや見た目を調整しましょう。コンポーネントがアタッチされているオブジェクトのRectTransformの範囲が操作可能な領域になります。
次にInspectorからControl Pathの設定を行います。これを設定することで任意のデバイスの入力をシミュレートすることが可能です。
以上でセットアップは完了です。後は通常通りInput Systemを用いて入力を処理することが可能になります。以下はEnhanced On-Screen StickとInputActionを用いて移動の処理を行うサンプルです。
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
[SerializeField] InputAction inputAction;
[SerializeField] float movementSpeed = 5f;
void Start()
{
inputAction.Enable();
}
void Update()
{
transform.position += movementSpeed * Time.deltaTime * (Vector3)inputAction.ReadValue<Vector2>();
}
}
カスタマイズ
オブジェクトの構成
Enhanced On-Screen Stickは以下のオブジェクトで構成されます。
- Enhanced On-Screen Stick
- Background
- Handle
最上位のオブジェクトにEnhanced On-Screen Stickコンポーネントと、タッチイベントを検知できるように何らかのGraphicコンポーネント(Imageなど)をアタッチします。このオブジェクトのRectがそのままスティックを操作可能な領域になります。
Background、Handleはスティックの位置を視覚的に表現するためのオブジェクトです。サイズや見た目は自由に変更できますが、HandleはBackgroundの子オブジェクトである必要があります。
StickType
StickTypeからスティックが操作された時の動作を変更できます。
| StickType | 説明 |
|---|---|
| Fixed | スティックは常に最初の位置に固定されます。 |
| Floating | スティックはタッチされた位置に移動し、ドラッグが終了するまでその位置に固定されます。 |
| Dynamic | スティックはタッチされた位置に移動し、ドラッグの動きに追従します。 |
その他の設定
| プロパティ | 説明 |
|---|---|
| Movement Range | Handleの中心からの移動距離を指定します。 |
| Dead Zone | 0〜1の値で入力の閾値を指定します。Dead Zone以下の入力値は0に補正されます。 |
| Show Only When Pressed | これがtrueの場合、タッチされていない間はBackgroundとHandleが非アクティブになります。 |