高端品牌网站建设公司,网站维护需要多少钱,亦庄专业网站开发公司,免费app大全下载【Unity入门】入门结课Demo--神鸟大战怪兽 大家好#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客#xff0c;所学知识来自B站阿发老师~感谢 (一) 前言 经过了两个月的学习#xff0c;我们也顺利的完成了入门课程#xff0c;最后就用一个Demo作为我们的结课句号吧我是Lampard~~ 欢迎来到Unity入门系列博客所学知识来自B站阿发老师~感谢 (一) 前言 经过了两个月的学习我们也顺利的完成了入门课程最后就用一个Demo作为我们的结课句号吧这篇文章会带大家从0完成这些~~文末会附带项目资源包一定要看到最后哇 (●◡●) (二) 搭建环境
(1) 下载unityHub 开发第一步那当然是得配置开发环境我们可以从https:unity.cn下载我们的unity开发引擎。unity需要通过一个unityHub来管理开发用到的引擎编译器和项目。所以我们第一步是在上述网站上下载一个unityHub (2) 注册账号和获得开发许可证 在下载玩Hub之后我们需要先注册一个unity的账号可以用邮箱或者手机过程就不表了和其他平台的注册没啥两样 。那么登录了之后就可以了吗NONONO我们还需要获得一个unity的许可证来证明我们的使用目的是学习用途而不是商用 打开Hub在设置界面选择许可证点击添加按钮勾选个人用途就可以免费使用unity进行学习啦。在申请免费个人版许可证之后可能需要等待个几十秒然后就可以在许可证页面看到自己申请的许可证了 (3) 下载编辑器引擎lts版本 申请许可证后我们就可以下载我们用到的游戏引擎了我们可以选择最新版本的引擎也可以选择LTS类型的引擎。什么是LTS呢就是long team support的缩写是官方会长期维护的版本。换言之就是bug比较少的引擎咯。我们现在开始学习当然就不求新求稳啦~2020和2021的lts随便选一个我就选择2020的 (4) 创建Unity项目 当我们下载完毕之后应该会在桌面上看到这两个图标。白白的是我们的unityHub黑色的就是我们的引擎编译器了。和cocos不同直接点击编译器是没有反应的。我们需要通过Hub来生成和管理项目下面我们打开Hub在项目页签点击右上角的创建按钮 我们看到有2d3d还有下面两个不知道什么鬼的选项哈哈哈哈用不上先不管了我们现在选择3d的项目然后给项目设置一个存放路径和项目名就可以了 (5) 打开Unity项目 创建完毕之后返回项目页签就可以在项目页签看到刚才创建的项目 点进去之后Hub就会帮助你在编译器中打开这个项目当你看到这个界面之后恭喜你环境搭好啦~ (三) 导入项目所需的资源
1模型资源 我们这个Demo是实现一个类似于飞机大战之类控制己方射击敌方的小射击玩法。那要实现这个功能首先就要导入双方的模型资源 我们只需要把文末的资源包拖动到Assert目录下点击Import就可以了 首先看看我们的主角神鸟模型它是一个FBX类型的模型里面包含了一个mesh网格文件一个materials材质文件和一个png格式的纹理 什么是网格 我们看到的3D物体实际上是由一个个小的三角形组成的。所谓网格数据其实就是描述构成模型的一个个三角形所包含的顶点数据纹理坐标法线信息等等的一系列数据 什么是材质 物体的物质的性质、特征或组成。材质可以是金属、塑料、木材、玻璃、陶瓷、纺织品等等。正确选择材质可以决定物体的质量、外观、特性和使用寿命。材质也可以用于表示3D模型的外观和质感。在计算机图形学中材质通常用纹理、颜色、反射率、粗糙度、透明度等参数来描述 什么是纹理 现实生活中物体很少会遇到纯色的。肯定每一个物体甚至物体的每一个地方都有区别而用于呈现它们具有的不同外表的东西就叫纹理 扯远了我们继续看看怪兽的模型。怪兽的模型由两个部分组成分别是本体和盔甲。它模型内部有两个和材质但是它的网格数据是共用的 直接把它们托到层级管理器Hierarchy中就可以生成两个模型对象了
2天空盒 首先什么是天空盒 在实时渲染中如果要绘制非常远的物体例如远处的山、天空等随着观察者的距离的移动这个物体的大小是几乎没有什么变化的。而实现这种“无穷远”的背景技术就是天空盒技术 unity自带了一个蓝天黑地的天空盒为了美观一些我们可以替换天空盒的纹理和材质 首先点击Window餐单栏下面的Rending-Lighting子菜单然后在Enviroment页签下找到天空盒定义材质和纹理的地方把我们实现准备好的天空盒材质和资源替换上去即可 3子弹 既然是大神鸟打小怪兽那肯定得有一个攻击用的子弹。至于子弹我们就简单用一个Unity自带得球体就可以了 我们可以从界面左上方的GameObject处选择生成的对象也可以在层级控制Hierarchy处鼠标右键选择生成物体选中Sphere就可以创建一个球体。修改一下命名和大小就可以得到子弹对象了 (四) 搭建脚本开发环境
1下载visual studio 接下来就要编写脚本了首先我们要搭建好开发环境。在我们下载unity编译器的时候会让我们选择当前unity编译器搭配的vs编译器。我们最好就直接勾选上或者可以自己手动下载vs在vs的installer里勾选unity引擎开发需要的环境 2unity中设置脚本编译器 下载好了之后我们要在unity中更新vs作为脚本编译器。方式很简单打开编译器选择Edit - Preferences目录 在 External Tools 页签里选择 VS 作为脚本编辑器 3设置随脚本修改重新编译 为了方便之后的开发调试我们需要设置每当脚本修改了之后unity自动帮我们编译这个脚本让改动可以实时的生效。选择Edit - Preferences目录 在 General 页签里把Script Change While playing 选项调整为Recompile After Finished Playing即可 (五) 碰撞检测
1子弹移动脚本 想要实现子弹从神鸟往怪兽方向移动我们可以通过创建一个C#脚本在脚本中每一帧更新子弹的transform组件位置最后把这个脚本挂在子弹对象上即可 其中Translate方法可以帮助我们便捷的调整对象的位置Time.deltaTime可以访问到当前帧距离上一帧的执行时间因此帧更新位置的代码如下 void Update(){float DisPreSec 6f; // 移动速度this.transform.Translate(0, 0, DisPreSec * Time.deltaTime);} 下面看看效果 2Collider组件 子弹径直从怪兽身上传过去显然不是我们想要的效果。若要实现子弹击中怪兽就和怪兽一并消失的效果那我们就需要监听碰撞检测 监听碰撞检测需要三个条件首先双方物体对象都有碰撞体Collider组件Unity提供了以下的碰撞体组件选择 1. Box Collider盒子碰撞器一个基于矩形的碰撞体用于模拟长方体或立方体物体的碰撞。 2. Sphere Collider球形碰撞器一个基于球形的碰撞体用于模拟球体物体的碰撞。 3. Capsule Collider胶囊碰撞器一个基于胶囊形状的碰撞体用于模拟某些具有胶囊形状的物体的碰撞比如人物角色。 4. Mesh Collider网格碰撞器一个基于游戏对象模型的碰撞体用于模拟复杂的几何形状的物体的碰撞比如地形、建筑等。 5. Terrain Collider地形碰撞器一个基于 Unity 地形的碰撞体用于模拟地形的碰撞。 6. Wheel Collider车轮碰撞器一个专门针对车辆的碰撞体用于模拟车辆的轮子与地面的碰撞。 7. Character Controller角色控制器一个专门为人物角色设计的碰撞体用于模拟人物角色的移动和碰撞。 子弹是Unity自带的3d物体本身带有一个碰撞体组件。我们只需要给怪物模型也加上碰撞体就可以了我们可以选择一个箱体的Colider调整其大小直至覆盖住怪物即可绿框框下面是添加过程 3设置触发器和运动学刚体属性 刚体我们知道是物理学中研究的一个物体对象概念那运动学刚体是什么呢 运动学刚体不受物理引擎的计算和影响而是由开发者手动控制它的运动。运动学刚体可以设置为运动、旋转或缩放但不会受到重力、碰撞等物理效果的影响。运动学刚体通常用于模拟精确的动画或特效效果或者用于实现一些特定的游戏机制 给子弹添加Rigidbody刚体组件里面有一个可以选择Is Kinematic的参数选中就可以让子弹对象成为一个运动学刚体 然后再把子弹Colider组件中的isTrigger给勾选上就可以监听碰撞事件的发生 4设置碰撞监听函数 在前面这些都准备好之后我们就可以给子弹对象加上碰撞监听函数了 isTrigger 是 Collider碰撞体组件中的一个属性用于指定碰撞体是否为触发器。 当一个碰撞体的 isTrigger 属性被设置为 true 时该碰撞体就不会影响游戏对象的物理运动也不会产生碰撞效果而只是用于检测游戏对象是否进入了该碰撞体的范围内。当游戏对象进入触发器时就会触发 OnTriggerXXX 系列函数比如 OnTriggerEnter、OnTriggerStay、OnTriggerExit 因此在子弹脚本中添加OnTriggerEnter方法之后在碰撞发生时就会被监听到事件的发生。 再用Destory静态方法把碰撞体子弹和碰撞对象怪兽一起销毁即可 看看效果 5自毁 子弹命中怪兽后能够正常的销毁但是正常游戏中应该没有什么怪兽会呆呆的站在那里让你打。那些打不中怪物的子弹应该加上一个自毁方法来避免内存泄漏 此时我们需要用到unity的计时器Invoke类 Unity 的 Invoke() 方法是一种用于延迟执行某个方法的方式。Invoke() 方法可以在指定的时间以秒为单位后执行指定的方法 Invoke() 方法的语法如下 Invoke(string methodName, float time); 其中methodName 是要执行的方法的名称time 是要延迟的时间以秒为单位 因此我们调用Invoke方法设定一个自毁时间若时间到了子弹对象还存在则去销毁它 看看效果 (六) 玩家主控逻辑
1发射逻辑 子弹的逻辑我们已经写好下面就要开始制作神鸟的逻辑了。首先需要给神鸟创建一个C#脚本命名就叫PlayerLogic好了 紧接着给神鸟脚本加上第一个功能发射子弹。需要怎么做呢首先声明一个子弹的对象用于克隆 [Tooltip(子弹节点的预制体)]public GameObject bulletPrefab; 然后编译器选中这神鸟对象就可以看到我们刚才声明的属性把已经制作好的子弹拖过去就可以被访问到了 紧接着我们可以定义一个Fire方法通过引擎自带的Instantiate静态方法生成子弹对象 private void Fire(){// 实例化一个子弹节点GameObject node Instantiate(bulletPrefab);} 把Fire方法在Start的时候调用就会在游戏开始的时候被执行一次也就是发射一次 void Start(){Fire();} 但是这一点都不猛为了让主角火力更猛一些我们可以给它安排一个突突冒蓝火的加特林实现一个连发功能具体做法就是调用我们的InvokeRepeat方法实现方法循环调用 void Start(){InvokeRepeating(Fire, 0.1f, 0.1f);} 比如这样我就可以0.1秒开一炮看看效果 2移动逻辑 紧接着要给神鸟加上移动逻辑希望它和很多游戏一样通过wsad键进行上下左右移动 首先移动的逻辑我们可以和子弹对象一样通过translate方法实现。问题的关键就是如何监听键盘按下的事件了 键盘可以获取它的按下长按和抬起状态。分别需要调用Input.GetKeyDownInput.GetKey 和 Input.GetKeyUp 来实现 比如这样就可以监听W键的按下和抬起 void Update(){if (Input.GetKeyDown(KeyCode.W)){Debug.Log(正在执行W键的按下);}if (Input.GetKeyUp(KeyCode.W)){Debug.Log(正在执行W键的抬起);}} 在神鸟脚本中的Update方法里加上这样的代码就可以实现前后左右移动的功能 看看效果 3修改子弹生成对象的 不难发现神鸟是能动了但是子弹还是呆在原地我们需要在子弹生成的时候把子弹生成的位置设置成神鸟的位置即可 private void Fire(){// 实例化一个子弹节点GameObject node Instantiate(bulletPrefab);// 调整子弹的发射结点node.transform.position this.transform.position;} (七) 怪物脚本
1蛇皮走位 到了最后一步就是给怪物也加上脚本逻辑了。首先要实现的就是怪物的蛇皮走位毕竟呆呆的站在原地让人打也太没意思了 过程分两步首先控制怪兽往Z方向玩家方向定速移动 然后需要让怪物随机的左右移动来躲避子弹。随机效果的实现可以定义一个速度的数组然后定时利用Random.Range方法从速度数组中选择一个然后怪兽就按照这个速度在X方向进行移动即可 和子弹相似若怪物没有被击中我们不能让怪物永远的存在因此可以判定怪物的位置若已经超出了击中范围就自动销毁 好的我们来看看效果 2批量生产怪物 下一步就是批量生成怪物之前我们把批量生成子弹的逻辑写在玩家身上那批量生成怪物写在哪里比较好呢 一般的项目都有一个main方法我们也可以创建一个Main脚本把控制游戏流程的东西放在里面。生成流程与子弹相似就不重复赘述了 MainLogic随便创建一个空节点挂上去就可以生效了 看看目前的效果怪物可以批量创建然后子弹击中也可以令怪物消失 3艺术就是派大星 至此我们的主要逻辑就写的差不多了但是现在的击中效果未免也太弱了。有一位名人说过“艺术就是爆炸” 为此我们可以给子弹击中的时候加上绚丽的粒子特效效果。特效的资源我们已经放在了Effect的目录下方 使用的方法也很简单首先需要在子弹脚本中声明一个粒子特效对象在编辑器中把特效挂上去子弹脚本就可以访问到特效资源了。 然后和普通的预制体一样在碰撞发生的时候OnTriggerEnter,通过Instantiate方法创建并把其位置设定成子弹的位置即可注意单次播放的粒子特效播放一次之后就自动销毁无需手动Destory 4背景音乐 为了更有趣味一些我们还可以给游戏加上背景音乐。其中用到的是AudioSource组件 audioSource是指音频源它是Unity中AudioSource组件的一个属性用于存储音频剪辑或音频资源的引用并控制播放、暂停、停止、音量等音频的相关属性。在Unity中AudioSource组件可以附加到游戏对象上使其能够播放音频文件例如背景音乐、音效等 至于使用方法就更简单了首先右键生成组件挂在主控结点上。然后把事先准备的MP3资源挂在AudioSource组件的autoclip上即可 好啦看看DEMO的最终成果吧 真是泰酷辣 八结语 至此入门的Demo已经完成了感谢这两个月的陪伴~ 但是很快我们就会续更基础和高级Unity系列的文章敬请期待 下载资源链接在这里【Unity入门Demo项目资源】 点赞关注