1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【游戏开发实战】使用Unity 制作仿微信小游戏飞机大战(五):主角飞机的飞行控制

【游戏开发实战】使用Unity 制作仿微信小游戏飞机大战(五):主角飞机的飞行控制

时间:2023-06-09 10:16:07

相关推荐

【游戏开发实战】使用Unity 制作仿微信小游戏飞机大战(五):主角飞机的飞行控制

文章目录

零、教程目录一、前言二、本篇目标三、飞机基类:BaseAircraft.cs四、主角飞机类:PlayerAircraft.cs五、飞机碰撞体六、飞机工厂类:AircraftFactory.cs七、游戏管理器添加调用八、运行测试九、下篇预告

零、教程目录

使用Unity 制作仿微信小游戏飞机大战教程已完结。

文章目录如下:

《第一篇:开始游戏界面》

《第二篇:搭建基础游戏框架》

《第三篇:战斗界面UI》

《第四篇:主角飞机序列帧动画》

《第五篇:主角飞机的飞行控制》

《第六篇:根据配置随机生成敌机》

《第七篇:主角飞机碰撞与爆炸》

《第八篇:主角飞机开炮》

《第九篇:敌机受击与爆炸》

《第十篇:敌机血量与得分》

《第十一篇:核弹掉落与全屏炸机》

《第十二篇:敌机开炮》

《第十三篇:游戏暂停、结束与重新开始》

一、前言

嗨,大家好,我是新发。相信很多人玩过微信小游戏经典的飞机大战,如下:

想重温或体验微信这款经典的飞机大战的同学可以点这里:https://gamemaker./ide#/

在网上已经有一些人已经出了Unity的制作教程,但是比较陈旧,里面使用了已经弃用的组件和写法,用了很陈旧的NGUI版本,如果使用Unity 或以上版本打开会各种报错,对新入门Unity的同学不大友好。

于是,我决定写一个全新的教程:《使用Unity制作仿微信小游戏飞机大战》,会使用最新的写法,并且使用尽量简洁的设计与代码来完成。

本教程的工程已上传到Github,感兴趣的同学自行下载学习。

喜欢的同学记得给个星星~

Github地址:/linxinfa/UnityAircraftFight

Unity游戏开发有任何问题的,都欢迎在评论区留言,我都会看到的,并会进行认真解答,希望能帮助到想学Unity开发的同学,共勉。

二、本篇目标

主角飞机的飞行控制。

本篇的效果:

三、飞机基类:BaseAircraft.cs

又到了写代码的时候了,在开始写代码之前,我们先思考一下:游戏中有主角飞机,也有敌机,它们都是飞机,根据面向对象编程的思想:封装、继承、多态。我们应该思考一下主角飞机与敌机的共性,看看是否需要封装一个基类,然后再进行继承实现。

经过思考,我们可以得出如下的飞机基类:

根据这个思路,创建一个BaseAircraft.cs脚本,

代码如下:

// BaseAircraft.csusing UnityEngine;/// <summary>/// 飞机基类/// </summary>public class BaseAircraft : MonoBehaviour{public AircraftType aircraftType;public int blood;public Animator ani;protected Transform m_selfTrans;protected GameObject m_selfGo;protected virtual void Awake(){m_selfGo = gameObject;m_selfTrans = m_selfGo.transform;ani = GetComponent<Animator>();}/// <summary>/// 碰撞检测/// </summary>/// <param name="other"></param>public virtual void OnTriggerEnter2D(Collider2D other){// TODO }/// <summary>/// 受击/// </summary>public virtual void UnderAttack(){}/// <summary>/// 爆炸/// </summary>public virtual void Explode(){// TODO }public virtual void DestroySelf(){}}

四、主角飞机类:PlayerAircraft.cs

主角飞机需要根据鼠标控制飞行:鼠标按住飞机后,移动鼠标,飞机跟着移动。

创建主角飞机脚本:PlayerAircraft.cs

代码如下:

// PlayerAircraft.csusing System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 主角飞机/// </summary>public class PlayerAircraft : BaseAircraft{private bool m_isPress = false;private const float SCREEN_INNER_OFFSET = 20;/// <summary>/// 鼠标按中主角飞机/// </summary>protected void OnMouseDown(){m_isPress = true;}/// <summary>/// 鼠标抬起/// </summary>protected void OnMouseUp(){m_isPress = false;}protected void Update(){if(Input.GetMouseButton(0) && m_isPress){// 根据鼠标位置设置飞机坐标var mosePos = Input.mousePosition;// 限制坐标在屏幕内if (mousePos.x < SCREEN_INNER_OFFSET){mousePos.x = SCREEN_INNER_OFFSET;}else if(mousePos.x > Screen.width - SCREEN_INNER_OFFSET){mousePos.x = Screen.width - SCREEN_INNER_OFFSET;}if (mousePos.y < SCREEN_INNER_OFFSET){mousePos.y = SCREEN_INNER_OFFSET;}else if (mousePos.y > Screen.height- SCREEN_INNER_OFFSET){mousePos.y = Screen.height - SCREEN_INNER_OFFSET;}var worldPos = Camera.main.ScreenToWorldPoint(new Vector3(mosePos.x, mosePos.y, 10));m_selfTrans.position = worldPos;}}}

五、飞机碰撞体

由于我们需要在脚本中检测飞机是否被鼠标按到,所以飞机预设上需要挂一个碰撞体:BoxCollidder2D

如下:

这个碰撞区域不是很合理,我们调节一下碰撞体的大小和位置,如下:

六、飞机工厂类:AircraftFactory.cs

游戏中的飞机(包括主角飞机)需要有一个工厂类来生产,所以,封装一个简单工厂类:AircraftFactory.cs

代码如下:

// AircraftFactory.csusing UnityEngine;public class AircraftFactory {/// <summary>/// 创建飞机/// </summary>/// <param name="t"></param>/// <returns></returns>public static BaseAircraft CreateAircraft(AircraftType t){if(null == s_aircraftFactoryRoot){var rootObj = new GameObject("AircraftFactoryRoot");s_aircraftFactoryRoot = rootObj.transform;}BaseAircraft aircraft = null;switch (t){case AircraftType.Player:{var prefab = ResourceMgr.instance.LoadRes<GameObject>("Player/Player");var obj = Object.Instantiate(prefab);aircraft = obj.AddComponent<PlayerAircraft>();break;}case AircraftType.Enemy1:case AircraftType.Enemy2:case AircraftType.Enemy3:{// TODO break;}}aircraft.transform.SetParent(s_aircraftFactoryRoot, false);aircraft.aircraftType = t;return aircraft;}private static Transform s_aircraftFactoryRoot;}/// <summary>/// 飞机类型/// </summary>public enum AircraftType{Player,Enemy1,Enemy2,Enemy3,}

七、游戏管理器添加调用

在游戏管理器中,游戏开始事件的响应函数中添加创建主角飞机的调用。

// GameMgr.cs/// <summary>/// 开始游戏/// </summary>public void StartGame(){// 关闭开始游戏界面PanelMgr.instance.HidePanel<StartGamePanel>();// 显示游戏战斗界面PanelMgr.instance.ShowPanel<MainGamePanel>();// 创建主角飞机player = AircraftFactory.CreateAircraft(AircraftType.Player);gameState = GameState.Playing;}public BaseAircraft player;

八、运行测试

运行Unity,测试效果如下:

九、下篇预告

根据配置随机生成敌机。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。