关于游戏组第三次培训— 1.unity基础— 1>界面的基本操作
工具栏:提供了常用工具的快捷访问方式 Scene视图(场景视图):用于设置场景以及放置游戏对象,是构造游戏场景的地方 Game视图(游戏视图):由场景中相机所渲染的游戏画面,是游戏发布后玩家所能看到的内容。 Hierarchy视图(层级视图):用于显示当前游戏场景中所有游戏对象的层级关系 Project视图(项目视图):整个工程中所有可用的资源,例如模型、脚本等。 Inspector视图(检视视图):用于显示当前所选择游戏对象的相关属性与信息。
游戏对象(GameObject):对于场景中所有的物体我们都可以称之为游戏对象,如:灯光、粒子、模型、UI等。 Hierarchy栏内创建的都是属于游戏对象(由多个组件构成,可以简单得理解为游戏对象的属性)
一: 屏幕左上角手那一栏—(实现选择游戏对象的位移,旋转以及缩放操作等) 分别是:手形工具,移动工具,旋转工具,缩放工具,矩形工具,移动,旋转,缩放选定对象
Q:选中手形工具,可以在Scene视图中按住鼠标左键来平移整个场景。当选中了手形工具后,在Scene中可以看到一个小手的标记。当按住左键就可以平移整个场景了。 在Scene视图中使用按住alt+鼠标左键(Scene中会出现眼睛标记)可以旋转当前场景视角。 在Scene视图中按住鼠标右键会进入飞行浏览的模式(在Scene视图中出现小眼睛标记)。这时就可以让用户以第一视角在Scene视图进行场景漫游,类似于第一人称射击游戏。可以通过w、s、a、d、q、e键来进行前后左右上下的移动(如果再按shift会使移动加速。),也可以通过移动鼠标来旋转视角。 和按alt不一样,不一样在哪里自己感觉
W:选中移动工具后,在Scene视图中选择一个游戏对象,会发现游戏对象中会出现三个方向上的箭头(即三维坐标轴,红色为x轴,蓝色为y轴,绿色为z轴),按住相应的轴,可以在轴所指向的方向上进行相应的移动。除了这个,也可以通过在Inspector视图中直接修改所选游戏对象的坐标值。(按住ctrl键,并用鼠标按住箭头进行移动,发现会沿着固定值进行移动)
E:选中旋转工具,在Scene视图中选中游戏对象,可以按任意角度进行旋转
R:选中缩放工具,在Scene视图中可以缩放选中的游戏对象
T:选中矩形工具,在Scene视图中,允许用户查看和编辑2D或3D游戏对象的矩形手柄。对于2D游戏对象,可以按住shift进行等比例缩放。一般用于操作2D平面。
最后一个的话相当于前面的移动,旋转,缩放的综合体
一些小技巧:当选中对象后按F(或者在Hierarchy视图中双击相应的对象)可快速聚焦到这个对象前
二: 紧跟在他们后面的工具是变换辅助工具 center:显示游戏对象的轴心参考点 local:显示物体的坐标
点击center会切换pivot Center:以选中游戏对象的轴心作为参考点。 Pivot:以选中对象的支点作为参考点
如图所示,当以Center进行旋转时,是以游戏对象的轴心作为参考点,当以Pivot进行旋转时,使用选中对象的支点作为参考点的。(Pivot在例如补鼠夹、门中可以用到)
Local:为选中游戏对象使用自身坐标 Global:为选中游戏对象使用世界坐标
关于暂停后的键位:逐帧播放,点击会逐帧预览游戏,方便找出游戏中的问题
三: 右上角的Layers:Everything 下拉列表中,显示状态为这个图标的物体将被显示在scene中
layout:切换视图的布局,也可以自定义布局
四:场景视图控制栏 分别是实体模式,2d,3d切换,场景光照,场景音效,场景特效,Gizmos下拉菜单,搜索栏
实体模式为用户提供多种场景渲染模式,默认选项是Shaded,通过点击它可以切换场景的显示模式。用户使用Shaded模式只是改变场景物体在Scene视图中显示方式,并不会改变游戏最终的显示方式。通过选择视图模式,只改变了Scene视图中显示模式,Game视图中并没有受到影响。
场景光照用于切换场景中的灯光的打开与关闭
场景音效其用于切换声音的开关
场景特效用于切换天空盒、雾效、光晕、动画材料、后处理、粒子系统的显示和隐藏
通过点开Gizmos下拉菜单可以选择显示或隐藏场景中用到的光源、声音、摄像机等对象的图标
搜索栏用于查找物体对象。当输入相应的物体对象名时,找到的物体会以带颜色方式显示。搜索的结果也会在Hierarchy视图中显示
过来这个小标,是Scene Gizmo工具,其上的每个箭头都可以改变场景的视角。如下图所示。Top(顶视图)、Bottom(底视图)、Front(前视图)、Back(后视图)等 通过鼠标右键点击Gizmo工具或者下方文字,可以在Isometric Mode(等角投影视角)和Perspective Mode(透视模式之间切换)。 Isometric Mode模式下(Gizmo工具中简写为Iso)无透视效果,物体不会随着距离的调整而缩小,主要用于等距场景效果、GUI、2D游戏中。Perspective Mode模式下(Gizmo工具中简写为Persp)会模拟一个真实的三维空间,随着距离的调整物体会有近大远小的视觉效果。
如下图所示,右键进入飞行相机,通过wsad等键来进行远近的操控。发现Iso模式和Persp模式确实会有不同的效果
四.Game视图控制条 用于控制Game视图中显示的属性 分别是摄像机列表,视图显示比例,缩放屏幕,运行时最大化,静音开关,显示游戏运行状态,Gizmos下拉列
摄像机列表:当场景中有多个摄影机时,可以单击此下拉列表选择相应的相机
stats显示运行状态:点击它,可以显示当前运行场景的渲染速度、Draw Call的数量、帧率、贴图占用的内存等参数
关于Gizoms下拉列表,点击它,可以在下拉列表中选择显示或隐藏场景中的灯光、声音、相机等游戏对象
五.Project(项目)视图 是整个项目工程的资源总汇,保存了游戏场景中用到的脚本,材质,字体,贴图,外部导入的网络模型等资源每个Unity项目文件夹都会包含一个Assets文件夹,它是用来存放用户所创建的对象和导入资源的,并且这些以文件夹层级关系来进行分门别类的。我们可以选中文件右击进行create或者import等操作。关于import是导入一些包,比如模型,地形,地图等等,以后在合作做项目的时候就可能会需要用到,比如美工组的同学为你做了一个模型,然后发给你了,就可以在这里导入。
注意:应避免在Unity编辑器外部移动或重命名项目资源文件,如需要移动或删除某个资源,应该在Project视图中进行,否则会破坏资源文件和Unity工程之间的关联,导致工程出错。如下图所示,创造或导入一个新的素材,会自动为素材生成一个对应的.meta结尾的文件,这个文件会记录这个素材的一些信息。当删除或移动时可以在Project视图中进行操作。
上周培训说到的Prefabs可以用来为游戏对象创造预设模板,这样就可以用来创建多个和模板属性一样的对象了。例如当有几十个相同的游戏对象时,我们可能要改他们的方向,但一个个来改就太麻烦了,这时我们可以使用Prefabs
六.Hierarchy(层级)视图 用于显示当前场景中每个游戏对象。在Hierarchy视图中提供了Parenting(父子化)关系,通过为游戏对象建立Parenting关系,可以更好的移动和编辑游戏对象。如图所示,当新建了游戏对象(正方体和球体)并建立父子关系,当在Hierarchy视图中对父对象进行操作,也会影响到父对象下的子对象。
七.Inspector(检视)视图 Inspector视图用于显示游戏场景中当前所选择游戏对象的详细信息和属性设置,包括游戏对象的名称、标签、位置坐标、旋转角度、缩放、组件等信息。如下图所示Transform:可以通过此组件对游戏对象的Position(位置)、Rotation(旋转)和Scale(缩放)这个三个属性进行修改。Transform是个基础组件,每个游戏对象都有这个组件 我们可以通过鼠标右击各个组件进行一些操作。如图所示右击Tansform组件可以进行Reset、Copy等操作
Mesh Collider组件:Mesh碰撞体,为了防止物体被穿透,需要给对象添加碰撞体
Materials:设置游戏对象的颜色、贴图等信息 有很多需要用的组件依靠我们自己来添加,可以在Inspector视图中点击Add Component添加组件 我们也可以拖动组件位置,这很重要。通过移动组件位置,可以决定这个游戏对象在运行时组件的加载顺序,尤其是代码脚本相关的
2> 生命周期
生命周期是Unity开发过程中的核心思想,是技术进阶过程中必须深入了解的重点 第一次培训里讲了类,对象以及引用是什么东西,也不知道大家有没有预习复习或者深究…
简单说明一下:类也就是class,比如说人类
对象:不是那个对象,这么说,比如在人类里面,有不同的个体,我可以来new一个,创建一个对象实例,用new+类名+(),就创建了一个对象实例,创建的这个对象实例是引用类型
引用:自然就是用上面创建的那个类型
Awake(唤醒):顾名思义,只会被调用一次,因为是唤醒,所以最先执行,在Start方法之前被调用(主要用于字段值的初始化工作,禁用脚本,创建游戏对象,或者 Resources.Load(Prefab) 对象)
Start:大家在打开c#的时候应该都会看到,是开始事件,只执行一次,在Update方法执行前执行, 主要用于程序UI的初始化操作,比如获取游戏对象或者组件
Update:每一帧执行的,监听用户输入,播放动画,当机器忙或者性能差的时候,他会停止执行,会产生停顿的感觉,例如一个人本来在1米的位置,突然到了5米的位置上,产生了跳帧,而下面的FixedUpdate方法则相反!会一米一米的去执行!(自己调试发现,Update是先于OnGUI执行的,且执行一次Update之后,会执行两次OnGUI)
FixedUpdate:不管当前机器忙不忙,都会保证每一帧执行一次!避免跳帧!固定更新。固定更新常用于移动模型等操作。
LateUpdate:先执行Update,然后才去执行lateUpdate(Update方法执行完,必定接着执行LateUpdate,而Update和FixedUpdate方法的执行顺序不确定,而且有时候FIxedUpdate执行了多帧,而Update却只执行了一帧,这就是因为跳帧的缘故造成的(取决于你的机器性能)!),如果现在有100个脚本,分别有100个 Update()函数,其中只有一个LateUpdate,那么在同一帧中,等待100个Update()执行完后,才执行这一个LateUpdate()。
OnGUI(GUI渲染):执行次数是Update的两倍(在这里面进行GUI的绘制,且GUI是每帧擦除重绘的!仅仅只是绘制!没有生命周期的概念!所有关于绘制GUI的代码,都要直接或者间接地写到OnGUI方法中!)
OnDestroy:当前脚本销毁时调用
OnEnable:脚本可用时被调用、如果脚本是不可用的,将不会被调用!
2.unity更多内容 1>UGUI 乍一看很陌生,我们回忆一下上周所讲的roll a ball,里面需要做的一个功能是在画面左上角显示自己的得分,当时是怎么做的呢? 在Hierarchy内新建一UI–>image,然后在画布canvas里面进行操作。
Source Image:源图片。可以选择各种形式的图片放入,也可以选择精灵图Sprite。 Color:设置Image的颜色。 Material:设置Image的材质。比如你想让图片具有金属的光泽,拖入金属材质就好。 Raycast Target:是否作为射线检测的目标。有的UI是放置在游戏物体上而不是渲染到整个屏幕空间上的。因此如果你希望该Image可以给射线检测到,就勾选此选项
然后记得还创建了那个开始游戏的按钮来着button 点击Button,看Button的Inspector面板,可以看见,Button上还挂载了一个Image组件。说明Button其实是一个Image,但是其上有Button组件,因此具备了按钮的属性,可以被点击。因此创建Button还有另外一种方式:创建一个Image,然后为其添加Button组件即可。 所有button参数需要运行游戏才会产生效果
Interactable :是否可以交互。取消勾选后Button就不能点击了,设置颜色也不会生效。 Transition :Button的过渡效果。是一个单选框,参数依次为无、着色过渡、精灵图调换过渡、动画过渡。 Target Graphic:该组件的作用对象。UI控件实现效果的对象。 Normal Color:正常颜色。鼠标不在Button上时的颜色。 Highlighted Color:高亮颜色。鼠标在Button上时的颜色。 Pressed Color:按压颜色。鼠标点击Button时的颜色,松开后恢复。 Selected Color:被选颜色。鼠标点击Button时的颜色,松开后保持不变,除非点击Button外的界面。 Disabled Color:禁用颜色。禁用Button(Script)后的颜色。 Color Multiplier:颜色倍数。 Navigation :控件间导航。这个不用太了解。 Visualize:是否可视。点击后在Scene中显示出每个UI控件之间的顺序。 On Click() :给按钮添加响应事件。 Fade Duration:淡入淡出时间。
然后还是上周的内容,给button加点击事件,用到的代码还记得不…先继续吧…在Hierarchy面板中创建一个空物体GameObject,然后在Project面板下创建一个新的C#脚本,命名为OnClickButton。将OnClickButton添加到GameObject上。 using System.Collections; using System.Collections.Generic; using UnityEngine;
public class OnClickButton : MonoBehaviour {
public void Click(int _printCount)
{
print("you click the button.");
for(int i = 0; i < _printCount; ++i)
{
print("yes!");
}
}
}
脚本创建好后,返回到Unity界面。在Button的Inspector面板最下方找到On Click(),点击右下角的加号,将GameObject拖入作为引用。然后就可以点击右边的No Function -> OnClickButton -> Click(int),从而将该方法作为为Button按下后调用的方法。 选定方法后,就可以为方法设定传入的参数,这里要注意的是,Button按钮只能触发只含一个参数的方法,参数多了就无法指定参数了。将传入的参数设定为5 最后,运行游戏,点击Button,即可在Console面板看到"Yes"被打印了5次
2>Animation(动画系统) 1.动画系统配置:创建游戏对象并添加Animation组件,然后将动画文件拖入组件;进入动画文件的Debug属性面板,选中Legacy属性
Legacy是遗产的意思,也就是传统的通过Animation组件来播放Animation Clip的做法,(至于animator(动画状态机)可能现在对大家来说还是有点小难懂的,想搞的话就去找教程,我可以介绍一下它的功能,就是动作的设置,就比如,玩游戏时候的攻击动作,死亡动作,蹲,跳等等这些,都是在动画状态机里面实现的,至于如何实现…除了在状态机里面把一些动作串起来,然后需要写代码,设置了触发这些动作的对应按键或者条件。) 如果使用Animation组件来播放Animation Clip,则必须把Legacy勾选上,不过这种方式已经是过时的做法,推荐使用Animator来播放Animation Clip。
选中游戏对象,打开Animation编辑窗口(注意不要打开Animator) 添加动画变化属性(添加position属性) 需要改关键帧的属性值
2.代码控制动画 Play(“ation 1” );,播放动画,传入参数为动画名字
Stop(“ation 1”) ,停止动画,传入参数为动画名字
CrossFade(“ation 1”, 0.5f); ,有过度的切换动画,传入参数(动画名字,过度时间) using System.Collections; using System.Collections.Generic; using UnityEngine;
public class animation : MonoBehaviour { // Start is called before the first frame update
Animation m_anim;
private float scaleW = 1.0f; //宽度缩放比
private float scaleH = 1.0f; //高度缩放比
void Start()
{
//获取动画组件
m_anim = GetComponent<Animation>();
if (!m_anim.isPlaying)
{
//如果没有动画播放,默认播放New Animation 1 动画
m_anim.CrossFade("ation 1", 0.2f);
}
}
// Update is called once per frame
void Update()
{
scaleW = (float)Screen.width / 800; //计算宽度缩放比
scaleH = (float)Screen.height / 480; //计算高度缩放比
}
void OnGUI()
{
GUI.skin.button.fontSize = (int)(10 * scaleW); //调整按钮字体大小
if(GUI.Button(new Rect(70*scaleW,50*scaleH,90*scaleW,40*scaleH),"action 1"))
{
m_anim.Play("action 1");
}
if(GUI.Button(new Rect(70 * scaleW, 110 * scaleH, 90 * scaleW, 40 * scaleH),"imation"))
{
m_anim.Play("imation");
}
if (GUI.Button(new Rect(70 * scaleW, 170 * scaleH, 90 * scaleW, 40 * scaleH), "有过度播放 action 1"))
{
m_anim.CrossFade("action 1",0.5f);
}
if (GUI.Button(new Rect(70 * scaleW, 230 * scaleH, 90 * scaleW, 40 * scaleH), "有过度播放 imation"))
{
m_anim.CrossFade("imation",0.5f);
}
}
}
3>Audio-AudioClip -AudioSource -AudioMixer
1.AudioSource是音频组件,用于播放音频剪辑也就是AudioClip 2. 组件属性 (1)AudioClip(音频剪辑):指定播放的音频文件。 (2)Output(音频输出):可以输出到音频监听器(AudioListener)或者(AudioMixer)。当设置为空时,即代表输出到 AudioListener,而设置到AudioMixer时需要指定具体的AudioMixer。 (3)Mute(是否静音):主要是针对游戏中的音效,优势在于不会卸载声音数据,可以做到及时播放,音效一般比较多、占用内存小,使用静音可以让画面快速响应,且可以立刻恢复当前音效。 (4)Bypass Effects(音源滤波开关):作用在当前音源的音频滤波器的开关。 (5)Bypass Listener Effects(监听器滤波开关):作用在当前监听器的音频滤波器的开关。 (6)Bypass Reverb Zones(回音混淆开关):勾选不执行回音混淆的效果。 (7)Play On Awake(启动播放开关):勾选就会在绑定组件的GameObject加载并启用时立刻播放音频。 (8)Loop(循环播放开关):音频播放结束自动循环。 (9)Priority(播放优先级):决定音源在场景中存在的所有音源中的播放优先级。 (10)Volume(音量):调节音量的大小。 (11)Pitch(音调):播放音频时速度的变化量 ,默认值1,表示正常的播放速度。(当<1时,慢速播放;当>1时,快速播放。速度越快,音调越高。) (12)Stereo Pan(声道占比) (13)Spatial Blend(空间混合):指定音源是2D音源(0)、3D音源(1)或者是二者插值的复合音源。 (14)Reverb Zone Mix(回音混合) (15)3D Sound Settings(3D音频设置)
要注意的: 1.音乐播放:同时只能播放一个,如果要播放其他音乐就要停止当前音乐 2.音效播放:可以同时播放多个,相互之间不会影响 using System.Collections; using System.Collections.Generic; using UnityEngine;
public class audio : MonoBehaviour { // <一> 音乐播放 public AudioSource MusicPlay; //音乐播放 public void PlayMusic(string name) { if (MusicPlay.isPlaying == false) { AudioClip clip = Resources.Load(name); //加载播放的音乐 MusicPlay.clip = clip; MusicPlay.Play(); MusicPlay.Stop(); MusicPlay.Pause(); } }
// <二> 音效播放
public AudioSource SoundPlay; //音效播放器
//播放音效
public void PlaySound(string name)
{
AudioClip clip = Resources.Load<AudioClip>(name);
SoundPlay.clip = clip;
SoundPlay.PlayOneShot(clip);
}
}
4>Terrain 地形编辑器 1.第一个小块儿:创建相邻地形 2.第二个(最重要): 其内功能第一个是用来升高或者降低地形,应用很多,可以用来构建山峰,丘陵,盆地等等 第二个功能就像它的英文名字一样直白,打个洞,注意控制好大小… 第三个,绘制纹理 第四个,设置高度 第五个,设置顺滑度 第六个,固定高度冲压地形
然后就是在使用过程中可以调整笔刷的类型,从而制造出一些别致的…小东西 笔刷下面的这个设置,第一栏很明显是笔刷的大小,第二栏是不透明度,有的选项中还可以进一步设置一些属性,按住shift操作是相反的属性
再往下看这个按钮 既然是paint tree,把她理解成一个种树工具就好了,点击下面的Edit trees 那儿,就可以把你电脑里面有的树导入进来然后应用上去,然后前面那个Mass Place tress就是可以大面积均匀种树。 看下面的数据,里面的值可以自己设定,翻译一下就是必刷的大小,种树的密集程度,树的高度
第三个的paint details就比较随意了,为什么这么说呢,以为可以随意添加一些自己电脑里面存在的模型(比如:草,花等),使用方法和之前的种树是一个道理的
最后一个按钮的话,可以在里面设置一些属性然后大家就可以搭建一个简单场景,至于素材可以在unity官方商店找
5>天空盒 简单介绍一下,相信大家第一次打开unity的时候,看着这个场景,第一反应应该是好拉胯,好简陋,天空盒顾名思义就是给他变个天,像啥好看的蓝天白云,也是从unity官方商店之类的素材网找,都基本上可以找到适合自己使用的素材。
6>ParticleSystem(粒子系统) 可以做一些烟花特效,闪烁特效,烟雾特效,开火效果,下雪下雨等,要是有想做fps的可以自行了解了解
|