はじめに
2D横スクロールで
画面右側に触れていたら右へ移動
画面左側に触れていたら左へ移動
というのがやりたかった
つまずいた点
タッチ操作をするとキャラクターが左右に動き続けてしまう
初心者の私が考える原因
アクションにPointerのPositionを設定すると
canceledが発火しない
解決法
InputSystemのアクションやらバインドやらをぽちぽちすることで解決したかったが
TouchStateなるものを使うことで何とかなった
もっと簡単な方法とは思う…ぜひ教えて欲しい…
とりあえず必要なコード全文
using UnityEngine.InputSystem.LowLevel;
private TouchState _touchState;
public void _onMove(InputAction.CallbackContext context)
{
_touchState = context.ReadValue<TouchState>();
var touchPosition = _touchState.position;
float screenWidth = Screen.width;
// タッチ位置が画面のどちら側か判定
if (touchPosition.x < screenWidth / 2)
{
_inputDirection = Vector2.left;
}
else
{
_inputDirection = Vector2.right;
}
if (!_touchState.isInProgress)
{
_inputDirection = Vector2.zero;
}
}
}
ポイントはこれ↓
if (!_touchState.isInProgress)
{
_inputDirection = Vector2.zero;
}
touchStateのisInProgressを取得することで触れているかどうかを取得できた
おわりに
もっといい方法があると思いつつも他の方法で解決できないので
一旦このようになりました
もっといいやり方があればぜひコメントなどで教えていただけると助かります…