最近项目中需要判断一个点是否在一个物体内,项目的物体为圆盘,所以解决方案有:
1.利用碰撞检测OnTriggerEnter、OnTriggerExit(若是速度过快检测会发生偏差)
2.思路:计算XY平面上投影的距离与圆盘R比较;计算YZ平面点的position.z与圆盘高度。圆盘会倾斜,需转换以圆盘面为投影面。
public class GameObjIntoGameObj : MonoBehaviour {
public GameObject target;
public GameObject obj;
private float objXoYDis= 0.5f;
private float objYoZHeight = 0.02f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0))
{
Debug.Log(IsIntoObj());
}
}
public bool IsIntoObj()
{
//把target的世界坐标转为相对于obj为新坐标系的坐标
Vector3 localPos = obj.transform.InverseTransformVector(target.transform.position);
Vector3 projectionXoY = new Vector3(localPos.x, localPos.y, 0);//XoY平面的投影
float resultXoYDis = Vector3.Distance(projectionXoY, Vector3.zero);//XoY平面obj和target的距离
if (resultXoYDis > objXoYDis)
return false;
if (localPos.z > objYoZHeight)//YoZ平面的高度
return false;
return true;
}
}
效果:
若是判断是否在球体或者不规则物体中,则是另一种思路。
欢迎给小白留言分享思路。