質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2326閲覧

Rayが当たらなくなった時に処理したい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/06/18 14:10

###現状
3つのRayが出ているが一つが当たらなくなった時に全部消えてしまう
Debug.Logは0
if (Physics.Raycast(ray, out hit, distance) && Physics.Raycast(rayright, out hitr, distance) && Physics.Raycast(rayleft, out hitl, distance))
このコードの&&がダメだと思うがいい方法が思いつかない

実現したいこと

左のRayが当たらなくなった場合右に移動、右のRayが当たらなくなった場合左に移動してステージ上から落ちないようにしたい

該当コード

CPU

1private Rigidbody rb; 2 private float moveSpeed = 100f; 3 private float damage; 4 private bool dead; 5 public GameObject deadef; 6 public static float x; 7 8 // Start is called before the first frame update 9 void Start() 10 { 11 rb = GetComponent<Rigidbody>(); 12 dead = false; 13 } 14 15 // Update is called once per frame 16 void Update() 17 { 18 if (dead == false) 19 { 20 Vector3 Move = new Vector3(x, -9.8f, 1); 21 22 rb.AddForce(Move * moveSpeed); 23 24 25 if (rb.velocity.magnitude > 7 && gameObject.transform.localScale.x <= 10) 26 { 27 gameObject.transform.localScale += new Vector3(0.001f, 0.001f, 0.001f); 28 } 29 30 rb.mass = gameObject.transform.localScale.x; 31 32 } 33 else 34 { 35 return; 36 } 37 38 39 // 40 if (gameObject.transform.localScale.x < 3) 41 { 42 Dead(); 43 } 44 }

CPURay

1private void Start() 2 { 3 4 } 5 6 void Update() 7 { 8 transform.rotation = Quaternion.Euler(0, 0, 0); 9 10 RaycastHit hit; 11 Ray ray; 12 RaycastHit hitr; 13 Ray rayright; 14 RaycastHit hitl; 15 Ray rayleft; 16 17 int distance = 50; 18 19 ray = new Ray(transform.position, new Vector3(0,-0.15f,1)); 20 rayright = new Ray(transform.position, new Vector3(0.4f, -0.15f, 1)); 21 rayleft = new Ray(transform.position, new Vector3(-0.4f, -0.15f, 1)); 22 23 if (Physics.Raycast(ray, out hit, distance) && Physics.Raycast(rayright, out hitr, distance) && Physics.Raycast(rayleft, out hitl, distance)) 24 { 25 if (hit.collider != null && hitr.collider != null && hitl.collider != null) 26 { 27 CPU.x = 0; 28 } 29 else if (hit.collider != null && hitr.collider != null) 30 { 31 CPU.x = 1; 32 } 33 else if(hit.collider != null && hitl.collider != null) 34 { 35 CPU.x = -1; 36 } 37 38 Debug.Log(CPU.x); 39 40 Debug.DrawLine(ray.origin, hit.point, Color.red); 41 Debug.DrawLine(rayright.origin, hitr.point, Color.red); 42 Debug.DrawLine(rayleft.origin, hitl.point, Color.red); 43 } 44 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

if (Physics.Raycast(ray, out hit, distance)) { } if(Physics.Raycast(rayright, out hitr, distance)) { } if(Physics.Raycast(rayleft, out hitl, distance)) { } if (hit.collider != null&& hitr.collider != null&& hitl.collider != null) { CPU.x = 0; Debug.Log(CPU.x); } else if (hit.collider != null && hitr.collider != null) { CPU.x = 1; Debug.Log(CPU.x); } else if (hit.collider != null && hitl.collider != null) { CPU.x = -1; Debug.Log(CPU.x); }

これで解決しましたがまだ不安定です

投稿2020/06/19 06:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問