• 游戏AI技术


    Unity3D人工智能编程精粹

    1、运动层、决策层、战略层。

      运动层、决策层包含的算法是针对单个角色的,战略层是针对小队乃至更大规模群体的。

      导航寻路是运行层的主要任务。

      决策层决定角色下一时间步该做什么。

      感知(Sense)-> 思考(Think)-> 行动(Act)。

    2、通过产生一定大小、方向的操控力,使角色以某种方工运动。Unity3d提供的开源库 UnitySteer 可以快捷地实现操控行为。

    3、如果游戏的决策系统不是很复杂,只要利用 FSM 就可以实现。在处理大规模的问题时,FSM很难复用、维护、调试。行为树层次清晰,易于模块化,简洁高效。

    4、每一个物体拥有 position、mass、velocity、orientation。以及 max_force、max_speed。

      这个物体位置的计算方法:

      1)确定每一帧的当前操作力(最大不超过max_force)。

      2)除以交通工具的质量mass,可以确定一个加速度。

      3)将这个加速度与原来的速度相加,得到新的速度(最大不超过max_speed)。

      4)根据速度和这一帧时间,计算出位置的变化 。

      5)与原来的位置相加,得到新位置。

        

    5、Vehicle类。一个物体可以受到多个操作力。,每个操作力有各自的weight。

      注意 steering_force 是一个向量:

            

      分别有以下类型的个体操作行为:

        

    6、AILocomotion 中速度的计算。注意 moveDistance是向量。

      

      通过 slerp 防止方向大幅抖动。  

      

    7、操作向量是预期速度与当前速度的差。

      

    8、1)SteeringForSeek。

      

      

    9、2)SteeringForFlee。与Seek相比,多了fearDistance,另外DesiredVelocity速度相反。

      

    10、3)SteeringForAttrive。以Target为中心,圆外径直冲向Target,圆内减速。

      注意:以下代码,应当对 desiredVelocity进行限速。

      

    11、4)SteeringForPersuit。目标不再是静态物体,而是会移动的物体。

      当距离很近时,直接冲向目标。当距离较远时,需要预测在哪个postion,可能追上Target。

      注意:不是追逐Target下一帧的位置,而是追逐预测的相遇点的位置。

      

    12、5)SteeringForEvade。预测目标将在哪个positon追上自己,然后给一个相反方向的力。

        注意:以下 lookaheadTime 代表的是最快可能追上的时间。

      

    13、6)SteeringForWander。

        随机瞎逛,一种通常的做法是,每隔几秒随机一个目标位置,让角色奔向这个位置。这种做法存在角色突然调头的问题,体验不是很好。

        

      

    14、7)SteeringForPath(路径跟随)。路点半径,当角色距离目标点多远时认为已经达到,从而继续向下一个路点前进。

      

    15、8)SteeringForAvoidance。只躲避最近的障碍物。

      

      avoidance_force = ahead - obstacle_center。

      注意:下面代码使用 Physics.Raycast 进行碰撞检测,并未使用 Half Ahead方法。

        

    16、群体行为。

      

    17、SteeringForSeparation.cs

      

    18、SteeringForAlighment。

      

    19、SteeringForCohesion。

      

  • 相关阅读:
    解决Redis之MISCONF Redis is configured to save RDB snapshots
    lnmp一键安装redis以及php组件
    多版本PHP使用composer
    composer设置成阿里云镜像
    Yaf 简介
    Ubuntu配置php7.2开机启动
    Ubuntu查看开机日志
    ssh生成公钥
    Ubuntu系统如何分区
    初始化一个yaf项目
  • 原文地址:https://www.cnblogs.com/tekkaman/p/9490896.html
Copyright © 2020-2023  润新知