Unity初级教程贪吃蛇实现(Snake)带工程源码

记学习Unity后第五次做游戏

       离上一次更新有一个月了…偷懒了偷懒了(出现了拖更怪!)本来工程量也不大三天就能写完的,被bug折磨地不想写,于是就一直拖更…第一天写一半,第二天再找半天感觉,第三天还得找半天感觉(本人无疑)好了进正题吧。
       在此先声明,本素材是由siki学院处取得的,无商业用途,仅学习使用。
       这次,好吧又是初级游戏…而且又没做分辨率适配,默认全屏1920*1080;而且蛇头蛇身连接处处理的不恰当,开局默认两个蛇身且没有碰撞体,所以就是开局除了撞墙不会死亡…吃过一个食物才会撞自己死亡;快速按键可以回头撞自己…缓慢的话就不会了,这些BUG我慢慢解决,这回先这样了,动手能力强的也可以解决下,那就废话不多说,开始教程了。
        首先有两个场景,一个开始界面,一个游戏场景。开始界面有一个开始游戏Button,两个Toggle Group分别存放模式和皮肤,两个Text存放最高分和最大长度,其他的背景什么的随便丢丢上去就好了(注定不会做UI的我)皮肤先开始用Sprite Render展示的,突然发现设置Pivot不管用,于是先设置了Order in Layer的顺序来展示了…但是后面找到设置Pivot为啥没用了,在Edit=>Project Settings=>Graphics=>Camera Settings=>排序模式设置为透视就好了,设置为自定义的话x,y,z没法设置,感觉就只能设置成这样了,哦对了Toggle设置单选需要在两个Toggle上面设置空的父物体,然后加个组件叫Toggle Group就行了,然后把两个ToggleGroup设置为父物体就能实现单选了。开始游戏按钮需要绑定一个事件,手动绑自动绑都行,手动绑就加个函数绑就行了;自动的话onclick事件上面添加委托,直接lambda表达式就搞定了,就像这样:button.onClick.AddListener(() => SceneManager.LoadScene(1));其他玩家选项和分数的控制的储存一会儿一起说。
丑不拉几之丑不拉几
        然后游戏场景,开始了漫长的数格子过程…我这里决定的是食物和蛇都是占两个格子的,但是都可以一格一格的挪动,所以先把蛇头设置为2*2格开始找四个角的边界记录下来,然后移动两格开始找两步的长度。开始我设置的边界离真实的边界有一格距离,步长为两格,后来发现无尽模式没办法好好的传送到另一边,所以又改了一格一格的挪,边界也改成现在这样了。开始的时候找步长还找了大半天…找了最小公倍数,还一格一格算了有多少格,结果发现走弯路了,根本就不用找…按照我上面说的方法一下就完事了。
        记录完以后,就可以自己写个移动方法来测试了,先写个全局变量moveVec2储存每次按键过后的方向,timer计时,然后计时结束以后移动长度为一格步长。

if (h != 0 && moveVec2.x != -h)//水平轴有偏移且正在移动的方向与偏移方向不相同,就是禁止180°转头   一涉及到逻辑就开始歇菜了o_o智商明显不在线
{
   
    moveVec2.x = h;//更换移动方向
    moveVec2.y = 0;
    if (h > 0)//设置旋转角实现转头
        transform.eulerAngles = new Vector3(0, 0, -90);
    else
        transform.eulerAngles = new Vector3(0, 0, 90);
}
else if (v != 0 && moveVec2.y != -v)//和上面一样的,不写注释了
{
   
    moveVec2.y =
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dark9spring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值