###自作ゲームにてプレイヤーキャラクターが移動できなくなるのを改善したい
十字キーを押下するとプレイヤーキャラクターが1ユニット移動するようにしていたのですが、エネミーの上に移動すると以後移動できなくなりました。他の三方向は問題ありません。下の画像のとおりRaycastHit2Dで当り判定を行っています。
###発生している問題
上記の画像のとおりエネミーの上の位置にくると以後移動できなくなります(わかりにくいですが……)。ただ向く方向を変えることは出来ます。正直どこに問題があるのか分からない状態で、関係あるスクリプトがどれかも迷っています。なので最も怪しい部分を載せます。
###該当のソースコード
C#
1 UserInput userInput; 2 public GameObject questObject; 3 private Quest _quest; 4 5 public GameObject gameManagerObject; 6 GameManager gameManager; 7 8 protected Animator animator; 9 private float _directionX; 10 private float _directionY; 11 private bool walking; 12 13 public GameObject childRightCheck; 14 public GameObject childLeftCheck; 15 public GameObject childFrontCheck; 16 public GameObject childBackCheck; 17 18 RaycastHit2D rightCheck; 19 RaycastHit2D leftCheck; 20 RaycastHit2D frontCheck; 21 RaycastHit2D backCheck; 22 23 public LayerMask BlockingLayer; 24 25 void Update() 26 { 27 rightCheck = Physics2D.Linecast (transform.position, childRightCheck.transform.position, BlockingLayer); 28 leftCheck = Physics2D.Linecast (transform.position, childLeftCheck.transform.position, BlockingLayer); 29 frontCheck = Physics2D.Linecast (transform.position, childFrontCheck.transform.position, BlockingLayer); 30 backCheck = Physics2D.Linecast (transform.position, childBackCheck.transform.position, BlockingLayer); 31 32 if (animator) { 33 34 35 walking = true; 36 37 if (userInput.horizontalInput > 0){ // 右 38 _directionX = 1; 39 _directionY = 0; 40 41 } else if (userInput.horizontalInput < 0){ // 左 42 _directionX = -1; 43 _directionY = 0; 44 45 } else if (userInput.verticalInput < 0){ // 下 46 _directionX = 0; 47 _directionY = -1; 48 49 } else if (userInput.verticalInput > 0){ // 上 50 _directionX = 0; 51 _directionY = 1; 52 53 } else{ 54 walking = false; 55 } 56 if (walking) { 57 58 if (gameManager.encounterFlag == false) { 59 60 transform.Translate (new Vector3 (_directionX, _directionY, 0)); 61 62 } else if (gameManager.encounterFlag == true){ 63 //if 64 /* ((!rightCheck && Input.GetKeyDown (KeyCode.RightArrow)) 65 || (!leftCheck && Input.GetKeyDown (KeyCode.LeftArrow)) 66 || (!frontCheck && Input.GetKeyDown (KeyCode.DownArrow)) 67 || (!backCheck && Input.GetKeyDown (KeyCode.UpArrow))) 68 {*/ここの条件式が怪しい(特にfrontCheck) 69//------------------------------------------------------------------------------------------------------------------------ 70 /*(!(_directionX == 1 && _directionY == 0 && rightCheck) 71 && !(_directionX == -1 && _directionY == 0 && leftCheck) 72 && !(_directionX == 0 && _directionY == -1 && frontCheck) 73 && !(_directionX == 0 && _directionY == 1 && backCheck)) 74 && (Input.GetKeyDown (KeyCode.UpArrow) || 75 Input.GetKeyDown (KeyCode.DownArrow) || 76 Input.GetKeyDown (KeyCode.RightArrow) || 77 Input.GetKeyDown (KeyCode.LeftArrow))*/ 78//------------------------------------------------------------------------------------------------------------------------ 79 80 81 transform.Translate (new Vector3 (_directionX, _directionY, 0)); // 移動できる 82 //} 83 } 84 } 85 86 animator.SetFloat ("DirectionX", _directionX); 87 animator.SetFloat ("DirectionY", _directionY); 88 animator.SetBool ("Walking", walking); 89 } 90 }
###試したこと
起こっている現象から、frontCheckに問題があるのだと思い該当部分をコメントアウトしてみたのですが、結果は変わりませんでした。
条件式を変えてみたり、frontCheckの中身を調べてみたりしたのですが結局改善されないまま現在に至っています。
問題点の心当たりなどありましたらお教え頂きたいです。
###補足情報(言語/FW/ツール等のバージョンなど)
C#
Unity2017.2.0b8
###追記
C#
1// 怪しいと思った箇所をこのようにしました。 2if ((!rightCheck & Input.GetKeyUp (KeyCode.RightArrow)) 3 | (!leftCheck & Input.GetKeyUp (KeyCode.LeftArrow)) 4 | (!frontCheck & Input.GetKeyUp (KeyCode.DownArrow)) 5 | (!backCheck & Input.GetKeyUp (KeyCode.UpArrow))) 6{ 7 if(frontCheck) 8 Debug.Log ("frontCheckがtrueです"); 9 10 transform.Translate (new Vector3 (directionX, directionY, 0)); 11}
実はGetKeyDownの時は矢印キーを2つ同時に押さないと移動できなかったのです(理由はわかりません)が、GetKeyUpにすると意図どおりの挙動になりました。
ただ上記のコードにある"frontCheckがtrueです"がfrontCheckがエネミーに重なった場合表示されるはずが重なっても表示しませんでした。しかし移動は出来ない状態です。trueではないにもかかわらず移動が出来ず、しかも!frontCheckをコメントアウトするとエネミーの上の箇所でも移動できます(下矢印キーを何度も押すとすり抜けます)。また、frontCheckに意図していない代入を行っているのかと思い、探してみましたがみつかりませんでした。
###閲覧して頂きありがとうございます
回答1件
あなたの回答
tips
プレビュー