前言 中山大学数据科学与计算机学院3D游戏课程学习记录博客。
游戏代码: gitee
参考师兄的博客: 师兄博客
游戏视频:bilibili
游戏要求 从商店下载游戏:“Kawaii” Tank 或 其他坦克模型,构建 AI 对战坦克。具体要求如下:
- 使用“感知-思考-行为”模型,建模 AI 坦克;
- 场景中要放置一些障碍阻挡对手视线;
- 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位;
- AI 坦克必须在有目标条件下使用导航,并能绕过障碍;
- 实现人机对战。
- 在设计场景部分,需要布置游戏场景,然后使用寻路组件Navigation让坦克自动寻路。
- 在添加脚本部分,编写脚本让电脑坦克进行自动寻路、攻击,玩家控制的坦克则在控制下攻击电脑坦克。
- 在优化UI部分,让UI给玩家更好的游戏体验,比如实现血量显示,游戏提示等UI功能。
1.学习Navigation组件,学习Navigation组件的内容我写到了另一篇博客中:Navigation组件学习。
2.设计游戏场景,使用Unity Assets Store 中的 Kawaii Tank 模型。
场景如下图:
文章图片
把平面设置为可通过,房子和树设置为不可通过,然后Bake,可以得到下图:
文章图片
添加脚本
1.首先需要脚本跟踪坦克移动,写PlaceTarget.cs:
public class PlaceTarget : MonoBehaviour
{
public GameObject target;
//获取对象
NavMeshAgent mr;
//记录对象的NavMeshAgent组件
void Start()
{
//获取自身的NavMeshAgent组件
}
void Update()
{
//使用方法获取目标点坐标
}
}
2.控制导弹发射,写Fire_Control_CS.cs:
控制电脑坦克在Update函数中实现:
void Update ()
{
if (idScript.isPlayer) {
#if UNITY_ANDROID || UNITY_IPHONE
Mobile_Input ();
#else
Desktop_Input ();
#endif
} else{
count = count + Time.deltaTime;
if(count > 3.0f){
Fire();
count = 0;
}
}
}
上述代码控制电脑坦克3s开火一次。
控制玩家坦克在MainBody->Turret_Base->Cannon_Base中的Reload Time实现,建议改为0.5,不然打不过电脑。
3.控制坦克受到伤害,写Damage_Control_CS.cs中:
使用Update函数来控制坦克受到伤害:
void Update ()
{
//通过血量的多少来判断行动方式
if (idScript.isPlayer) {
#if UNITY_ANDROID || UNITY_IPHONE
if (CrossPlatformInputManager.GetButtonDown ("Destruct")) {
#else
if (Input.GetKeyDown (KeyCode.Return)) {
#endif
Start_Destroying ();
}
}
}
使用Start_Destroying来判断坦克是否需要销毁,区分玩家坦克和电脑坦克的销毁:
void Start_Destroying ()
{
//销毁坦克
//玩家坦克和电脑坦克销毁方式不同
}
优化UI
可以显示血量,让玩家知道自己坦克的情况,写Damage_Display_CS.cs:
通过函数Get_Damage进行显示:
public void Get_Damage (float durability, float initialDurability)
{ // Called from "Damage_Control_CS".
thisText.text = Mathf.Ceil (durability) + "/" + initialDurability;
}
通过UI组件辅助显示。
游戏效果
文章图片
红框内为血条。
总结 本次游戏主要是学习到了Navigation巡路工具的使用,也大概明白了AI在游戏中的作用。
【Unity|Unity 3D游戏十一(坦克大战)】详细代码见Gitee仓库,游戏视频见bilibili.
推荐阅读
- 笔记|Unity角色控制器CharacterController移动代码
- 毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
- Unity|Unity CharacterController控制人物移动(包括重力实现)
- Unity|Unity中RampTex介绍和应用: 溶解特效优化
- Unity|Unity中SmoothStep介绍和应用: 溶解特效优化
- 3D|Unity3D入门笔记01
- Unity3d|Unity Gameplay工具集(Unity Gameplay Tool Set)
- unity|Unity3D GUI控件
- unity|Unity3D中基本GUI控件介绍