2016-06-13 3 views
0

입니다. 그래서 나는 레이 캐스팅에 익숙하지 않습니다. 지금까지 사용한 적이 처음입니다. 기본적으로이 프로그램은 터치 스크린 용이며 UI 요소는 옵션이 아니기 때문에 마우스 클릭을 모방하는 데 사용하려고합니다. 이 코드는 세계의 3D 게임 객체에 첨부되어 있으며, 터치 스크린을 탭하면 다른 장면을 트리거하고로드해야합니다. 그러나 코드는 언제 어디서나 UI 요소를 무시해도 발사되는 것처럼 보입니다. 대부분의 사람들은 타격을주지 않는 레이 캐스트에 문제가있는 것 같지만 반대 문제가 있습니다. 어떤 도움을 주시면 감사하겠습니다.레이 캐스팅은 항상

void Update(){ 
foreach (Touch touch in Input.touches) { 
     if (touch.phase == TouchPhase.Began) { 
      Ray ray = Camera.main.ScreenPointToRay (touch.position); 
      RaycastHit hit; 
      if (Physics.Raycast (ray, out hit)) { 
       if (hit.collider.gameObject) 
       SceneManager.LoadScene (buttonIdentifier); 
      } 
     } 
    } 

}

+0

귀하의 질문에 귀하의 문제가 설명되어 있지 않습니다. 스프라이트에 대한 클릭을 감지하려고합니까? 캔버스 이미지에? 3D 메쉬에? 너는 싫어하는 일이 뭐니? – Programmer

+0

나는 그것을 편집했고 잘하면 그것을 분명히했다. – MechaScoots

+0

그리고 대답을 제공했습니다. 작동 했나요? – Programmer

답변

1

에도 최우선 UI 요소 I는 탭없이.

이 문제와 문제의 나머지에서 모두 레이 캐스트를 사용 하지에 의해 해결 될 수있다. 단순히 IPointerClickHandler을 구현하고 OnPointerClick 기능을 덮어 씁니다. 그런 다음 PhysicsRaycaster을 카메라에 부착하십시오.

PhysicsRaycaster을 포함하여 아래의 코드는 모두이 작업을 수행합니다. 클릭을 감지하고자하는 3D 오브젝트에 스크립트를 첨부하기 만하면됩니다.

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
using UnityEngine.EventSystems; 
using UnityEngine.SceneManagement; 

public class Clicker : MonoBehaviour, IPointerClickHandler 
{ 

    void Start() 
    { 
     Camera.main.gameObject.AddComponent<PhysicsRaycaster>(); 
    } 

    public void OnPointerClick(PointerEventData eventData) 
    { 

     Debug.Log("Clicked!"); 
     SceneManager.LoadScene(buttonIdentifier); 
    } 
}