Unity 3D脚本编程与游戏开发【4.1】

这篇具有很好参考价值的文章主要介绍了Unity 3D脚本编程与游戏开发【4.1】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

7.2.5 后期处理举例

Post Processing(后期处理)并不属于特效,但现代的特效表现离不开后期处理的⽀持。本⼩节以眩光(Bloom)为例,展⽰⼀种明亮的激光的制作⽅法,其效果如图7-13所⽰。
Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

1. 安装后期处理扩展包
        较新的Unity版本(如2018.4版本)已经内置了新版的后期处理扩展包。通过添加组件可以判断是否已经安装了新版的后期处理扩展包。
        在任意物体下新建组件,搜索“post”,如果看到Post-process Debug等3个后期处理相关的组件,就说明已经安装了该扩展包,如图7-14所⽰。

Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

        如果没有相关组件可以⽤Package Manager(包管理器)单独安装,⽽且升级该扩展包时也需要使⽤Package Manager。下⽂将简单介绍Package Manager的使⽤⽅法。选择主菜单中的Window→Package Manager,打开Package Manager窗⼝,等待加载完毕后,可以看到⼤量的扩展包。在搜索框中搜索“Post”就可以找到Post processing扩展包,也可以Update(更新)或Install(安装)该扩展包。
⼩提⽰
显⽰扩展包列表时可能有⽹络卡顿打开Package Manager窗⼝后可能只会看到少数⼏个扩展包,这
时要稍加等待,待加载完毕后才会看到⼤量扩展包信息。由于服务器和⽹络原因,有时会遇到较⻓时间的⽹络卡顿,列表迟迟加载不全。如果2分钟后还是没有完全加载,则需要完全关闭Unity之后再重试。

2. 添加Post Process Volumn组件
        Unity的后期处理⽀持在场景中指定多个后处理区域,每个区域称为⼀个Post Process Volumn。创建它的⽅法是先新建⼀个空物体,可以命名为pp,然后给空物体添加Post Process Volumn组件,如图7-15所⽰。

Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

        添加组件后勾选第⼀个属性Is Global,它表⽰这个后处理设置会应⽤于整个场景。由于这个例⼦⽐较简单,只需要让全场景使⽤同⼀个后期处理配置就可以了。
        之后单击Profile(配置档案)右边的New按钮,则会在⼯程中新建⼀个配置⽂件。单击配置⽂件的名称,则系统会在Project窗⼝中⾃动定位该⽂件。
        选中Profile⽂件,然后在Inspector窗⼝中编辑,单击Add effect按钮,选择Unity→Bloom,添加Bloom效果,如图7-16所⽰。

Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

Bloom特效的具体参数,可以在配置⽂件⾥设置,也可以回到物体pp的组件中设置。勾选该后期效果组件的Intensity(强度)选项,并将它改为2,其他选项可以保留默认或者以后再修改。
3. 添加Post Process Layer组件
        有了场景中的设置,还需要在摄像机上进⾏设置才能让后期效果⽣效。给场景的主摄像机添加Post ProcessLayer组件,并将Trigger选项设置为Main Camera,再将Layer选项设置为Everything即可,如图7-17所⽰。

Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

                                        图7-17 Post Process Layer组件
4. 创建激光物体
        万事俱备,只差物体本⾝了。为简单起⻅,直接新建⼀个圆柱体,缩放成细⻓条状,旋转到合适的⾓度,然后再创建⼀个新的材质赋给圆柱体。
        修改该材质,使⽤默认的Standard着⾊器,修改Albedo(漫反射颜⾊)为红⾊;再勾选Emission(发光),勾选后会多出⼀个发光颜⾊的选项,修改该颜⾊为红⾊,并注意要选择颜⾊窗⼝下⽅的Intensity(强度)选项,如图7-18所⽰。

Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

发光颜⾊是⼀种特殊的HDR颜⾊,⽐⼀般的颜⾊多了Intensity属性。这⾥将强度调整到2.5以上,就会看到明显的发光效果了。再结合HDR颜⾊与后期的Bloom效果,物体会具有⾮常明亮的感觉。
⼩知识
⾼动态范围HDR
        ⾳响设备能实际表现出的最低⾳量与最⼤⾳量的⽐例是⾳量的动态范围,同理,显⽰屏所能表现的最低亮度与最⾼亮度的⽐例,也是动态范围。HDR(High Dynamic Range)指的是⾼动态范围图像,相⽐普通图像可以提供更多的动态范围和图像细节。它能够更好地反映真实环境中的光线强度变化。本节的粒⼦利⽤HDR颜⾊配合Bloom效果得到激光效果。未来的显⽰设备也会从硬件上更好地⽀持HDR效果。

第8章 脚本与⾳频

        对于很多游戏来说,动听的⾳乐、恰当的⾳效与精美的画⾯同样重要。本章将介绍⾳乐和⾳效如何使⽤,以及利⽤脚本控制⾳频播放的⽅法。此外,由于⾳频资源适合⽤各种⽅式加载,因此本章也会讲解⽤脚本管理各类资源的⽅法。

8.1 ⾳频基础概念

Unity的⾳频播放功能主要是通过⾳源(Audio Source)与⾳频侦听器(Audio Listener)这两个组件实现的。

8.1.1 ⾳源与⾳频侦听器

        游戏画⾯能够被观众看到,是因为有渲染器和摄像机,同样⾳频能够被听到,也要有声⾳的发出者与声⾳的接收者。声⾳的发出者叫作⾳源,⽽声⾳的接收者叫作⾳频侦听器。Audio Source与AudioListener都是组件,可以挂载到任意物体上发挥作⽤。
        ⼀般⾳频侦听器整个场景只有⼀个Audio Listener,默认挂载在主摄像机上。根据具体设计需求,Audio Listener也可以挂载到主⾓⾝上,或其他适合接收⾳频的位置。⽽要播放⾳乐,只需要创建⼀个带有Audio Source组件的物体,并准备播放的⾳频资源⽂件,其步骤如下。

01 准备⼀个⾳乐⽂件,复制到当前⼯程的Assets⽂件夹下。⾳频格式可以是WAV、MP3、OGG或AIFF等常⽤格式。
02 在场景列表中单击⿏标右键,选择Create→Audio→AudioSource即可创建⼀个⾳源物体。也可以在任意物体上添加Audio Source组件。
03 选中⾳源物体,可以看到Audio Source组件的第⼀个属性为AudioClip(⾳频⽚段),将Project窗⼝中的⾳频⽂件拖曳到该属性上即可。
04 运⾏游戏,在默认设置下该⾳频会被播放⼀次。

8.1.2 ⾳源组件详解

Audio Source组件可调节的参数较多,⽽且⼤部分参数都可以直接改变声⾳的播放效果,如图8-1所⽰。
Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

                                                图8-1 Audio Source组件
下表将详细解释Audio Source组件每⼀个属性的作⽤,如表8-1所⽰。
表8-1 Audio Source组件属性表

Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

8.2 脚本与⾳乐、⾳效

        在游戏运⾏的过程中,⾳效的播放时机与游戏当前内容密切相关,⽽且随着场景的变化、剧情的推进,背景⾳乐也需要适时切换,所以恰当地控制⾳乐和⾳效的播放⾮常重要。⾳乐和⾳效的播放、停⽌、切换和⾳量变化等,都需要由脚本控制。

8.2.1 ⽤脚本控制⾳乐播放

        前⽂已经说明了⾳乐的播放⽅法,简单来说只要有Audio Source组件和⾳频资源就可以播放⾳乐了。但通常还需要停⽌背景⾳乐或切换⾳乐等,下⽂⽤⼀个⽰例脚本说明⾳乐的播放⽅法,其步骤如下。
01 创建脚本TestAudio,挂载到任意物体上。
02 创建⾳源物体,默认物体名称为Audio Source。
03 脚本内容如下。

using System.Collections.Generic;
using UnityEngine;
public class TestAudio : MonoBehaviour
{
// 从外部指定声⾳⽚段
public List<AudioClip> clips;
// ⾳源组件
AudioSource audio;
void Start()
{
// 获取⾳源组件
GameObject go = GameObject.Find("Audio Source");
audio = go.GetComponent<AudioSource>();
// 先停⽌播放
audio.Stop();// 不循环
audio.loop = false;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
// 切换到⾳乐0并播放
audio.clip = clips[0];
audio.Play();
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
// 切换到⾳乐1并播放
audio.clip = clips[1];
audio.Play();
}
// 按空格键 暂停/继续
if (Input.GetKeyDown(KeyCode.Space))
{
if (audio.isPlaying)
{
audio.Pause();
}
else
{
audio.UnPause();
}
}
}
}

        脚本的功能是按数字键1播放第⼀段⾳频,按数字键2播放第⼆段⾳频,按空格键可以暂停或继续播放当前⾳频。
        脚本⽤到了⼀个公开的列表字段保存⾳频资源。要为变量clips赋初始值,只需要在编辑器中找到该脚本组件,将Size填为2,然后就可以具体指定两个元素的内容了。这⾥给两个元素指定对应的⾳乐⽚段,如图8-2所⽰。

Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

以上代码演⽰了Audio Source组件的常⽤⽅法,⾳源的属性都可以⽤脚本修改。

8.2.2 添加⾳效实例

        在Unity中使⽤⾳乐和⾳效的⽅法是相同的,但有⼀些关键点需要注意。⾸先,⼀个⾳源同⼀时刻只能播放⼀个⾳频。换句话说,如果有10个⾳效同时播放,就⾄少需要10个⾳源。因此⼀般游戏中的每个⾓⾊都带有⼀个Audio Source组件,如敌⼈会叫喊,主⾓会挥动武器,那么就在每个敌⼈和主⾓的⾝上都挂载⼀个Audio Source组件。如果主⾓的武器⾳效、跳跃⾳效和受伤⾳效可能会同时播放,那么可以在主⾓⾝上挂载3个Audio Source组件,分别对应⼀种⾳效(当然,也可以把
        Audio Source组件放在其他物体上)。其次,添加⾳效的难点在于⾳效播放的时机,⾳效⽐⾓⾊动作稍早或稍晚播放都不好。⽽且根据游戏逻辑,同样的动作有时需要配合⾳效,有时⼜不需要,那么弄清楚播放⾳效的条件也很重要。下⾯以第6.2节的2D动画⼯程为例,给它配上跳跃⾳效。

1. 准备⾳效素材
01 打开第6.2节的2D动画⼯程。
02 在Asset Store中搜索“Sound”就可以找到许多⾳效素材,这⾥选⽤的是⼀个免费的复古⾳效素材包Sound FX - Retro Pack,如图8-3所⽰。
Unity 3D脚本编程与游戏开发【4.1】,Unity脚本编程与C++网络游戏开发,unity脚本与⾳频,游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,脚本与⾳乐、⾳效

03 将⾳效素材包下载并导⼊。导⼊后的⾳效⽂件在Assets/ZeroRare/Audio⽂件夹下,有⾦币、爆炸等多个分类,每个类别⼜有多种⾳效。
2. 给⾓⾊添加⾳源组件
给玩家物体添加Audio Source组件,取消勾选Play On Awake(⽴即播放)选项。
3. 修改脚本代码
思考⼀下,什么时候需要播放跳跃⾳效呢?似乎是按下空格键时,但在空中按下空格键依然会播放跳跃⾳效,就不合适了。也就是说,简单修改输⼊脚本很难合适地播放⾳效。经过思考发现,要想在“真的跳跃时播放⾳效”,就必须要修改⾓⾊控制脚本Platform Character 2D,找到该脚本的第98⾏左右,对刚体施加弹跳⼒的那⼀段进⾏修改,其修改如下。

// If the player should jump...
if (m _ Grounded && jump)
{
// Add a vertical force to the player.
m _ Grounded = false;
m _ Anim.SetBool("Ground", false);
m _ Rigidbody2D.AddForce(new Vector2(0f, m _
JumpForce));
// 获取⾳源组件
AudioSource audio = GetComponent<AudioSource>();
// 动态加载⾳效资源
audio.clip = Resources.Load<AudioClip>("jump _ 01");
audio.Play();
}

        如果在实际跳跃时才播放⾳效,就只能将播放的时机放在这⾥。注意修改代码以后,不能⽴即试验,因为系统会找不到⾳效⽂件jump_01。需要将Zero Rare/Retro SoundEffects/Audio/Jump/jump_01.wav⽂件复制到当前⼯程的Resources⽂件夹下,系统才能正确找到此⽂件。(如果Resources⽂件夹不存在就新建,名称的⼤⼩写和拼写必须完全正确。)上⽂的代码使⽤了动态加载⾳效资源的技术,即Resources.Load⽅法,它对资源路径有着严格要求。当然也可以使⽤前⾯的公开变量的⽅法指定⾳效⽂件,但⾳效资源⽐较适合使⽤动态⽅式加载,之后本书会继续讲解资源管理相关的问题。
⼩提⽰
⽤事件机制避免函数臃肿
        在例⼦中,为了在跳跃时播放⾳效,在跳跃的代码中添加了⼏⾏代码。想象⼀个完整的2D游戏,为了实现多种功能很可能会在跳跃时添加更多代码,例如,不同地形的⾳效变化、踩敌⼈或控制机关等。随着功能越来越多,这⼀⼩段代码会不可避免地膨胀下去。这种局部的代码膨胀不仅影响代码可读性,⽽且影响多⼈协作,还会成为bug滋⽣的温床。
        如果把跳跃看成⼀个特定的事件,完全可以利⽤Unity的事件和消息机制设计代码,让所有“关⼼”跳跃的系统订阅跳跃事件。当跳跃发⽣时,通知这些系统即可,这些系统的相关函数也会被调⽤,并做出相应的处理。这样做的最⼤好处是,让逻辑分散在各个⼦系统,⽽不是所有⼦系统都集中在唯⼀的地⽅,互相影响。Unity的事件机制会在第13章进阶编程技术中进⾏讲解。文章来源地址https://www.toymoban.com/news/detail-858785.html

到了这里,关于Unity 3D脚本编程与游戏开发【4.1】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 3D脚本编程与游戏开发(2.2)

    3.2.7 修改物理材质         每个物体都有着不同的摩擦⼒。光滑的冰⾯摩擦⼒很⼩,⽽地毯表⾯的摩擦⼒则很⼤。另外每种材料也有着不同的弹性,橡⽪表⾯的弹性⼤,硬质地⾯的弹性⼩。在Unity中这些现象都符合⽇常的理念。         虽然从原理上讲,物体的摩擦⼒

    2024年02月04日
    浏览(40)
  • Unity 3D脚本编程与游戏开发【4.2】

    8.2.3 ⾳频管理器         在实际游戏开发中,⾳效既是⼀个相对独⽴的部分,⼜与其他游戏逻辑密切关联。也就是说,与⾳效相关的代码会插⼊很多细节代码中。         ⽽且在⾳效⾮常丰富的情况下,如果每⼀个游戏模块都单独播放⾳效,那么可能会带来⼀些问题。

    2024年04月24日
    浏览(43)
  • Unity 3D脚本编程与游戏开发【3.8】

    6.4.5 动画层         图6-42显⽰了动画层设置窗⼝。在动画状态机⾥可以添加很多层,层之间可以是覆盖关系也可以是叠加关系,当然也可以随时屏蔽⼀些层、启⽤另⼀些层。 每⼀个动画层可以有单独的设置,其选项解释如下。 ①Weight(权重),本层对总体动画效果的影

    2024年04月16日
    浏览(47)
  • Unity 3D脚本编程与游戏开发(2.8)

    5.1.2 矩形变换(Rect Transform)组件         如果选中界⾯上的控件,读者会发现每个物体并不带有基本的Transform组件,取⽽代之的是Rect Transform(矩形变换)组件。其实Rect Transform组件是Transform组件的⼦类,因此并不违反“每个物体必须有且只有⼀个Transform组件”的规定。

    2024年02月03日
    浏览(36)
  • Unity 3D脚本编程与游戏开发(3.2)

    5.3.4 制作背包界⾯         背包界⾯是此实例中的重点,因为它的屏幕适配⽐较有代表性。当屏幕⽐较“瘦⾼”时,道具列表中能显⽰更多道具项,⽽屏幕⽐较“矮胖”时,显⽰的道具项会变少。但这些都不影响玩家通过下拉滑动查看所有道具,如图5-37所⽰。       

    2024年04月12日
    浏览(57)
  • Unity 3D脚本编程与游戏开发(3.5)

    6.2.8 总结和拓展         本节利⽤Unity官⽅素材,以有限的篇幅解释了动画状态机的原理,以及动画制作中最基本但最重要的步骤。总的来看,⽬前的动画只做了4种状态——站⽴、⾛、跑和跳跃,还缺少下蹲、下蹲移动和落地缓冲等动作。好在这些动作只是对现有动作的

    2024年04月10日
    浏览(50)
  • Unity 3D脚本编程与游戏开发【3.7】

            在这个⾓⾊控制脚本中,可以看到很多新奇的写法。关键是,为什么要把移动量转化为转⾝量和前进量呢?要理解这个问题,⼀定要多进⾏游戏测试,体会转⾝与输⼊的关系。         当⾓⾊⾯朝前,输⼊朝后时,⾓⾊的前进量为0,转⾝量达到最⼤;⽽当⾓⾊

    2024年04月15日
    浏览(39)
  • Unity 3D游戏开发+脚本编程完整指南:Unity脚本概览-控制物体的运动

    教程相关资源 Unity 3D游戏开发+脚本编程完整指南(工程文件+PPT).zip Unity 脚本概览 脚本编写并不困难,但是如果直接从细节开始讲起,会让 读者难以看到脚本编程的全貌。因此本章不急于阐述脚本编写 的细节,只介绍简单的修改物体位置、处理用户输入和检测碰 撞的方法

    2024年02月21日
    浏览(71)
  • Unity 3D游戏开发+脚本编程完整指南:制作第一个游戏:3D滚球跑酷

    教程相关资源 Unity 3D游戏开发+脚本编程完整指南(工程文件+PPT).zip 本节利用前面的知识来实现第一个较为完整的小游戏,如 图 1-21 所示。 图1-21 3D滚球跑酷游戏完成效果 1. 功能点分析 游戏中的小球会以恒定速度向前移动,而玩家控制着小球 左右移动来躲避跑道中的黄色障

    2024年02月21日
    浏览(49)
  • 游戏引擎支持脚本编程有啥好处

    很多游戏引擎都支持脚本编程。Unity、Unreal Engine、CryEngine等大型游戏引擎都支持使用脚本编写游戏逻辑和功能。脚本编程通常使用C#、Lua或Python等编程语言,并且可以与游戏引擎的API进行交互来控制游戏对象、设置变量、执行行为等。使用脚本编程,游戏开发者可以更加灵活

    2024年02月03日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包