unity 圆形障碍,避障算法,动态避障,静态避障,屎壳郎推屎回娘家

Unity3d圆形障碍避障算法,动态避障,静态避障

屎壳郎推屎回娘家
废话不多上图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1:根据,屎和娘家的位置做计算,不管屎在哪里,获取朝向娘家,屎后面一定距离的位置

//获取位置
    Vector3 GetTraget(Vector3 start, Vector3 end) //end 家
    {
        Vector3 normal = (end - start).normalized;
        float percent = -4; //距离屎保留一点距离
        return normal * (percent) + start;
    }

2:屎壳郎需要跑到屎后面,推屎回娘家,需要进行避障算法

//避障算法
    private List<Vector3> pathPoints = new List<Vector3>();
    private void FindPath(Vector3 palyerPos, Vector3 targetPos, Vector3 obstaclePos, float aroundRadius)
    {
        pathPoints.Add(palyerPos);
        Vector3 pathDir = targetPos - palyerPos;
        Vector3 pointDir = obstaclePos - palyerPos;
        float crossValue = Vector3.Cross(pathDir, pointDir).y;
        float angleDelta = 45;
        if (crossValue < 0)
        {
            angleDelta = -45;
        }
        Vector3 obstacleToPlayer = (palyerPos - obstaclePos).normalized;
        Vector3 obstacleToTarget = (targetPos - obstaclePos).normalized;
        float threshold = Vector3.Dot(obstacleToPlayer, obstacleToTarget);
        bool caculateFinished = false;
        int i = 1;
        do
        {   
            Quaternion randRotate = Quaternion.Euler(0, angleDelta * i, 0);
            Vector3 extendDir = (randRotate * obstacleToPlayer).normalized;
            Vector3 tempPos;
            if (Vector3.Dot(extendDir, obstacleToPlayer) <= threshold)
            {
                caculateFinished = true;
                tempPos = targetPos;
            }
            else
            {
                tempPos = obstaclePos + extendDir * aroundRadius;
            }
            pathPoints.Add(tempPos);
            ++i;
        } while (!caculateFinished);

        pathPoints.Add(targetPos);
    }

3:在推屎过程中出现不可抗拒因素,即时使用Update计算获取新的推屎路线,

哈哈啊哈~~~~~


http://www.niftyadmin.cn/n/5121231.html

相关文章

java _JDBC 开发

目录 一.封装JDBCUtiles 二.事务 三.批处理 四.数据库连接池 C3P0 Druidf(德鲁伊&#xff09;阿里 五.Apache-DBUtiles 六.Apache-DBUtils 七.DAO 和增删改查 通用方法 - BasicDao 一.封装JDBCUtiles 说明&#xff1a;在jdbc操作中&#xff0c;获取连接和释放资源&#…

Aspera和Aspera_cli软件的安装和使用

Aspera和Aspera_cli软件的安装和使用 Aspera和Aspera_cli软件NCBI数据库和EBI-ENA数据库的下载用户和地址信息1. ASpera 4.X.X1.1 ASpera 4.X.X安装1.2 ASpera 4.X.X密钥文件1.3 ASpera 4.X.X简单使用 2. ASpera 3.X.X2.1 ASpera 3.X.X安装2.2 ASpera 3.X.X密钥文件2.3 ASpera …

【智能大数据分析】实验1 MapReduce实验:单词计数

【智能大数据分析】实验1 MapReduce实验&#xff1a;单词计数 文章目录 【智能大数据分析】实验1 MapReduce实验&#xff1a;单词计数一、实验目的二、实验要求三、实验原理1 MapReduce编程2 Java API解析 四、实验步骤1 启动Hadoop2 验证HDFS上没有wordcount的文件夹3 上传数据…

激光检测/宽度检测/直线拟合

本文章介绍一种方法用于激光检测过程中的宽度检测&#xff0c;并对检测结果进行直线拟合

通过js来实现用身份证号来判断性别和出生年月

html: <input type"text" id"shenfenzhenghao" oninput"hao()" placeholder"证件号"><input type"text" id"xingbie" disabled"disabled" placeholder"性别"><input type&qu…

vue3+vite+ts项目使用jQuery

1、安装jQuery npm install --save jquery 2、安装声明文件 npm install --save types/jquery 3、在需要的文件中引入 import $ from jquery

设计模式(14)备忘录模式

一、介绍&#xff1a; 1、定义&#xff1a;是一种行为设计模式&#xff0c;它允许将对象的内部状态保存在一个备忘录对象中&#xff0c;并在需要时恢复对象的状态&#xff0c;而不破坏对象的封装性。 2、使用场景&#xff1a; &#xff08;1&#xff09;当需要保存和恢复对象…