█実現したいこと
スマホでよくある画面の半分より左側はスティックを動かしたりスワイプしたりでキャラクターの移動
右半分の画面をスワイプするとカメラが動くみたいな感じで実装したいのですが、どうやって実現するか分からなくて。
教えて下さると助かります。
█現在の状態
右画面左画面関係なくスワイプするとキャラクターが移動する。
初めての質問なので少し見にくかったり分かりずらいかもです
C#
1移動の入力用のスクリプトを貼り付けました。 2文字化けした影響でコメントアウトは削除してしまいました。 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6using NamePlayer; 7using SaveDate; 8using UnityEngine.InputSystem; 9 10 11 12//入力用のスクリプト 13public class InputManager : MonoBehaviour 14{ 15 16private Vector3 worldPos = new Vector3(0, 0, 0); 17private Vector3 worldPosCopy = new Vector3(0, 0, 2); 18 19[SerializeField] private PlayerController Pcon; 20 21[SerializeField] private SaveTest Sates; 22 23private Inpputer InputTouch; 24bool Input_Ok = false; 25private Vector3 InputStartPos; 26 27private Vector3 V0 = Vector3.zero; 28Vector2 StartPos; 29private int InputCount = 0; 30 31[SerializeField, Tooltip("タップした場所を何秒クリックしたら攻撃判定に変える")] private int Hold; 32 33[SerializeField] private float SpaceX; 34[SerializeField] private float SpaceY; 35 36private bool Sp; 37[SerializeField] Camera cam; 38private float TouchingTime; 39 40 41[SerializeField] float NomalAttackTime; 42[SerializeField] float StrongAttack; 43 44bool NotHold; 45int HoldCount = 0; 46testM tm; 47 48private Vector3 temp; 49private void Awake() 50{ 51InputTouch = new Inpputer(); 52} 53 54// Start is called before the first frame update 55void Start() 56{ 57InputStartPos = Vector3.zero; 58NotHold = false; 59Sp = false; 60} 61 62#region 63private void OnEnable() 64{ 65//有効化 66InputTouch.Enable(); 67} 68private void OnDisable() 69{ 70//削除 71InputTouch.Disable(); 72} 73#endregion 74 75// Update is called once per frame 76void Update() 77{ 78PlayerInputVec(); 79if (Input_Ok) 80{ 81TouchingTime += Time.deltaTime; 82InputHold(); 83} 84} 85 86private void PlayerInputVec() 87{ 88#region 89InputTouch.Player.Touchpos.started += (InputAction.CallbackContext context) => 90{ 91//最初に入力してきた値取得 92InputStartPos = cam.ScreenToWorldPoint(InputTouch.Player.SwaipPos.ReadValue<Vector2>()); 93//タップしたかのflag 94Input_Ok = true; 95//スキル技を使っているflag 96Sp = false; 97InputCount = 0; 98temp = V0; 99worldPos = V0; 100NotHold = false; 101TouchingTime = 0; 102InputStartPos = cam.ScreenToWorldPoint(InputTouch.Player.SwaipPos.ReadValue<Vector2>()); 103}; 104InputTouch.Player.Touchpos.canceled += (InputAction.CallbackContext context) => 105{ 106Pcon.InputCancel(); 107Sp = false; 108Input_Ok = false; 109InputStartPos = V0; 110InputCount = 0; 111temp = V0; 112worldPos = V0; 113NotHold = false; 114if(TouchingTime <= NomalAttackTime) 115{ 116Pcon.NomalAttack(); 117TouchingTime = 0.0f; 118} 119if(TouchingTime >= StrongAttack) 120{ 121//Pcon.StrongAttack(); 122 123} 124}; 125#endregion 126} 127private void InputHold() 128{ 129StartPos = InputTouch.Player.SwaipPos.ReadValue<Vector2>(); 130 131if (worldPos == InputStartPos && !NotHold) 132{ 133InputCount++; 134if (InputCount >= Hold) 135{ 136Pcon.PlayerHold(); 137Sp = true; 138} 139} 140else 141{ 142InputCount = 0; 143} 144worldPosCopy = worldPos; 145worldPos = cam.ScreenToWorldPoint(StartPos); 146temp = worldPos -InputStartPos; 147float angle = GetAngle(InputStartPos, worldPos); 148 149if(temp.x <0.0f) 150{ 151temp.x = temp.x * -1; 152} 153if (temp.y < 0.0f) 154{ 155temp.y = temp.y * -1; 156} 157//スキル技を使ってるかどうか 158if (!Sp) 159{ 160//スピード調整 161if (temp.x >= 3) 162{ 163temp.x = 3; 164} 165if (temp.x <= -3) 166{ 167temp.x = 3; 168} 169if (temp.y >= 3) 170{ 171temp.y = 3; 172} 173if (temp.y <= -3) 174{ 175temp.y = -3; 176} 177} 178} 179 180//最初に入力した値と最後に入力した値から方向ベクトルを求めてから角度を算出している 181float GetAngle(Vector2 start, Vector2 target) 182{ 183Vector2 dt = target - start; 184float rad = Mathf.Atan2(dt.y, dt.x); 185float degree = rad * Mathf.Rad2Deg; 186 187return degree; 188} 189}
> 右画面左画面関係なくスワイプするとキャラクターが移動する。
ここまで出来ているのであれば、そのコードなどを提示するべきだと思いますが、どうですか。
それらが無いということは、(あなたが意図しているかどうかに関わらず)一から作れと言っているようなものです。
y_waiwaiさん
感謝です変更しました
コードは、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
まず、そのコードの内容は理解していますか?
単にどこかから拾っただけで、理解していないということはないですよね?
もしそうでない場合は、「回答者に理解させてコードを書かせる」ということになり、本来あなたがやるべきことをやらせているという点で丸投げに該当します。
また、コードが見づらい(y_waiwaiさんの通りに修正してください)ので、全て読み切れていませんが、もしタッチ座標を取得できるのであれば、それで右半分か左半分かを最初に判定すればよいです。
fiveHundredさん
スクリプトは僕が書いているので理解はできています。
僕が気になっていたのは実装方法だったので
スクリプトに関しては見る必要がないと思うので雑に放り投げてます。
InputStartPosでポジションが取れているのではてなブログさんのサイトを参考にしつつ実装してみます。
情報感謝です。