前提・実現したいこと
4方向にしか動かない敵を作っているのですが、
Rayを使って壁に当たって一定の距離以下になったらY→X、X→Yに遷移するようにしたい。
発生している問題・エラーメッセージ
今のやり方だとどちらか片方の向きにしかRayが出ません。
該当のソースコード
C#
1[SerializeField] 2 private float Speed; 3 4 float x; 5 float y; 6 int i; 7 8 float X() 9 { 10 return Speed * Time.deltaTime; 11 } 12 float Y() 13 { 14 return Speed * Time.deltaTime; 15 } 16 17 // Use this for initialization 18 void Start () { 19 i = Random.Range(0, 4); 20 } 21void Update () { 22 x = TargetPos[i].x - transform.position.x; 23 y = TargetPos[i].y - transform.position.y; 24 //Ray 25 Vector2 MyPos = transform.position; 26 Vector3 LivPos = new Vector3(0,Y(), 0); 27 28 int LayerMask=~(1 << 10); 29 int chk = 0;//Y移動してるとき 0 X移動してるとき 1 30 31 Ray2D Ray = new Ray2D(MyPos, LivPos); 32 RaycastHit2D Hit = Physics2D.Raycast(Ray.origin, Ray.direction, 5.0f,LayerMask); 33 34 gameObject.transform.Translate(LivPos); 35 36 //Move 37 //壁回避 38 if (Hit.collider) 39 { 40 if (Hit.distance < 0.6f) 41 { 42 if (chk == 0) 43 { 44 if (x > 0) 45 { 46 LivPos = new Vector3(X(), 0, 0); 47 gameObject.transform.Translate(LivPos); 48 chk = 1; 49 } 50 else if (x < 0) 51 { 52 LivPos = new Vector3(-X(), 0, 0); 53 gameObject.transform.Translate(LivPos); 54 chk = 1; 55 } 56 } 57 else if (chk == 1) 58 { 59 if (y > 0) 60 { 61 LivPos = new Vector3(0, Y(), 0); 62 gameObject.transform.Translate(LivPos); 63 chk = 0; 64 } 65 else if(y<0) 66 { 67 LivPos = new Vector3(0,-Y(), 0); 68 gameObject.transform.Translate(LivPos); 69 chk = 0; 70 } 71 } 72 } 73 }
補足情報(FW/ツールのバージョンなど)
Unity 2018.1.1f1
Visual Studio Community 2017 15.7.1
すいません書き忘れていました。追記させていただきました
どちらか片方にしか出ないというのはRayが上か右にしか出ないということです。また壁に当たっても最初に出ている方向にしか出ません。