Unity 3Dでゲームを開発中です。
ある操作が終了した時にシーン1→シーン2に遷延させるために、
操作終了
→
canvas上にimageをSetActiveで出現させ、このimage上にあるボタンを押下するとシーン2に遷移、
というようにしております。
canvasのレンダリングはScreen Space - Overlayとしております。
このボタン押下にてシーン遷移、は無事うまく機能しているのですが、
このボタン押下の際に、奥に表示されているオブジェクトにrayの当たり判定を起こしてしまい困っています。
ネット渉猟を参照して、以下のスクリプトをこのボタンにアタッチし、ボタンのOnClick()でNextScene()を呼び出しているのですが、やはり奥に表示されるオブジェクトに当たり判定してしまいます。。
スクリプトがおかしいでしょうか。
はたまた、canvasやimageのインスペクターウィンドウのボックスの変更のみで実現できますでしょうか。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.EventSystems; 6using UnityEngine.SceneManagement; 7 8public class OKButton : MonoBehaviour 9{ 10 [SerializeField] 11 private GameObject completeImage; 12 //CompleteImageはシーン遷移するボタン(OKButton)を載せている画像になります。 13 14 15 // Start is called before the first frame update 16 void Start() 17 { 18 19 } 20 21 // Update is called once per frame 22 void Update() 23 { 24 25 if (EventSystem.current.currentSelectedGameObject != null) 26 { 27 return; 28 } 29 30 } 31 32 public void NextScene() 33 { 34 completeImage.SetActive(false); 35 SceneManager.LoadScene("Scene2"); 36 //completeImageを消失させ、次のシーンを呼びだす 37 } 38} 39 40リスト
奥にあるオブジェクトとは何ですか?
UIのimageからのonClickという事はEventSystem、CanvasによるGraphicRaycasterを使っての事だと思われます。
奥にあるオブジェクトにRayを飛ばして、という事はPhysicsRaycasterによるCollider判定という事でしょうか?
その場合、見ている元のカメラも違いますし、判定している処理も違うのでそのような結果になります。
ご質問ありがとうございます。
仰る通り、例えますと「たこ焼き板というオブジェクト上に、マウスのクリックを検知してたこやきをinstantiateしていく」ゲームのようなものです。
奥にあるオブジェクトとは、UIのimageが(半透明)表示された奥にレンダリングされているたこ焼き板オブジェクトに、physicsRaycasterがcollider判定してしまい、UI上のボタンをクリックしたときにたこ焼きがたこ焼き板上に生成されてしまっております。。
解決したようであれなんですけど、こちらも勘違いがあったようで
ray関係の話、
自作でRaycastHit、Physics.Raycast(~
とかOnMouseDown(~
みたいな事(eventSystemの機能を利用しない実装)をしていませんか?
eventSystemにmaincamera用のphysicsRaycasterというのがありまして、eventsystemからのインターフェイス、IPointerDownHandlerなどを利用すればこの問題はそもそも起きなかった、という事をお伝えします。
ご指導ありがとうございます!もう少しeventSystemを勉強します!
回答1件
あなたの回答
tips
プレビュー