目录
该游戏项目仅供参考,下载链接在文末。若需要答辩论文请私聊
版本:Unity 2018.4.36
游戏介绍
《Crazy Soccer》是一款有趣的足球模拟游戏。玩家将看到两个球队之间的自主对战,通过观看AI球队之间的精彩竞争,提高玩家对足球这项运动的认知。
这个游戏项目旨在熟练地去练习与实践运用自己在课内所学的游戏智能的相关知识。主要涉及到的技术有:AI行为树的逻辑设计、倒计时功能、计分系统的实现、数据存储以及一系列UI交互和动画特效制作。
整体结构
部分截图
答辩论文截图
答辩问题
1 倒计时功能如何实现?
使用协程。通常倒计时功能是配合Update函数实现,然而由于Update更新频繁,每一秒相当于会进行多次倒计时的计算,性能开销过大。因此我想到使用协程来实现倒计时:在IEnumerator中调用语句:yield return new WaitForSeconds(1f),即一秒只更新一次,而非每一帧都更新。总时间设置为60秒,每过一秒总时间-1。当总时间为0,设置timeScale为0,该作用是基于帧率的功能都将被暂停,即将画面静止,弹出“GAMEOVER”,游戏结束。
2 AI的实现体现在哪一方面?
体现在守门员的AI行为树逻辑,我设计的AI逻辑为:①守门员首先在球门附近不断巡逻,不过守门员始终朝向足球的方向(Repeater+MyPatrol+RotateTowards+Parallel结点,Parallel用于并发执行守门员朝向与巡逻) ②如果足球进入视野范围,则去追赶足球(Seek+CanSeeBall+Seek结点,Sequence结点设置中断类型为Low Priority) ③追赶到足球,向前踢(Seek+Shoot结点。Seek自定义了arriveDistance,即设定何种距离表示接触到球,接触到球则返回success,进而执行向前踢行为。Sequence结点设置为Low Priority) ④如果球不在视野内了,则继续重复第一步的巡逻行为。
3 计分系统的实现?
首先是在球门内放触发撞器来触发进球事件。进球后,进球方比分加1,然后重新加载这个场景。计分使用到委托和事件:定义得分事件,用于发出得分消息,进球后,发送得分事件消息,为接收器提供参数1,实现+1分效果。重新加载场景后,为了不使比分和倒计时也被初始化,采用单例模式定义了一个data类用于存放数据,挂载到空物体上,将空物体设置成初始化场景时不会被destroy即可。
下载链接:GitHub - Curzsu/Crazy-Soccer: 游戏智能结课大作业
有帮助记得给个star,谢谢 ♪(・ω・)ノ