unity2dでPlayerにRaycastが当たっていないときにfalse、当たっているときはtrueをスクリプトsurpriseに渡すプログラムを書こうとしたのですがうまくいかなかっため(Debug.Logすら出ない)、unity3dで簡易的なものをつくってみたところ問題なく渡せたので何がいけなかったのかがわからなくて困っています。お手数をおかけしますがご教示いただけますでしょうか。
---確認したこと---
GameObject.Find("")の名前が間違っていないかどうか
→Inspectorからコピペして貼ったので間違うことはないはず
if (hit2D.collider.tag == "Player" && hit2D.distance < 10f)が通らないのでは
→Debug.Logで確認しましたが問題なかったです
found_Flagですべての参照を検索
→bool bikkuri = found.found_Flag;がでてきたので問題ないはず
enemy_MoveのDiscovery()がRaycastの描画でUpdateの上から3行目のところで呼び出しています
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class enemy_Move : MonoBehaviour 6{ 7 public GameObject target; 8 9 ContactFilter2D right_hit; 10 ContactFilter2D left_hit; 11 12 float x_Dis; 13 14 Rigidbody2D rb2d; 15 16 private bool minus_Sp; 17 18 private bool not_Discovery; 19 20 public bool found_Flag;//渡したいbool値 21 22 private bool first_Flag; 23 24 [Header("移動速度")] float enemy_Speed = 1f; 25 26 public float returnTime = 5f; 27 28 public float limit_Time = 5; 29 30 void Start() 31 { 32 first_Flag = false; 33 not_Discovery = true; 34 35 right_hit.useNormalAngle = true; 36 right_hit.minNormalAngle = 0; 37 right_hit.maxNormalAngle = 40; 38 39 left_hit.useNormalAngle = true; 40 left_hit.minNormalAngle = 140; 41 left_hit.maxNormalAngle = 180; 42 43 rb2d = GetComponent<Rigidbody2D>(); 44 rb2d.constraints = RigidbodyConstraints2D.FreezeRotation; 45 46 rb2d.mass = 0.5f; 47 48 found_Flag = false; 49 50 this.target = GameObject.Find("player"); 51 } 52 53 void Update() 54 { 55 56 bool wall_left = GetComponent<Rigidbody2D>().IsTouching(right_hit); 57 bool wall_right = GetComponent<Rigidbody2D>().IsTouching(left_hit); 58 59 Discovery(); 60 61 rb2d.velocity = new Vector2(minus_Sp == true ? -enemy_Speed : enemy_Speed, 0); 62 63 x_Dis = Mathf.Abs(this.gameObject.transform.position.x - target.transform.position.x); 64 65 if (wall_left) 66 { 67 68 minus_Sp = false; 69 returnTime = 0f; 70 EnemyRot(0); 71 72 } 73 74 if (wall_right) 75 { 76 77 minus_Sp = true; 78 returnTime = 0f; 79 EnemyRot(-1); 80 81 82 } 83 84 returnTime += Time.deltaTime; 85 86 if (not_Discovery && returnTime>=limit_Time) 87 { 88 returnTime = 0; 89 90 if (transform.localEulerAngles.y==180) 91 { 92 Trun_R(); 93 return; 94 } 95 if (transform.localEulerAngles.y==0) 96 { 97 Trun_L(); 98 return; 99 } 100 } 101 } 102 103 void EnemyRot(float minus) 104 { 105 Quaternion enemy_rot = transform.rotation; 106 transform.rotation = Quaternion.Euler(enemy_rot.x, 180 * minus, enemy_rot.z); 107 } 108 109 void Discovery() //Player発見時の処理 110 { 111 112 Ray2D ray2D = new Ray2D(transform.position, transform.right); 113 RaycastHit2D hit2D = Physics2D.Raycast(ray2D.origin, ray2D.direction); 114 Debug.DrawRay(ray2D.origin, ray2D.direction, Color.red); 115 116 117 if (hit2D.collider.tag == "Player" && hit2D.distance < 10f) 118 { 119 not_Discovery = false; 120 121 float step = enemy_Speed * Time.deltaTime; 122 found_Flag = true; 123 124 if (x_Dis > 0) 125 { 126 Vector2 pos = this.target.transform.position; 127 transform.position = Vector2.MoveTowards(transform.position, pos, step); 128 } 129 } 130 else 131 { 132 found_Flag = false; 133 not_Discovery = true; 134 } 135 } 136 137 138 void Trun_R() 139 { 140 Quaternion enemy_rot = transform.rotation; 141 transform.rotation = Quaternion.Euler(enemy_rot.x, 0, enemy_rot.z); 142 143 minus_Sp = false; 144 } 145 146 void Trun_L() 147 { 148 if (first_Flag) 149 { 150 Quaternion enemy_rot = transform.rotation; 151 transform.rotation = Quaternion.Euler(enemy_rot.x, -180, enemy_rot.z); 152 153 minus_Sp = true; 154 } 155 first_Flag = true; 156 157 } 158} 159
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class surprise : MonoBehaviour 6{ 7 GameObject enemy; 8 enemy_Move found; 9 10 void Start() 11 { 12 enemy = GameObject.Find("enemy01"); 13 found = enemy.GetComponent<enemy_Move>(); 14 gameObject.SetActive(false); 15 16 } 17 18 void Update() 19 { 20 bool bikkuri = found.found_Flag; 21 Debug.Log(bikkuri); 22 23 if (bikkuri) 24 { 25 gameObject.SetActive(true); 26 } 27 } 28 29}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/19 13:41