前提・実現したいこと
上記画像の2点の空のオブジェクト"groundCheck_C"、“HeadCheck_C”の座標に接触したオブジェクトのタグを
チェックすることで、キャラクタ―の状態を設定したいと考えています。
例
"groundCheck_C"=Ladderタグ、“HeadCheck_C”=Ladderタグ ⇒ はしご使用状態
"groundCheck_C"=groundタグ、“HeadCheck_C”=Ladderタグ ⇒ はしご上昇準備
"groundCheck_C"=Ladderタグ、“HeadCheck_C”=empty ⇒ 上昇不可能
試したこと
参考書の地面を認識させるコードを参考に以下の様に記述しました。
c#
1 protected Transform groundCheck_L; 2 protected Transform groundCheck_C; 3 protected Transform groundCheck_R; 4 protected Transform HeadCheck_L; 5 protected Transform HeadCheck_C; 6 protected Transform HeadCheck_R; 7 //各判定用オブジェクトのポイントをスクリプトで使う為に変数に代える 8 groundCheck_L = transform.Find("Check_Point/GroundCheck_L"); 9 groundCheck_C = transform.Find("Check_Point/GroundCheck_C"); 10 groundCheck_R = transform.Find("Check_Point/GroundCheck_R"); 11 HeadCheck_L = transform.Find("Check_Point/HeadCheck_L"); 12 HeadCheck_C = transform.Find("Check_Point/HeadCheck_C"); 13 HeadCheck_R = transform.Find("Check_Point/HeadCheck_R"); 14 15 protected virtual void FixedUpdate() { 16 groundCheck_OnRoadObject = null; 17 groundCheck_OnMoveObject = null; 18 groundCheck_OnEnemyObject = null; 19 Check_OnLadderObject = null; 20 21 Collider2D[][] groundCheckCollider = new Collider2D[3][]; 22 groundCheckCollider[0] = Physics2D.OverlapPointAll(groundCheck_L.position); 23 groundCheckCollider[1] = Physics2D.OverlapPointAll(groundCheck_C.position); 24 groundCheckCollider[2] = Physics2D.OverlapPointAll(groundCheck_R.position); 25 foreach (Collider2D[] groundCheckList in groundCheckCollider) { 26 foreach (Collider2D groundCheck in groundCheckList) { 27 if (groundCheck != null) {//LCRのどれかが、道、物体、敵に接触している場合にgroundedと判断。 28 if (!groundCheck.isTrigger) 29 { 30 grounded = true;//grounded = 地面に立った状態にここで設定 31 air = false; 32 if (groundCheck.tag == "Road") {groundCheck_OnRoadObject = groundCheck.gameObject;} 33 else if (groundCheck.tag == "MoveObject") {groundCheck_OnMoveObject = groundCheck.gameObject;} 34 else if (groundCheck.tag == "Enemy") {groundCheck_OnEnemyObject = groundCheck.gameObject;} 35 } 36 } //if (groundCheckCollider[1] != null){ } 37 } 38 } 39 Collider2D[][] ladderCheckCollider = new Collider2D[2][]; 40 ladderCheckCollider[0] = Physics2D.OverlapPointAll(HeadCheck_C.position); 41 ladderCheckCollider[1] = Physics2D.OverlapPointAll(groundCheck_C.position); 42 foreach (Collider2D[] ladderCheckList in ladderCheckCollider) { 43 foreach (Collider2D ladderCheck in ladderCheckList) { 44 if (ladderCheck != null) 45 { 46 if (!ladderCheck.isTrigger) 47 { 48if (ladderCheck.tag == "Ladder") {Check_OnLadderObject = ladderCheck.gameObject; } 49 } 50 } 51 } 52 } 53 if (Check_OnLadderObject != null) 54 { 55 ladder = true; 56 }
発生している問題
Collider2D[][] ladderCheckCollider = new Collider2D[2][]; ladderCheckCollider[0] = Physics2D.OverlapPointAll(HeadCheck_C.position); ladderCheckCollider[1] = Physics2D.OverlapPointAll(groundCheck_C.position); foreach (Collider2D[] ladderCheckList in ladderCheckCollider) { foreach (Collider2D ladderCheck in ladderCheckList) { if (ladderCheck != null) { if (!ladderCheck.isTrigger) { if (ladderCheck.tag == "Ladder") {Check_OnLadderObject = ladderCheck.gameObject; } } } } } if (Check_OnLadderObject != null) { ladder = true; }
この部分のコードの内容は"groundCheck_C"、“HeadCheck_C”の座標に何らかのオブジェクトが接触すればladder = true;にするという大雑把な条件式の様です。
細かい条件の指定方法が分かりませんでした。
例えばこれを
・"groundCheck_C"のみオブジェクトに接触
・“HeadCheck_C”のみオブジェクトに接触
で指定する場合、条件式をどのように記述すればよいのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。