前提
Unityで2DRPGを作っています。
言語はC#です。
実現したいこと
4方向(上下左右)移動をして、斜め移動をしないで壁とかに当たり判定をつけてすり抜けないようにしたいです。
発生している問題・エラーメッセージ
現在、4方向移動は完成しているのですが、壁の当たり判定はがばがばで
キーを同時押ししたら斜め移動になって壁をすり抜けちゃうことや、壁に埋まってしまう問題が出ています。
言葉じゃ伝えにくいので動画を限定リンクで公開しました。
➔https://youtu.be/gVLVHgIYMpo
該当のソースコード
<Player>C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using InputKey; 5 6public class Player : MonoBehaviour 7{ 8 9 private GameObject player; //(操作)移動したいオブジェクトを設定 10 private float PlayerPosX, PlayerPosY, PlayerPosZ; 11 Vector3 movePosition, OldPlayerPos; //移動する距離を格納 12 public int speed = 3, HitJudgement = 3; //1マス毎に移動するスピード 13 public Vector3 moveY = new Vector3(0, 0.5f, 0); //(1マス毎の)Y軸の移動距離 14 public Vector3 moveX = new Vector3(0.5f, 0, 0); //(1マス毎の)X軸の移動距離 15 bool moveButtonJudge; //移動中の判定 16 17 Animator animator; 18 19 void Start() 20 { 21 player = GameObject.Find("主人公"); 22 moveButtonJudge = false; //⑤初期設定 23 this.animator = GetComponent<Animator>(); 24 } 25 26 void Update() 27 { 28 // //移動場所設定 29 ////キー入力を行うと、moveButtonJudge = true に変わり、一時的にキー入力を無効 30 //if (moveButtonJudge == false){ 31 // if (Input.GetKey("up")) 32 // { 33 // movePosition = player.transform.position + moveY; //movePositionに移動する距離を格納 34 // moveButtonJudge = true; //moveButtonJudge = trueにして、移動を制限する 35 // } 36 // else if (Input.GetKey("down")) 37 // { 38 // movePosition = player.transform.position + -moveY; 39 // moveButtonJudge = true; 40 // } 41 // else if (Input.GetKey("right")) 42 // { 43 // movePosition = player.transform.position + moveX; 44 // moveButtonJudge = true; 45 // } 46 // else if (Input.GetKey("left")) 47 // { 48 // movePosition = player.transform.position + -moveX; 49 // moveButtonJudge = true; 50 // } 51 //} 52 53 //player.transform.position = Vector3.MoveTowards(player.transform.position, movePosition, speed * Time.deltaTime); //移動開始(playerオブジェクトが, 目的地に移動, 移動速度) 54 55 // //指定した場所にオブジェクトが移動すると、再度移動が可能になる 56 //if (player.transform.position == movePosition) moveButtonJudge = false; 57 58 if(Input.GetKey(KeyCode.UpArrow)) 59 { 60 transform.position += transform.up * speed * Time.deltaTime; 61 } 62 else if(Input.GetKey(KeyCode.DownArrow)) 63 { 64 transform.position -= transform.up * speed * Time.deltaTime; 65 } 66 else if(Input.GetKey(KeyCode.RightArrow)) 67 { 68 transform.position += transform.right * speed * Time.deltaTime; 69 } 70 else if(Input.GetKey(KeyCode.LeftArrow)) 71 { 72 transform.position -= transform.right * speed * Time.deltaTime; 73 } 74 } 75 76 void OnTriggerStay2D(Collider2D other) 77 { 78 if(other.gameObject.CompareTag("Wall-All")) 79 { 80 if (Input.GetKey("up")) 81 { 82 transform.position -= transform.right * speed * Time.deltaTime; 83 } 84 else if (Input.GetKey("down")) 85 { 86 transform.position += transform.right * speed * Time.deltaTime; 87 } 88 else if (Input.GetKey("right")) 89 { 90 transform.position -= transform.right * speed * Time.deltaTime; 91 } 92 else if (Input.GetKey("left")) 93 { 94 transform.position += transform.right * speed * Time.deltaTime; 95 } 96 } 97 speed = 3; 98 } 99 100} 101
試したこと
deltaTimeをなくして、speedだけで移動させてみたり
別の方式で移動させてみたりしてみました。
コメントアウトしてるのが別の方式です。
補足情報(FW/ツールのバージョンなど)
Windows 11 Home
CPU Core i3-12100
Unity 2021,3,2f1
回答1件
あなたの回答
tips
プレビュー