いいえ、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);
}
}
現在のレイキャストコードを投稿してもよろしいですか? –
メインカメラで物理レイアースを追加したため、ポインタの入力と終了のイベントトリガが追加されました。したがって私は間違っている場合、私に正しいコードを書いていない。 – user6160538
Gotcha、統一バージョン? –