小白Unity入门(下)

来源:互联网 发布:java软件编程培训价格 编辑:程序博客网 时间:2024/05/17 03:42

上文地址 小白Unity入门(上)
本篇文章还是学习总结,如写的有问题,请指出,谢谢!

旧版 UI 组件之 GUIText

  • 常用 UI 系统简介

    1. NGUI
      NGUI 是一款使用最多的第三方的 UI 插件。
      目前国内大部分的游戏的界面 UI,都是使用 NGUI 这个插件来编写实现的。

    2. UGUI
      Unity 自 4.6 版本后自带的一套 UI 系统。
      随着 UGUI 的不断完善,慢慢的也有公司使用 UGUI 来编写游戏的界面 UI。
      GameObject–>UI 菜单下,是 UGUI 的相关 UI 对象。
      Component –> UI 菜单下,是 UGUI 的相关 UI 组件。

    3. OnGUI
      现在主要用于 Unity 引擎的界面扩展。
      NGUI 和 UGUI 都是“所见即所得”的形式制作 UI,而 OnGUI 类似于 Web开发中的 html 和 css的编写。

    4. Legacy GUI
      旧版 UI,只有两个组件,文字和图片,配合鼠标事件来实现界面 UI。
      这个在公司的实际游戏项目开发中,几乎不会用到。

  • 本篇文章主要讲的就是这个UI——Legacy GUI,因为这个 UI 系统非常简单,在我们学习Unity 的过程中,可以实现一些“并不是很漂亮,但能用”的 UI 界面。

  • GUIText 组件

    1. GUIText 简介
      GUIText 组件主要用于文字的显示。
    2. 创建 GUIText
      ①新建一个空游戏物体。
      ②给这个空游戏物体添加“GUIText”组件,步骤如下:
      Component->Rendering->GUI Text
      ③这个游戏物体就可以用来负责显示文字了。
    3. GUIText 常用属性
      Text(文字)
      设置 GUIText 组件显示的文字。
      Font Size(文字大小)
      设置文字显示的大小,默认是 0。
      Pixel Offset(像素位置偏移)
      通过 x 轴和 y 轴两个值,设置文本组件在场景中显示的位置。
  • 要点注意
    前面三个属性设置完毕后,我们的文本 UI 就可以正常显示了。
    另外 GUIText 组件只能在 Game 窗口测试,Scene 窗口看不到。
    Color(颜色):用于设置文字的显示颜色。

旧版 UI 组件之 GUITexture

  • GUITexture 简介
    GUITexture 组件主要用于图片的显示。

  • 创建 GUITexture
    ①新建一个空游戏物体。
    ②给这个空游戏物体添加“GUITexture”组件,步骤如下:
    Component->Rendering->GUI Texture
    ③这个游戏物体就可以用来负责显示图片了。

  • GUITexture 使用步骤
    ①首先先将 GUITexture 的 Scale 缩放属性全部设置为 0.1 的显示比例。
    ②然后再设置 GUITexture 组件的相关属性。

  • GUITexture 常用属性

    • Texture(纹理)
      设置要显示的图片。

    • Color(颜色)
      设置图片的颜色。默认状态时 Color 属性是不会影响图片显示效果的。

    • Pixel Inset(像素设置)
      X(轴)和 Y(轴)设置图片显示的位置。
      W(width)和 H(height)设置图片的宽度和高度。

  • 要点注意
    GUITexture 组件同样也只能在 Game 窗口测试,Scene 窗口看不到。

  • 鼠标事件

    1. 常用事件方法
      OnMouseEnter() :鼠标进入
      OnMouseExit() :鼠标离开
      OnMouseDown() :鼠标按下[单击]

    2. 颜色参数
      Color 结构体,里面有常用的颜色。
      Color.red;Color.green;Color.blue ……

特效组件之 TrailRenderer

  • TrailRenderer 简介

    1. 简介
      TrailRenderer,拖尾渲染器,作用是用于渲染显示“拖尾特效”。
      拖尾:物体后面拖着的尾巴,现实生活中存在的拖尾比如流星拖尾。

    2. 拖尾在游戏中的运用
      拖尾特效在游戏中也被大量的使用和运用,比如发射出去的炮弹,子弹,导弹。
      只要这些物体是高速运动的,为了体现他们的运动快,往往都会在他们的后面加上一个拖尾特效。
      这里可以看到拖尾的一个重要用途:体现物体的运动速度。

    3. 创建拖尾特效
      ①新建一个空游戏物体;
      ②给这个空游戏物体添加 TrailRenderer 组件,步骤如下:
      Component–>Effects–>Trail Renderer
      ③在 Scene 面板移动这个空物体的位置,就可以看到最原始的拖尾效果。
  • TrailRenderer 材质球

    1. Materials(材质球)
      设置“拖尾渲染器”这个组件使用哪个材质球来渲染拖尾。
    2. 注意事项:
      Unity3D 中所有以“Renderer”为后缀进行命名的组件,都需要给他们指定材质球,比如之前讲解的 Mesh Renderer。
      当这类组件身上没有材质球的时候,默认就会显示成“粉红色”。以后再看到某些游戏物体显示成了这种“粉红色”,你就要知道这些游戏物体缺失材质球。

    3. 制作透明材质球
      ①创建一个材质球;
      ②设置该材质球的 Shader 为 Particles/Additive;(粒子/添加物)
      ③给材质球拖拽赋予贴图;

  • TrailRenderer 常用属性

    1. Time(时间)
      设置拖尾特效的持续时间。

    2. Start Width(开始宽度)
      设置拖尾开始时的宽度。

    3. End Width(结束宽度)
      设置拖尾结束时的宽度。

    4. Color(颜色)
      设置拖尾显示的颜色。

在实际开发中,美工人员给我们的贴图往往是“黑白图”,这种图片中黑色是透明区域,白色是不透明区域,可以简单记忆为“黑透白不透”。
我们可以通过设置这里的 Color 属性值,来让白色区域显示成特定的颜色。

特效组件之 LineRenderer

  • LineRenderer 简介

    1. 简介
      LineRenderer,线渲染器,作用是用于渲染显示“线特效”。
      线:就是一根线。我们要想绘制一根线,需要至少两个点,在游戏中也不例外。
      现实生活中比如玩具激光灯照射出来的线。

    2. 线特效在游戏中的运用
      线特效在游戏中常用于渲染激光效果,或者用于子弹瞄准。

    3. 创建线特效
      ①新建一个空游戏物体;
      ②给这个空游戏物体添加 LineRenderer 组件,步骤如下:
      Component–>Effects–>Line Renderer

  • LineRenderer 材质球
    1. Materials(材质球)
      设置“线渲染器”这个组件使用哪个材质球来渲染线。
    2. 制作透明材质球
      ①创建一个材质球;
      ②设置该材质球的 Shader 为 Particles/Additive;(粒子/添加物)
      ③给材质球拖拽赋予贴图;
  • LineRenderer 常用属性

    1. Positions(位置)
      设置线的开始点和结束点的位置。

    2. Start Width(开始宽度)
      设置线开始时的宽度。

    3. End Width(结束宽度)
      设置线结束时的宽度。

    4. Start Color(开始颜色)
      设置线的开始颜色。

    5. End Color(结束颜色)
      设置线的结束颜色。

声音组件之 AudioSource

  • AudioClip 音频剪辑

    1. 音频简介
      在 Unity3D 游戏开发过程中,为了烘托场景氛围,会大量的使用到各种各样的“声音”来制造场景氛围。
      比如:游戏的背景声音,各种武器的特效声音,刀剑武器的挥舞声音……
      如果一个游戏中没有了声音,至少会降低玩家一半的游戏快感,声音在游戏开发和制作的过程中是非常重要的。

    2. AudioClip
      AudioClip:音频剪辑(音频片段)。
      我们导入到 Unity 中的所有的声音文件,他们在 Unity 引擎中的资源类型都是

  • AudioClip类型。
    Unity 能使用的音频格式: .aif .wav .mp3 .ogg
    我们可以在 Project 面板的 Assets 文件夹中创建一个“Audios”文件夹来存放和管理游戏中使用到的音频资源。

  • AudioSource 组件

    1. 组件简介
      AudioSource:音频源组件,作用是用于播放音频剪辑(AudioClip)资源。
      你可以将音频源组件当成一个“音响”。
    2. 创建 AudioSource
      ①新建一个空游戏对象;
      ②给这个空游戏对象添加 AudioSource 组件,步骤如下:
      Component–>Audio–>AudioSource
  • AudioSource 常用属性

    1. AudioClip(音频剪辑)
      指定该音频源播放哪个音频文件。

    2. Play On Awake(在唤醒时开始播放)
      勾选之后,在游戏运行起来之后,就会开始播放。

    3. Loop(循环)
      勾选之后,声音会进入“单曲循环”状态。

    4. Mute(静音)
      勾选之后,静音,但是音频还是处于播放状态。

    5. Volume(音量)
      为 0 时,无声音;为 1 时,音量最大。

    6. Spatial Blend(空间混合)
      设置声音是 2D 声音,还是 3D 声音。
      为 0 时,是 2D 声音;为 1 时,是 3D 声音。

  • Audio Listener 组件
    Audio Listener:声音侦听器,其实就是我们在游戏世界中的“耳朵”。
    我们依靠这个组件来听游戏世界中的声音,如果没有了这个组件,我们是听不到
    任何声音的。
    默认状态这个组件,是挂载到我们的摄像机身上的。

  • AudioSource 常用函数

    1. Play() 函数
      播放音频剪辑。

    2. Stop() 函数
      停止播放。

    3. Pause() 函数
      暂停播放。

常用 API 之实例化与销毁

  • 实例化游戏物体

    1. 游戏中的案例介绍
      在很多 MMORPG 类的游戏中都有类似于“金钱副本”的副本关卡。在这类副本中通常都是限定一个时间,在这个时间内玩家可以尽情的破坏,然后收集金钱。

    2. 案例场景制作
      ①创建地面模型;
      ②创建“坛子”模型,并制作成预制体;

    3. 实例化生成 1 个坛子
      GameObject.Instantiate(Object, Vector3, Quaternion);
      参数说明:
      Object:用于实例化的预制体;
      Vector3:实例化后生成的物体所在的位置;
      Quaternion[四元数]:实例化后生成的物体的旋转状态;
      Quaternion.identity:无旋转;

    4. 构造随机位置
      位置是用 Vector3 类型进行表示的。
      X,Y,Z 三个值确定了物体在三维世界中的位置。
      Random.Range(min, max):生成随机数。
      在 min 和 max 直接随机生成一个随机数。

  • 销毁游戏物体
    GameObject.Destroy(Object, float);定时销毁某个游戏物体。
    参数说明:
    Object:要销毁的游戏物体;
    float:时间,多少秒后销毁;

常用 API 之 Invoke 函数调用

  • 金钱副本细节完善

    1. 宝箱自动掉落
      给宝箱预制体添加刚体组件即可。

    2. 实现按键宝箱批量掉落
      ①将实例化生成宝箱的代码单独封装成一个函数;
      ②使用 for 循环,批量生成宝箱。

    3. 宝箱自动掉落
      现在我们是通过按下某键,然后程序调用“生成宝箱”的函数,来实现功能。

在真正的游戏中,这个“生成宝箱”的函数,也是需要由程序自动调用的。那么如何实现呢??往下看~

  • Invoke 函数

    1. Invoke 函数代码

      • Invoke(string,float):多少秒后执行某个函数[只会调用一次]。
        参数说明:
        String:要执行的函数的名称;
        Float:秒数,倒计时的时间;

      • InvokeRepeating(string,float,float):多少秒[第二个参数]后执行某个函数,并且以后每隔多少秒[第三个参数]都会执行该函数一次[重复调用N次]。
        参数说明:
        String:要执行的函数的名称;
        Float:秒数,准备时间,预热时间;
        Float:秒数,重复调用的间隔时间;
        CancelInvoke():取消这个脚本中所有的 Invoke 调用。

    2. Invoke 函数的家在哪儿?
      Class 类可以理解成是一个“家”,各种各样的函数(方法),字段,属性可以理解成是这个“家”的家庭成员。
      那么,这三个 Invoke 相关的函数,他们的家在哪儿?
      回答:MonoBehaviour类。

    3. 金钱副本主角控制

      • 主角基本控制
        ①创建一个 Cube 模型,美化一下,作为主角;
        ②添加刚体组件,使用刚体的 MovePosition 结合按键控制主角移动。

      • 控制主角与 Box 碰撞
        ①主角碰撞到 Box,Box 自动销毁。

常用 API 之消息发送

  • 金钱副本细节完善

    1. 主角战斗
      ①主角碰撞到 Box,Box 消失后,在消失的位置生成 1 枚金币;
      ②金币设置为触发器模式,且自身要不停的旋转;
      ③主角编写触发器处理代码,触发销毁金币。

    2. SendMessage 消息发送

      • SendMessage 函数
        gameObject.SendMessage(string):通知这个游戏物体身上的脚本文件中的“指定方法”执行。
        参数说明:
        String:方法名,要执行的方法的名称;

      • 完善金钱副本
        ①创建一个 GUIText 用于显示分数;
        ②给金币创建脚本,金币获取到 GUIText 组件的引用;
        ③在金币脚本中编写“增加分数”的函数;
        ④当金币销毁时,SendMessage 通知该“增加分数”函数执行。

常用 API 之协同程序

  • 协同程序简介

    1. 什么是协同程序
      协同程序,简称“协程”。在脚本运行过程中,需要额外的执行一些其他的代码,
      这个时候就可以将“其他的代码”以协程的形式来运行。
      类似于开启了一个线程,但是协程不是线程。

    2. 协同程序的使用前提
      只有在继承了“MonoBehaviour”这个类的子类中才能使用相关的协程方法。

  • 协同程序语法格式

    1. 定义协同程序
      协同程序就是一个“代码片段”,往往我们需要将这个代码片段封装成一个方法,或者称之为函数。
IEnumerator Task3() { yield return new WaitForSeconds (2); Debug.Log ("任务 3"); }参数说明:IEnumerator:协同程序的返回值类型;yield return:协同程序返回 xxxxx;new WaitForSeconds (秒数):实例化一个对象,等待多少秒后继续执行。这个 Task3()的作用就是等待两秒后,继续执行任务 3.
2. 开启协同程序StartCoroutine(“协同程序方法名”);这个 StartCoroutine 有三种重载形式,目前先只介绍这一种。3. 停止协同程序StopCoroutine(“协同程序方法名”);这个 StopCoroutine 也有三种重载形式,目前先只介绍这一种。

常用 API 之脚本生命周期

  • 脚本生命周期简介
    脚本作为我们游戏的“灵魂”,往往不单独存在,而是经常作为组件的形式挂载到特定的游戏物体身上,比如:游戏主角,敌人,Boss,子弹,建筑物……

  • 脚本的生命周期,也就是所挂载到的游戏物体的生命周期。
    脚本的生命周期,就是挂载到的游戏物体“从出生到死亡”,所经历的一些事件。

  • 这些生命周期事件,是一些特定的方法,且是由 Unity 引擎事先定义好的,在游戏的运行过程中,由引擎自动调用。

  • 这些生命周期事件,全部定义的 MonoBehaviour 这个类中。也就意味着只有继承自这个类的脚本,才有这些生命周期事件。[见图]

  • 常用生命周期事件
    通过一个小的 Demo 演示,来讲解生命周期事件:
    按下键盘上的某个键,然后在场景中实例化一个 Cube 物体,
    这个 Cube 物体身上挂载一个脚本,用于测试它的生命周期事件。

    1. Awake() ※
      唤醒事件,只执行一次。

    2. OnEnable()
      启用事件,只执行一次。当脚本组件被启用的时候执行一次。

    3. Start() ※
      开始事件,只执行一次。

    4. FixedUpdate() ※
      固定更新事件,执行 N 次,0.02 秒执行一次。
      所有物理组件相关的更新都在这个事件中处理。

    5. Update() ※
      更新事件,执行 N 次,每帧执行一次。

    6. LateUpdate()
      稍后更新事件,执行 N 次,在 Update 事件执行完毕后再执行。

    7. OnGUI()
      GUI 渲染事件,执行 N 次,执行的次数是 Update 事件的两倍。

    8. OnDisable()
      禁用事件,执行一次。在 OnDestroy 事件前执行。
      或者当该脚本组件被“禁用”后,也会触发该事件。

    9. OnDestroy() ※
      销毁事件,执行一次。当脚本所挂载的游戏物体被销毁时执行。

    10. 注意事项
      生命周期事件,全部是由系统定义好的,且系统会自动调用。
      系统调用这些事件的顺序,和我们代码里面的书写顺序无关。

  • 替换代码编辑器

将 Unity 自带的 MonoDevelop 替换成微软的 VS 2013 编辑器。
操作步骤:
Edit–>Preferences…–>Unity Preferences 面板–>
External Tools–>External Script Editor 位置进行下拉选择设置。

常用 API 之工具类

  • Screen 屏幕类

    1. 作用
      这个类中包含屏幕相关的数据信息。

    2. 类中常用属性
      Screen.width:静态只读属性,屏幕的宽度。
      Screen.height:静态只读属性,屏幕的高度。
      备注:在 Unity 的开发模式下,这两个值取的是 Game 窗口的宽度和高度。
      在项目编译打包后,再运行,就是具体的设备的屏幕的宽度和高度。

  • Time 时间类

    1. 作用
      这个类中包含时间相关的数据信息。

    2. 类中常用属性

      • Time.time
        静态只读属性,游戏时间。从游戏开始到现在所经过的秒数。

      • Time.deltaTime
        静态只读属性,时间增量。渲染完上一帧画面所消耗的时间。
        [可以用于实现倒计时效果]

      • Time.timeScale
        静态属性,时间缩放。[可以用于暂停游戏]
        当值为 1 时,游戏是正常状态;为 0 时,游戏是暂停状态;为 0.5 时,游戏是处于慢放 0.5 倍的状态。
  • Mathf 数学类

    1. 作用
      这个类(其实 Mathf 是结构体类型)中包含了各种各样的数学运算相关的函数。

    2. 常用函数
      Mathf.Abs() 取绝对值
      Mathf.Max() 取最大值
      Mathf.Min() 取最小值
      Mathf.Round() 四舍五入

    3. 插值运算函数
      Mathf.Lerp(float a,float b,float t):插值运算
      基于浮点数 t 返回 a 到 b 之间的插值,t 限制在 0~1 之间。
      当 t = 0 返回 a,当 t = 1 返回 b。当 t = 0.5 返回 a 和 b 的平均值。
      演示:一个数从 0,插值到 10。

备注:Lerp()这个函数,在很多类中都存在,插值运算的目的基本都是为了
“平滑过渡”。

物理射线之原理分析

  • 物理射线简介

    1. 何为物理射线?
      从一个点往一个方向,发射一根无限长的射线,这根射线与场景中的其余的游戏物体的碰撞体组件相碰撞,射线即结束。
      由于射线可以与物理组件 Collider 相交互,所以“射线”也称之为“物理射线”。

    2. 物理射线的应用范围?
      超人的激光眼,X 战警镭射眼。

  • 物理射线相关方法

    1. 通过摄像机创建射线
      演示:按下鼠标左键发射射线。

      • Camera.main 代表 tag 设置为“MainCamera”的摄像机的 Camera 组件的引用。
      • m_Camera.ScreenPointToRay(Vector3)摄像机组件(对象)下的一个方法。
      • 屏幕点转化为射线,这个方法会返回一个 Ray 类型的射线。
        这个屏幕点通常写鼠标的点击位置,这样的话,就代表从摄像机的位置开始,往鼠标点击点这个方向,发射一根射线。

      • Input.mousePosition鼠标所在的位置值。

      • Ray射线,一个结构体。
        代码完整格式:
        ray=Camera.main.ScreenPointToRay(Input.mousePosition);
    2. 检查射线与其他物体的碰撞

      • RaycastHit
        一个结构体,用于存储射线的碰撞信息。

      • Physics.Raycast(Ray, out RaycastHit)
        物理类下面有一个静态方法叫做 Raycast(),射线检查。
        检查这根射线,如果射线与场景中的物理碰撞了,返回值为真,并且将碰撞信息,存储到 RaycastHit 类型的变量中。

      • 物理射线使用步骤
        第一步:创建一根射线。
        第二步:检查这根射线与其他物体的碰撞,得到碰撞信息。
        第三步:通过碰撞信息对碰撞到的物体进行处理。

PC 端游戏打包与发布

  • 游戏打包发布简介

    1. 简介
      现在的项目文件必须在 Unity 引擎中才能运行,通过“打包发布”可以将工程文件转换成独立的“游戏文件”,就可以脱离 Unity 引擎直接在电脑上运行。打包好的“游戏文件”就可以到处发布传播了。

    2. Unity 发布游戏
      Unity 的最大的一个特点就是“跨平台运行”,一处开发多处运行。
      常用的发布平台:Windows,Android,IOS,Mac,Web……
      我们现在演示打包发布 Windows 版本的游戏。

  • Unity 发布 PC 版游戏

    1. Build Settings[生成设置]
      File–>Build Settings 弹出项目生成设置面板。
      ① 选择要发布到的平台;
      ② 添加要发布的场景;

    2. Player Settings[详细设置]
      Company Name:公司名称
      Product Name:产品名称(游戏名称)
      Default Icon:默认图标

    3. 成品文件介绍
      一个 exe 可执行文件,一个 Data 数据文件夹,两个缺一不可以,且不可分割。

学点英语

You only live once, but if you do it right, once is enough.​
年华没虚度,一生也足矣。​

0 0
原创粉丝点击