gpt4 book ai didi

c# - Unity十字线作为指针

转载 作者:行者123 更新时间:2023-11-30 20:36:01 27 4
gpt4 key购买 nike

我有一个 3d Unity 游戏,世界空间中的 3d 对象很少。我在相机空间中有一个十字线。当标线穿过每个 3d 对象时,我编写了一个指针 -enter 和 pointer-exit 事件。当手机移动时,十字线移动,但 3d 对象停留在世界空间中。十字线不用作指针。尽管触摸事件有效,但我无法将十字线作为指针。我用相机添加了物理光线转换。我犯了什么错误?

最佳答案

好的,所以您正在尝试使用 UI.Selectable非 UI 对象上的事件 (Selectable.OnPointerEnter)。

假设您在屏幕空间中有十字线位置,我强烈建议使用 Physics.Raycast来自附加到 Camera 对象的脚本,尽管它可以简单地引用相机实例。我们可以将其与“hitObject”结合使用来触发自定义标线进入/退出/悬停事件,如下所示:

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:

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);
}
}

关于c# - Unity十字线作为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37377701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com