Unity之简单的机器人AI状态改变

最近在玩天涯明月刀,还蛮好玩,以前都不爱玩游戏,当然啦我现在升到38级了搁着也没玩了,不过曲无忆看外形真没有御姐的范倒像个萌妹子,可是慕情偏是个御姐的外形萌妹子的心啊啊啊

这两天看到知乎有有关于面试的问题,然后看到有关智能AI的,就想到天涯明月刀里做任务时的打怪,怪老是一会走啊走一会干嘛干嘛的,做虚拟的我还真没接触过咧

那就来看看呗,反正不掉肉不长肉的

这个是只是状态的改变,如果检测到周围有敌人或者啥的然后打啊打杀啊杀啊后面再加吧!

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class Robot : MonoBehaviour
 5 {
 6     /// <summary>
 7     /// 状态
 8     /// </summary>
 9     public enum Robot_Do_type
10     {
11         None,
12         Robot_idle,
13         Robot_run,
14         Robot_pause,
15         Robot_walk
16     }
17
18     //状态
19     private Robot_Do_type robotState;
20     private float robotStopThinkTime;
21     public float robotThinkingTime = 5f;
22
23     public void Start()
24     {
25         robotState = Robot_Do_type.Robot_idle;
26         StartCoroutine(RobotAI());
27     }
28
29     IEnumerator RobotAI()
30     {
31         while (enabled)
32         {
33             if (Time.time - robotStopThinkTime >= robotThinkingTime)
34             {
35                 robotStopThinkTime = Time.time;
36                 int ran = Random.Range(0, 4);//随机分配状态
37                 if (ran == 0)
38                 {
39                     robotState = Robot_Do_type.Robot_idle;
40                 }
41                 else if (ran == 1)
42                 {
43                     robotState = Robot_Do_type.Robot_walk;
44                 }
45                 else if (ran == 2)
46                 {
47                     robotState = Robot_Do_type.Robot_pause;
48                 }
49                 else if (ran == 3)
50                 {
51                     robotState = Robot_Do_type.Robot_run;
52                     Quaternion q = Quaternion.Euler(0, Random.Range(1, 5) * 90, 0);
53                     transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * 100f);
54                 }
55                 else
56                 {
57                     robotState = Robot_Do_type.None;
58                 }
59                 Execute();
60             }
61             yield return null;
62         }
63         yield return null;
64     }
65
66     /// <summary>
67     /// 根据机器状态来执行相对应的操作
68     /// </summary>
69     public void Execute()
70     {
71         switch (robotState)
72         {
73             case Robot_Do_type.Robot_idle:
74                 Debug.Log("idle idle idle idle idle idle idle idle idle idle idle");
75                 break;
76             case Robot_Do_type.Robot_pause:
77                 Debug.Log("pause pause pause pause pause pause pause pause pause pause");
78                 break;
79             case Robot_Do_type.Robot_run:
80                 Debug.Log("run run run run run run run run run run run run run run run");
81                 break;
82             case Robot_Do_type.Robot_walk:
83                 Debug.Log("walk walk walk walk walk walk walk walk walk walk walk walk");
84                 break;
85             case Robot_Do_type.None:
86                 Debug.Log("None None None None None None None None None None None None");
87                 break;
88         }
89     }
90 }

这个就是打印出来的样子,那如果把Debug.Log给替换下成你所需要的操作就O了

-------------------------------------------------------------------------

个人笔记--

时间: 2024-10-10 20:47:31

Unity之简单的机器人AI状态改变的相关文章

Unity之机器人AI

接着上篇简单机器人AI的那个,下午搜了下相关的看到“Unity3D研究院之游戏开发中的人工智能AI(三十八)”,便仔细尝试按照他的思路着写了并测试了,效果杠杠的 我就贴自已写的一遍的代码了,作为一个小小小笔记吧!!! 1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 类型 6 /// </summary> 7 public enum RobotAIType 8 { 9 Gremlins,

【Unity与23种设计模式】状态模式(State)

定义: "让一个对象的行为随着内部状态的改变而变化,而该对象也像是换了类一样" 应用场景: 角色AI:控制角色在不同状态下的AI行为 服务器连接状态:开始连线.连线中.断线等状态 关卡进行状态:不同关卡 using System; using UnityEngine; public class Context {     State m_State = null; public void Request(int Value) {         m_State.Handle(Value

stat file 查看文件的 最新的被访问时间 最近的修改时间 最近的状态改变时间

[[email protected] ~]# stat /media/6FE5-D831/git-data/IT-DOC/web收藏.txt File: `/media/6FE5-D831/git-data/IT-DOC/web收藏.txt' Size: 624 Blocks: 64 IO Block: 32768 regular file Device: b301h/45825d Inode: 251 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 500/

iOS开发:使用代理模式监听开关状态改变事件

记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell里显示的内容由数据模型SettingItem提供:在SettingCell里定义一个属性即可. @property (nonatomic, strong) SettingItem *item; 再定义几个SettingItem的子类表示显示不同内容的Cell(如图1).由于所有开关状态的归档和解档都

(NO.00003)iOS游戏简单的机器人投射游戏成形记(一)

这是一个简单的机器人投射游戏,主要来熟悉物理引擎的一些东西.你可以把它认为是机器人投篮;尽管投出的是抛物线,但不是篮球而是子弹,速度也较快. 游戏玩法是玩家选择机器人,移动机器人手臂瞄准篮框,然后发射子弹.如果子弹掉入篮框则得分.子弹耗完或时间耗完则游戏结束. 游戏中主要玩法的变化如下: 1.可以通过修改过关条件,比如限制子弹数量,限制剩余时间,要求必须达到一定分数等增加或降低难度. 2.可以通过Level场景的布局以及篮框的移动路线来增加难度,别忘了场景中机器人的位置也是可以变化的,而且谁说场

ListView的View回收引起的checkbox状态改变监听等问题解决方案

我的ListView中每行View包含一个ImageView.TextView.CheckBox.当ListView中有一个或一个一行CheckBox被选中就让ListView上面的Button显示,否则就隐藏.因此,需要对每行View中的CheckBox设置监听.我使用CheckBox中的OnCheckedChangeListener监听器,当CheckBox的状态发生改变的时候就会触发这个监听器.先看下我自定义给ListView的Adapter的getView方法中的一些关键代码: 这是ge

设置超链接在各种状态改变的样式颜色

设置超链接在各种状态改变的样式颜色,在html的<head>标签下面添加下面的样式,可以自己根据需要修改样式. <style> a:link {color:blue;} a:visited {color:blue;} a:hover {color:red;} a:active {color:yellow;} </style> a:link 表示未未访问的状态. a:visited 表示已访问过的状态. a:hover  表示鼠标移动到链接上时的状态. a:active 

C# Ioc容器Unity,简单实用

原文:C# Ioc容器Unity,简单实用 开头先吐槽一下博客园超级不好用,添加图片后就写不动字了,难道是bug 好进入正题,先来说下依赖注入,简单来说就是定义好接口,上层代码调用接口,具体实现通过配置文件方式去指定具体实现类. 首先我们需要通过nuget来安装unity 安装好后就可以写一个方法类去实现依赖注入 public class UnityIocHelper : IServiceProvider { private readonly IUnityContainer _container

Unity AngryBots愤怒的机器人demo研究

做为Unity早期的经典demo,一直从3.5以后沿用到4.7.x版本.但其内部一些做法十分不合理.比如使用过多的根目录, 创建怪物和玩家不用SpawnPoint,AI,CheckPoint的代码实现过于随意,代码命名风格诡异等等.. 并且网上也有很多相关的学习文章,所以我精简了一下,将一些有用的部分学习并记录下来 1.主角武器部分 WeaponSlot为武器主要GameObject节点,里面有各种相关脚本. 其中瞄准线(LaserScope)通过LineRenderer实现: 其Shader额