在指定條件下進行鼠標替換;
當要求在鼠標覆蓋到遊戲對象上時纔會更改鼠標的圖標,但是此時該物體上面掛載有多個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;
}
}