我想检测用户点击某个对象的时间,以及当用户手指仍在屏幕上时,检查手指结束的对象。 在点击事件上它会像这样生气:
void OnMouseEnter()
{
// this is where the finger hovered on
}
void OnMouseDown()
{
// this is the first touch
}
void OnMouseUp()
{
// this is where the finger was released from the screen
}
所以,基本上我喜欢OnMouseEnter()
谢谢
答案 0 :(得分:0)
您可以使用 Camera.main.ScreenPointToRay()将触摸操作位置投影到光线中,然后使用 Raycast 查看它是否会碰到对象。例如:
void Update () {
for (int i = 0; i < Input.touchCount; ++i) {
if (Input.GetTouch (i).phase == TouchPhase.Began) {
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay (Input.GetTouch(i).position);
if (Physics.Raycast (ray, out hit, 1000f)) {
Debug.Log("Touch enter on " + hit.collider.name);
}
}
}
}
如果您不考虑多点触控,您还可以使用鼠标输入操作。触摸操作将在为移动平台构建时转换为鼠标操作。
void Update () {
if (Input.GetMouseButtonDown (0)) {
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit, 1000f)) {
Debug.Log("Touch enter on " + hit.collider.name);
}
}
}
但是,我想最终即使你想使用第一个版本(这样它可以处理多点触控),你也会想要实现第二个版本。只是因为您可以在编辑器上使用鼠标模拟触摸。
void Update () {
#if UNITY_EDITOR
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
#else
for (int i = 0; i < Input.touchCount; ++i) {
if (Input.GetTouch (i).phase == TouchPhase.Began) {
Ray ray = Camera.main.ScreenPointToRay (Input.GetTouch(i).position);
#endif
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 1000f)) {
Debug.Log("Touch enter on " + hit.collider.name);
}
#if !UNITY_EDITOR
}
#endif
}
}
虽然有点乱,但这样的事情应该可以解决问题。
这些示例适用于您的OnMouseEnter()案例。使用相同的想法,您可以实现其他响应(用于悬停和发布/退出)。