在指定条件下进行鼠标替换;
当要求在鼠标覆盖到游戏对象上时才会更改鼠标的图标,但是此时该物体上面挂载有多个collider,比如,一个游戏对象上挂载有一个charactercontroller,还有一个sphereCollider ,sphereCollider是触发器用来检测外来对象的进入,所以他的半径比较大,但是在使用OnMouseEnter()方法进行鼠标覆盖检测时,先被检测到的却是这个SphereCollider,如此就妨碍了鼠标图标的替换。我们可以想,在鼠标移动检测时将在该方法中将sphereCollider禁用掉,如果在鼠标检测时禁用某些collider又会使得,如果此时出现了其他对象进入触发圈那么就检测不到了,所以这种方法不可靠。可靠地方法是在OnMouseOver()中用射线检测判断检测到的collider是否是属于charactercontroller,如果属于则将鼠标图标替换即可,因为该函数是每帧执行的
下面附上代码:
using UnityEngine;
using System.Collections;
public class PhysicsRaycastHit : MonoBehaviour {
public Texture2D cursor;
public Texture2D cursor1;
public bool isChange = false;
public void OnMouseOver()
{
print("zhixing");
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit[] hit = Physics.RaycastAll(ray, 500f);
foreach (RaycastHit item in hit)
{
if (isChange==false&& item.collider == transform.GetComponent<CharacterController>())
{
Cursor.SetCursor(cursor, Vector2.zero, CursorMode.Auto);
print("成功");
isChange = true;
}
}
}
public void OnMouseExit()
{
print("退出");
Cursor.SetCursor(cursor1, Vector2.zero, CursorMode.Auto);
isChange = false;
}
}