您可以使用您發現的方法,用光線投射你將得到水龍頭的確切位置。然後,您必須將球體的中心點和水龍頭位置轉換爲屏幕空間座標。然後你可以得到這些向量之間的差異,以獲得從中心的方向和距離。
PS:圈子有角落嗎?
你需要有一個遊戲對象,其中有一個碰撞對象被設置爲「是觸發器」。幷包含以下代碼的腳本。
void OnMouseDown()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//hits for sure, because we are in the click event
Physics.Raycast(ray, out hit);
Vector3 hitOnScreen = Camera.main.WorldToScreenPoint(hit.point);
Vector3 centerOnScreen = Camera.main.WorldToScreenPoint(transform.position);
Vector3 offset = hitOnScreen - centerOnScreen;
if(offset.x > 0 && offset.y > 0)
{
Debug.Log("upper right");
}else if(offset.x < 0 && offset.y > 0)
{
Debug.Log("upper left");
}else if(offset.x > 0 && offset.y < 0)
{
Debug.Log("lower right");
} else //if(offset.x < 0 && offset.y < 0)
{
Debug.Log("lower left");
}
}
對於到中心的距離它變得越來越複雜。 我們必須得到一個垂直於從相機到中心的矢量,並將其縮放到普通尺寸。如果我們將其添加到中心並將其轉換爲屏幕空間,那麼我們將在球體表面上獲得最大量的點。
Vector3 perpendicular = Vector3.Cross(transform.position - Camera.main.transform.position, Vector3.one);
Vector3 maxDistToCenter = transform.position + (perpendicular.normalized * (transform.lossyScale.x * 0.5f));
Vector3 maxDistToCenterOnScreen = Camera.main.WorldToScreenPoint(maxDistToCenter);
float maxDist = (maxDistToCenterOnScreen - centerOnScreen).magnitude;
float dist = offset.magnitude;
if (dist < maxDist * 0.5f) // 50% of the way not the area
{
Debug.Log("inner 50%");
}
else
{
Debug.Log("outer 50%");
}
結合兩者授予您評估與最大距離相比,球體中任意點與中心的角度和距離的能力。
如果你只是想強制點擊點,你只需要一個ridgit身體和raycasting。這oficial Unity tutorial將解釋它。
也許你必須結合這兩個答案,但我認爲Unity教程足以滿足你的需求。PS:請提問你想達到的最終目標,而不僅僅是你認爲完成工作所需的一步。
代碼會對我很有幫助,因爲我對團結不太好,所以它會幫助我快速學習 – Yawar
@Yawar添加代碼。如果您需要更多解釋,請告訴我。 – AntiHeadshot
@Yawar我添加了一個官方統一教程鏈接,你可能會覺得有用。 – AntiHeadshot