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;
                }
            }
        }
    }
相关推荐
winlife_35 分钟前
Funplay Unity MCP 与 Unity AI Assistant 详细对比:开源 MCP 工具集 vs 官方全栈 AI 产品
人工智能·unity·开源·ai编程·claude·mcp
御水流红叶1 小时前
Android-Unity游戏逆向思路
android·游戏·unity
ellis19703 小时前
Unity图集Atlas
unity
想不明白的过度思考者3 小时前
Unity全局事件中心与新版输入架构实现练习——上帝模式与英雄模式的输入系统映射切换
java·unity·架构
GLDbalala16 小时前
Unity基于自定义管线实现风格化水
unity·游戏引擎
WMX101218 小时前
Unity-登录界面UI制作
ui·unity·游戏引擎
Kurisu57520 小时前
深海迷航2修改器 2026.5.16最新破解版加修改器免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
游戏·游戏引擎·游戏程序·修改器·关卡设计
吾日吾身三摆烂1 天前
Unity协程(Coroutine)底层原理全解析
unity·游戏引擎
LF男男1 天前
StarBullect.cs
unity
UWA1 天前
Unity小游戏优化简谱 | 吃透底层逻辑,告别掉帧与流失
unity·性能优化·游戏引擎·小游戏开发