unity 2017.3 + vuforia 7.0 之 AR贪吃蛇

R部分就不多说了,AR只是一个工具,重点还是在代码。

1.首先实现身体的跟随效果,一对一就好

[html]  view plain  copy
  1. <span style="font-family:SimSun;font-size:24px;">private GameObject player;//要跟随的目标  
  2.     void Start()  
  3.     {  
  4.         player = EnergyCore.energyCoreClo[EnergyCore.energyCoreClo.Count - 1];//追随目标是列表中最后一个单位  
  5.         EnergyCore.energyCoreClo.Add(this.gameObject);//把自己加入列表  
  6.     }  
  7.     void Update()  
  8.     {  
  9.         //跟随制定目标  
  10.         if (Vector3.Distance(player.transform.position, transform.position) > 0.1f)  
  11.         {  
  12.             transform.LookAt(player.transform.position);  
  13.             transform.Translate(Vector3.forward * Time.deltaTime * 0.2f);  
  14.         }  
  15.   
  16.   
  17.     }  
  18. </span>  
这样这个身体部分就会追随一个指定的对象了。

2.在地图上随机生成身体

[csharp]  view plain  copy
  1. <span style="font-family:SimSun;font-size:24px;">/// <summary>  
  2.     /// 限制能量核心的范围  
  3.     /// </summary>  
  4.     void ShowEnergyCore()  
  5.     {  
  6.         float x = Random.Range(0.45f, -0.45f);  
  7.         float z = Random.Range(0.45f, -0.45f);  
  8.         Instantiate(energyCore, new Vector3(x, 0.02f, z), energyCore.transform.rotation);  
  9.     }</span>  

3.机器人的操纵

[html]  view plain  copy
  1. <span style="font-family:SimSun;font-size:24px;">void Update()  
  2.     {  
  3.         //Score.text = score.ToString();  
  4.         //机器人向前方位移  
  5.         transform.Translate(Vector3.forward * Time.deltaTime * 0.2f);  
  6.         //A和D控制机器人角度  
  7.         if (Input.GetKey(KeyCode.A))  
  8.         {  
  9.             transform.Rotate(new Vector3(0, -1f, 0));  
  10.         }  
  11.         else if (Input.GetKey(KeyCode.D))  
  12.         {  
  13.             transform.Rotate(new Vector3(0, 1f, 0));  
  14.         }  
  15.     }</span>  

4.通过碰撞激活身体

[html]  view plain  copy
  1. <span style="font-family:SimSun;font-size:24px;">/// <summary>  
  2.     /// 机器人碰撞事件  
  3.     /// </summary>  
  4.     /// <param name="other"></param>  
  5.     void OnTriggerEnter(Collider other)  
  6.     {  
  7.         if (other.gameObject.tag== "EnergyCore")  
  8.         {  
  9.             other.GetComponent<Follow>().enabled = true;//激活能量核心的追随脚本  
  10.         }  
  11.     }</span>  

5.使用一个列表来存储

[html]  view plain  copy
  1. <span style="font-family:SimSun;font-size:24px;">    public GameObject energyCore;//绑定能量核心  
  2.     public static List<GameObject> energyCoreClo;//克隆的能量核心  
  3.     //public Text Score;//UI分数  
  4.   
  5.     private int score = 0;//计算分数  
  6.     void Awake()  
  7.     {  
  8.         energyCoreClo = new List<GameObject>(4);//声明一个列表  
  9.         energyCoreClo.Add(this.gameObject);//把本体加入列表  
  10.         InvokeRepeating("ShowEnergyCore", 1, 4);//生成能量核心  
  11.     }</span>  
这是戏肉部分:首先克隆身体,身体的脚本是没有激活的所以不会移动,然后我们操纵机器人转换角度去碰撞身体,激活脚本,身体去检索列表最后一个元素,跟随这个元素并且将自己加入这个列表,一个循环就完成了,当然我们在最开始把机器人加入列表作为第一个元素,要不然第一个碰撞的身体就找不到跟随目标了。

齐活。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
unity贪吃游戏源码+AI-游戏源码: 1.利用ngui插件对界面进行了仿写 在仿写界面途中发现,贪吃这个游戏在界面适应屏幕分辨率,所以在开发中需要注意界面对屏幕的适应性。通过每个图片的宽高 和uiroot的比值,在start方法中对他进行了缩放。 2.利用 ngui 自带的uidragdropItem实现摇杆 界面完成之后,首先对贪吃的摇杆进行了编程。 在unity中的NGUI上,给sprite创建添加一个uidragdropitem 实现了sprite的拖动。 AI的开始,移动逻辑: 整体只考虑三个前景: 1.首先先判断首的简介范围是否有其他死亡了留下的食物,如果有的话设置当前朝向为星星方向,便设置移动倍率为2,否则判断第三种情况; 3.随机朝某个位置移动。如果每帧AI都在更新的话,的反映速度依然会更快,需要设置一下AI的更新间隔,通过调整这个间隔和首的简介方位来调整AI的反映速度,目的是能够让玩家有机会撞死AI。 AI 移动的方向分析: AI在一个平面上运动,坐标就只有两个<x,y> 把他用0和1表示为: ----- 4个方向 上下左右 (0,0) (0,1) (0,-1) (-1,0) (1,0) 四个角度 象限。 (-1,1) (1,1) (-1,-1) (1,-1) 设计思路就是把AI也当作是用摇杆来控制的。那么AI就方便写多了,只是 在还没开始写之前,要考虑的就是AI多了之后程序会不会卡死了。在使用线程控制的过程中发现了一个问题,cup利用率太高。所以想先尝试一下在update上操作。如果不行的在想其他的办法。 设计: 把每个AI都相当于人在控制他。那么想象一下虚拟摇杆,用一个数组来存这些虚拟摇杆的位移坐标 把每条AI的长度也记录下来,默认长度就20 错误: NullReferenceException: Object reference not set to an instance of an object AI6control.flootAIOneBody6 (Vector3 V) (at Assets/AI6control.cs:57) AI6control.AIsix () (at Assets/AI6control.cs:40) AI6control.Update () (at Assets/AI6control.cs:13) 该错误在百度上说:没有实例化的问题 最后一个下午的代码调试 发现由于自己的粗心 导致了把<符号写成了<=符号 就因为这个问题,让贪吃变成了 卡神,害我看了好几天,现在解决了,贪吃也变流畅了好多. Ai也需要吃食物。长大,在游戏刚启动的时候就让Ai在地图中吃食物,成长,当用户进入游戏的时候AI已经吃到了一定的食物。测试了AI确实发现他能吃食物。死后的处理也处理了。 在AI吃食物的时候 ,地图中食物太多,控件太多。没法知道他是什么时候,查了资料说是要遍历地图中的对象,测试了一下,发现对象太多,程序卡得不要不要的,只能用触发器,避免遍历食物让程序运行不流畅或者变得死机等情况。 这样的话 在游戏中运行10-20条是没有问题的。 地图中有10个点,这10个点是用来AI死后复活的地方。 增加了限定时间模式. 经过很多的测试,也发现了很多的bug 不过都基本改完了,现在暂时没有发现bug

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值