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;
                }
            }
        }
    }
相关推荐
SmalBox13 小时前
【光照】[漫反射diffuse]以UnityURP为例
unity·渲染
SmalBox1 天前
【光照】[自发光Emission]以UnityURP为例
unity·渲染
SmalBox3 天前
【光照】Unity中的[经验模型]
unity·渲染
萘柰奈3 天前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
Yasin Chen3 天前
Unity UI坐标说明
ui·unity
应用市场3 天前
无人机姿态控制系统详解与实现
游戏引擎·cocos2d
陈言必行3 天前
Unity 性能优化 之 编辑器创建资源优化( 工作流 | 场景 | 预制体)
unity·编辑器·游戏引擎
1uther3 天前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎
死也不注释3 天前
【Unity UGUI 交互组件——Slider(7)】
unity·游戏引擎·交互
程序猿多布3 天前
XLua教程之热补丁技术
unity·c#·lua·xlua