2016-05-22 2 views
1

私は、ワールドスペースにはほとんど3Dオブジェクトを持たない3d Unityゲームを持っています。私はカメラスペースにレチクルを持っています。レチクルが各3Dオブジェクトを横切るとき、私はポインタとポインターの終了イベントを書きます。携帯電話が動かされると、レチクルは動くが、3dオブジェクトはワールドスペースにとどまる。レチクルがポインタとして機能していません。タッチイベントが働いていても、私はレチクルをポインタとして作ることができませんでした。私は物理的なレイキャストをカメラに追加しました。 私は何をしていますか?ポインタとしてのUnityレチクル

+0

現在のレイキャストコードを投稿してもよろしいですか? –

+0

メインカメラで物理レイアースを追加したため、ポインタの入力と終了のイベントトリガが追加されました。したがって私は間違っている場合、私に正しいコードを書いていない。 – user6160538

+0

Gotcha、統一バージョン? –

答えて

4

いいえ、UI以外のオブジェクトでUI.Selectableイベント(Selectable.OnPointerEnter)を使用しようとしています。

スクリーンスペースにレチクルの位置があると仮定すると、Cameraオブジェクトに付属のスクリプトからPhysics.Raycastを使用することを強くお勧めします。カメラインスタンスを参照するだけで済みます。

CameraPointer.cs:

using UnityEngine; 
using System.Collections; 

[RequireComponent(typeof(Camera))] 
public class CameraPointer : MonoBehaviour { 
    private GameObject hitObject = null; 
    private Vector3 reticlePosition = Vector3.zero; 
    private Camera camera; 

    void Awake() { 
     camera = GetComponent<Camera>(); 
    } 

    // Update is called once per frame 
    void Update() { 
     // TODO: Replace with reticle screen position 
     reticlePosition = Input.mousePosition; 

     // Raycast variables 
     Ray ray = camera.ScreenPointToRay(reticlePosition); 
     RaycastHit hit; 

     // Raycast 
     if (Physics.Raycast(ray, out hit)) { 
      if (hitObject != hit.transform.gameObject) { 
       if (hitObject != null) { 
        hitObject.SendMessage("OnReticleExit"); // Trigger "OnReticleExit" 
       } 
       hitObject = hit.transform.gameObject; 
       hitObject.SendMessage("OnReticleEnter"); // Trigger "OnReticleEnter" 
      } else { 
       hitObject.SendMessage("OnReticleHover"); // Trigger "OnReticleHover" 
      } 
     } else { 
      if (hitObject != null) { 
       hitObject.SendMessage("OnReticleExit"); // Trigger "OnReticleExit" 
      } 
      hitObject = null; 
     } 
    } 
} 

MyObject.cs:

を下図のように私たちは、カスタムレチクル入力/出/ホバーイベントをトリガする "hitObject" と組み合わせて、これを使用することができます
using UnityEngine; 
using System.Collections; 

public class MyObject : MonoBehaviour 
{ 
    // Custom reticle events 
    void OnReticleEnter() 
    { 
     Debug.Log("Entering over " + this.name); 
    } 
    void OnReticleExit() 
    { 
     Debug.Log("Exiting over "+this.name); 
    } 
    void OnReticleHover() 
    { 
     Debug.Log("Hovering over "+this.name); 
    } 
} 
関連する問題