1、课程介绍与Unity3D 环境搭建
Unity3D 是什么:一个软件;一个游戏开发引擎(工具) ; Unity3D Unity U3D
Unity3D 能做什么:游戏开发(手游);(页游);(VR AR 仿真)
优势:学习成本较低,开发效率高; 跨平台运行,一次开发,多平台发布(Windows、Andriod、IOS、Mac、Web)
为什么要学习:相对于其他编程,从业人数少,入门门槛高;(其他编程Web、IOS、Andriod)
所需基础:
- 编程语言基础:C#(语法基础、面向对象)
- 英语基础
- 数学基础
软件下载安装:官网下载;注册机注册;账号登录
软件安装目录结构:
- Editor——Unity3D软件(引擎 )核心文件
- MonoDevelop 一款内置的脚本编辑软件
2、 游戏场景基本操作
项目文件夹结构:
- Assets:资源文件夹,保存游戏中所有资源
- Library:库文件夹,保存当前项目所需的库文件
- ProjectSettings:项目设置文件夹,保存项目的设置信息
- Temp:临时文件夹,保存项目的临时数据
3、游戏场景制作3D模型
Cube是长宽高都为1米的参照物
世界坐标系:理解为现实生活中的东南西北上下
- X(红色):右边(东)
- Y(绿色):上边
- Z(蓝色):前边(南)
物体自身 坐标系
世界坐标观察模式
- Persp:透视模式,近大远小。
- ISO:正交模式,远近一样大。
4、3D模型美化之材质球
材质球:Material,材质:物体的质地,物体看起来是什么做的
贴图:Texture, 就是“普通的图片”,用于材质球的显示
shader:着色器;通过着色器来编辑材质球的效果。
会写Shader的人才是真正的高手
shift键 多选
5、3D模型重用之预制体
父子关系
空物体(Create Empty):类似电脑文件夹
预制体(Prefab):预先准备好的物体,可以重复使用和利用
创建预制体
直接将Hierarchy 面板中的游戏物体拖拽到Project 面板的Assets 中,即
可创建一个预制体。
预制体文件的后缀是“.prefab”。预制体与非预制体的区别
①非预制体的颜色是白色,预制体颜色是蓝色;
②在Inspector 面板,非预制体是图标颜色是“红绿蓝”三色的,预制体的图
标是蓝色的。
③在Inspector 面板,预制体比非预制体多了一个“Prefab 选项”。
- 预制体的好处
编辑其中的一个,“Apply”一下,所有的全部改变。
6、基本组件之摄像机
场景美化,创建材质球、使用贴图资源、Tiling(使贴图分块显示)
摄像机(Camera)常用操作
摄像机基本操作
①:在Hierarchy 面板上选中摄像机,Scene 视图会出现预览窗口。
②:根据轴向移动摄像机的位置,旋转摄像机的角度。
③:GameObject–>Align With View(Ctrl + Shift + F)对其视图。
让摄像机对齐到当前视图,使Scene 与Game 中的观看角度和位置一致。
④:创建摄像机:Hierarchy 面板右键–>Camera。摄像机相关属性
1.Clear Flags[清除标记]
Skybox:天空盒
Solid Color:固定颜色(纯色)
2.Background[背景颜色]
当Clear Flags 为Solid Color 时,场景的背景颜色。
3.Projection[投影]
Perspective:透视模式,3D 游戏使用。
Orthographic:正交模式,2D 游戏使用。
4.Clipping Planes[切割面]
Near:近平面,摄像机最近能看到的东西。
Far:远平 面,摄像机最远能看到的东西。
7、基本组件之灯光
灯光(light):用于照亮我们的游戏世界,使场景中产生阴影,增加真实感和立体感
隐藏与显示游戏物体:物体Inspector 面板上“图标”右侧的复选框。
- 方向光(Directional Light):用于模拟太阳,模拟自然光;属性:Type(类型)、Color(颜色)、Intensity(强度)、Shadow Type(阴影类型
- 点光源(Point Light):用于模拟电灯泡的照射效果
- 聚光灯(Spot Light):用于模拟聚光灯照射效果
8、组件与脚本
Transform组件
组件:Component,游戏物体的组成零件。Unity3D就是一款“组件式”游戏开发引擎,使用各种各样的组件拼装出我们游戏物体,最终拼接出一款完整的游戏。
Unity3D这款引擎提供了很多种类的组件,我们后期就需要学习这些组件的使用和特性,以及他们能实现的功能和效果。
Transform组件:变换组件。所有的游戏物体都具备的一个组件,也是最基础的一个组件,用于存储游戏物体的基本信息。Position(位置)、Rotation(旋转)、Scale(缩放)
C#脚本
- 何为脚本:脚本(Script)——用于控制游戏的逻辑(C#语言)
脚本代码简介:Start()方法,当游戏运行起来,就会马上执行,且只执行一次;Update()方法,循环调用,每帧调用一次,一秒钟大概执行60次。我们的游戏画面是在不停的刷新的,每刷新一次,就是一帧。
输出调试:Debug.Log();
- 这两个方法都是Unity3D内部的事件方法,不需要我们人工调用,系统会自动调用和管理这些“事件方法”
使用脚本
- 直接将脚本拖拽到Hierarchy 面板上物体身上;
- 直接将脚本游戏物体的Inspector 面板上;
- 运行游戏,脚本就会执行。
Console 面板
- Console:控制台。用于输出显示游戏运行过程中的调试信息。
功能按钮: - Clear:清除功能,清除控制台中的信息;
- Collapase:折叠功能,将相同的内容合并到一条显示,更新后面的数字;
- Clear on Play:运行时清除之前的内容;
9、鼠标键盘输入
获取键盘输入
相关代码:
Input.GetKey();//按下某键后持续返回true;
Input.GetKeyDown();//按下某键的一瞬间,返回true
Input.GetKeyUp();//抬起某键的一瞬间,返回true
//返回值:bool类型;参数:KeyCode枚举(Enum);KeyCode:键码,保存了物理键盘按键“索引码”
获取鼠标输入
1、相关代码
Input.GetMouseButton(); //按下某键后持续返回true
Input.GetMouseButtonDown(); //按下某键的一瞬间,返回true
Input.GetMouseButtonUp();// 抬起某键的一瞬间,返回true
返回值:bool类型
参数:鼠标按键索引值,0->左键、1->右键、2->中键
10、使用变换组件移动游戏物体
变换组件移动物体
相关方法:
gameObject.GetComponent( );获取相应组件的引用;查找当前游戏物体身上的某个组件,然后保存它的引用。
Transform.Translate(Vector3,Space):移动物体的位置
游戏物体往某个方向移动;以自身坐标系或世界坐标系
相关参数:
Vector3[struct]:三维向量。向量,可以表示一个方向,也可以表示一个位置
Space[enum]:空间,Space.Self:表示物体自身的坐标系;Space.World:表示物体所在的世界坐标系
11、物理组件之刚体
刚体组件简介
刚体简介
刚体:Rigidbody,属于物理类组件。
作用:添加了刚体组件的游戏物体,就有了重力,就会做自由落体运动。也就意
味着可以像现实中的物体一样运动。使用刚体移动物体
相关方法
Rigidbody.MovePosition(Vector3):使用刚体移动物体的位置。
使用刚体移动物体,物体是根据世界坐标系的方向移动的。
使用刚体移动物体,物体会触发物理相关的事件。参数
MovePosition 中的Vector3 要使用“当前位置”+ 方向的方式。
Transform.Position:属性当前物体的位置。
12、物理组件之碰撞体
碰撞体简介
碰撞体
使用刚体移动的物体,与场景中其他的物体相碰撞:
其实是碰撞的目标物体的“碰撞体”组件,也就是Collider。
另外和目标物体碰撞的,是我们移动的物体的自身的“碰撞体”组件。
碰撞体可以理解为我们的模型的“外骨骼”。
模型只要加了刚体,就必须要加碰撞体,否则没有意义。Box Collider
- Sphere Collider
- Capsule Collider
- Mesh Collider
13、刚体常用方法介绍
AddForce()
- 作用
给刚体添加一个力,让刚体按“世界坐标系”进行运动。 代码
Rigidbody.AddForce(Vector3,ForceMode);
Vector3:力的方向和大小;
ForceMode:力的模式[enum 类型]。ForceMode 参数
类型为枚举类型,以什么样的方式添加力给刚体。
枚举值说明
Acceleration:[.k.sel..re..n](加速度);
Force:(力)这种模式通常用于设置真实的物理;
Impulse:(冲击力)这种模式通常用于瞬间发生的力;
VelocityChange:(速度的变化);
- 作用
AddRelativeForce()
- 作用
给刚体添加一个力,让刚体按“自身坐标系”进行运动。 - 代码
Rigidbody.AddRelativeForce(Vector3,ForceMode);
Vector3:力的方向和大小;
ForceMode:力的模式[enum 类型]。
- 作用
FixedUpdate()
固定更新方法。
所有和物理相关的操作,代码都要写在FixedUpdate()方法体内。
固定更新的时间间隔是0.02 秒,1 秒执行50 次。
Edit–>Project Settings–>Time 面板中的Fixed Timestep 参数设置。
注意:Update()方法是每帧执行一次。
画面每渲染完一次,就是一帧,每帧的时间是不固定的。
在Update()方法中执行物理操作,会出现卡顿的情况。
14、刚体碰撞事件监测与处理
碰撞事件简介
- 何为碰撞事件?
当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件。
注:目标物体必须带有Collider 组件。
碰撞Collision
比如,一款射击类游戏,我们发射出了子弹,子弹是一个由刚体控制运动的物体,
子弹射中了敌人,我们如何监测到这个碰撞??
- 碰撞事件监测方法
- OnCollisionEnter(Collision)
当碰撞开始时调用,只会调用该方法一次。 - OnCollisionExit(Collision)
当碰撞结束时调用,只会调用该方法一次。 - OnCollisionStay(Collision)
当碰撞进行中时,会持续调用该方法。 - Collision 参数
碰撞,一个类。作用:用于传递碰撞信息。
Collision.gameObject 属性,与当前物体碰撞的物体的引用。
gameObject.name 属性,当前物体的名字。
- OnCollisionEnter(Collision)
15、刚体触发事件监测与处理
1.触发事件简介
1.触发器
将碰撞体组件属性面板上的“Is Trigger”选项选中,当前的游戏物体的碰撞体
就变成了触发器。
移动的刚体物体会穿透碰撞体勾选了“Is Trigger”的物体。
2.触发事件
当一个用刚体控制的物体进入到另外一个物体的触发器范围内,就是触发事件。
触发用途:不与目标物体发生直接的碰撞(接触),而是只要进入目标物体的“触
发范围”就能执行某些特定操作。
2.触发事件监测方法
1.OnTriggerEnter(Collider)
当进入触发范围时开始时调用,只会调用该方法一次。
2.OnTriggerExit(Collider)
当离开触发范围时开始调用,只会调用该方法一次。
3.OnTriggerStay(Collider)
在触发范围内,会持续调用该方法。
4.Collider 参数
碰撞体,一个类。作用:用于传递触发信息。
Collider.gameObject 属性,进入触发范围内的目标物体的引用。
gameObject.name 属性,当前物体的名字。
16、网格组件之网格过滤器和渲染器
1.网格过滤器组件
1.简介
网格过滤器:Mesh Filter。
该组件只有一个“Mesh”属性,用于设置当前游戏物体使用哪个模型进行展示。
Mesh:网格,也就是模型。
2.网格渲染器组件
1.简介
网格渲染器:Mesh Renderer。
该组件用于“渲染”显示模型。如果没有该组件,模型就不会显示。
2.属性
Cast Shadows [投射阴影]
On:开启阴影显示
Off:关闭阴影显示
Receive Shadows [接收阴影]
选中就是接收
不选中就是不接收
Materials [材质球]
用于设置用哪个材质球渲染当前的模型(Mesh)。
我们拖拽到游戏物体身上的材质球,其实就是赋予给了这个组件的这个属性上。