判断一个点是否在一个物体中

最近项目中需要判断一个点是否在一个物体内,项目的物体为圆盘,所以解决方案有:
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;
    }
}

效果:
在这里插入图片描述
若是判断是否在球体或者不规则物体中,则是另一种思路。
欢迎给小白留言分享思路。

路漫漫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值