Unity 求坐标点在扇形区域内的投影

视频效果:

代码:

cs 复制代码
    /// <summary>
    /// 投影在扇形区域内的点
    /// </summary>
    /// <param name="targetPos">目标点</param>
    /// <param name="fanRadius">扇形半径</param>
    /// <param name="fanAngle">扇形圆心角</param>
    /// <param name="fanShape">扇形(扇形圆心)</param>
    /// <returns></returns>
    private Vector3 GetPosToFanProjection(Vector3 targetPos,float fanRadius,float fanAngle,Transform fanShape)
    {
        Vector3 leftdir = Quaternion.AngleAxis(-fanAngle/2, fanShape.transform.up)*fanShape.transform.forward;
        Vector3 rightdir = Quaternion.AngleAxis(fanAngle/2, fanShape.transform.up)*fanShape.transform.forward;
 
        Vector3 leftP = fanShape.transform.position + leftdir * fanRadius;
        Vector3 rightP = fanShape.transform.position + rightdir * fanRadius;
        
        float dis = (targetPos - fanShape.transform.position).magnitude;
        float angle = Vector3.SignedAngle(fanShape.transform.forward, targetPos - fanShape.transform.position,fanShape.transform.up);
        if (dis > fanRadius)
        {
            if (Mathf.Abs(angle) < 0.5f * fanAngle)
            {
                return fanShape.transform.position + (targetPos - fanShape.transform.position).normalized * this.fanRadius;
            }
            else
            {
                //右顶点
                if (angle > 0)
                {
                    return rightP;
                }
                //左顶点
                else
                {
                    return leftP;
                }
            }
        }
        else
        {
            if (Mathf.Abs(angle) < 0.5f * fanAngle)
            {
                return targetPos;
            }
            else
            {
                //右边界
                if (angle > 0)
                {
                    return fanShape.transform.position + rightdir * dis;
                }
                //左边界
                else
                {
                    return fanShape.transform.position + leftdir * dis;
                }
            }
        }
    }
相关推荐
阿松爱学习1 小时前
【Unity开发】Rigidbody中Body Type属性
unity·游戏引擎·unity开发
winlife_1 小时前
AI 怎么验证 Unity PlayMode 行为:截图 + 输入模拟的完整闭环
人工智能·unity·游戏引擎·ai编程·claude·playmode
CandyU24 小时前
Cursor AI Unity
unity
LF男男4 小时前
Bullect.cs(bullet)——子弹基类
unity
mxwin21 小时前
unity shader中 ddx ddy是什么
unity·游戏引擎·shader
郝学胜-神的一滴1 天前
[简化版 GAMES 101] 计算机图形学 08:三角形光栅化上
c++·unity·游戏引擎·godot·图形渲染·opengl·unreal
nnsix1 天前
Unity ILRuntime 笔记
unity·游戏引擎
nnsix1 天前
Unity API 兼容的 .NET Standard 2.1 和 .NET Framework 区别
unity·游戏引擎·.net
mxwin1 天前
Unity Shader 制作半透明物体 使用多Pass提前写入深度的方式 避免穿模
unity·游戏引擎
nnsix1 天前
Unity HybridCLR 笔记
笔记·unity·游戏引擎