《unity3d学习笔记》--擅码网unity视频教程
一、新手入门
1、unity3d环境搭建
unity是游戏开发引擎。
unity3d能做什么:
游戏开发(手游)
游戏开发(页游)
VR、AR、仿真
学习unity3d需要哪些基础:
C#(硬性)--60%
英语(软性)--30%
数学(软性)--10%
unity3d官网:https://unity3d.com/cn
2、游戏场景的基本操作
项目的存储结构:
Assets:资源文件夹
Library:库文件夹
ProjectSettings:项目设置文件夹
Temp:临时文件夹
Assets文件夹结构:
Scenes:场景
Materials:材质球
Textures:贴图
Prefabs:预设体
Scripts:脚本
鼠标功能:
左键:选中物体
中键:平移场景/缩放场景
右键:旋转场景
alt+鼠标左键:旋转场景
alt+鼠标右键:缩放场景
工具栏操作:平移场景、移动物体、旋转物体、缩放物体
工具栏快捷键对应:q w e r
一个游戏项目由多个场景组成,而每个场景有多个游戏物体组成。
3、游戏场景制作3D模型
尺寸:1米
方向:
世界坐标系(Global)
物体自身坐标系(Local)
ctrl+d:复制物体
f或双击层级面板的物体名称:聚焦物体
工具栏快捷键对应:q w e r
4、3D模型美化之材质球
材质球放在Materials文件夹,材质球文件的扩展名为.mat。
贴图放在Textures文件夹
创建材质球:在Materials文件夹下右击-》Create-》Material
贴图只要拖入Textures文件夹
5、3D模型重用之预制体
可以用空物体来管理其它物体。
预制体放在Prefabs文件夹,把物体拖入Assets或Prefabs文件夹就是预制体。
编辑其中一个,点击Apply(Inspector面板-》Prefab选项),所有都会改变。
预制体文件的扩展名为.prefab。
6、基本组件之摄像机(Camera)
场景美化:添加地板
材质球的Tilling属性:分块
Game视图:游戏预览或运行窗口
游戏处于运行状态时所做的修改不会被保留。
摄像机常用操作
GameObject-》Align With View(ctrl+shift+f):让摄像机对齐当前视图
摄像机常用属性(摄像机的Camera组件)
Clear Flags:清除标记。
Background:背景颜色,Clear Flags设置为Solid Color时有效。
Clipping Planes:切割面
7、基本组件之灯光(Light)
显示/隐藏游戏物体:Inspector面板图标右侧复选框。
方向光(Directional Light):模拟太阳光
常用属性:Type、Color、Intensity(强度)、Shadow Type
点光源(Point Light):模拟电灯泡
常用属性:Range(范围)
聚光灯(Spot Light)
常用属性:Spot Angle(照射角度)
8、组件与脚本
Transform组件(变换)的属性
Position:位置
Rotation:旋转
Scale:缩放
C#脚本,用于控制游戏的逻辑。
脚本文件放在Scripts文件夹。
void Start(){} //游戏运行时执行一次,事件方法
void Upadte(){} //每帧执行一次,1秒大概60次,事件方法
Debug.Log() //调试输出
9、鼠标键盘输入
Input.GetKey():获取键盘按下某键。
Input.GetKeyDown():获取键盘按下某键瞬间。
Input.GetKeyUp():获取键盘释放某键瞬间。
参数KeyCode
Input.GetMouseButton():获取鼠标按下某键。
Input.GetMouseButtonDown():获取鼠标按下某键瞬间。
Input.GetMouseButtonUp():获取鼠标释放某键瞬间。
0--左键 1--右键 2--中键
10、使用变换组件移动游戏物体
gameObject:当前游戏物体
GameObject类
GetComponent<T>():获取组件对象
Transform类
Translate(Vector3,Space):移动游戏物体,默认按自身坐标的相对坐标。position:设置位置,按世界坐标的最终坐标。
Rotate():相对坐标,默认按自身坐标;localEulerAngles:设置旋转,按世界坐标的相对于父物体的坐标;eulerAngles:按世界坐标的最终坐标;rotation:按自身坐标,取值为Quaternion类型。
localScale:设置缩放,按自身坐标的最终坐标。
Vector3.forward
Vector3.back
Vector3.left
Vector3.right
Space.Self
Space.World
11、物理组件之刚体
刚体组件(Rigidbody):有了重力等物理属性
添加刚体组件
选中物体-》菜单Component-》Physics-》Rigidbody
刚体组件的属性
mass:质量
drag:阻力
angular drag:角阻力
use gravity:是否使用重力
使用刚体移动物体
Rigidbody组件类的MovePosition(Vector3)方法,按世界坐标系,方向要用当前位置+方向。
12、物理组件之碰撞体
碰撞体(collider):物体之间产生碰撞。
模型、碰撞体、刚体
添加碰撞体组件:
选中物体-》菜单Component-》Physics-》xxx Collider
box collider属性
center:中心点
size:尺寸
sphere collider属性
radius:半径
capsule collider属性
height:高度
direction:高度的方向
mesh collider属性
mesh:指定生成碰撞体的网格
13、刚体常用方法介绍
AddForce():给刚体添加一个力,按世界坐标系。
语法为:
AddForce(Vector3,ForceMode)
说明:
(1)Vector3:设置力的方向和大小。
(2)ForceMode:设置力的模式,枚举型。
常用的ForceMode.Force
例:AddForce(Vector3.forward*10,ForceMode.Force)
AddRelativeForce():给刚体添加一个力,按自身坐标系。
语法为:
AddRelativeForce(Vector3,ForceMode)
说明:
(1)Vector3:设置力的方向和大小。
(2)ForceMode:设置力的模式,枚举型。
常用的ForceMode.Force
例:AddRelativeForce(Vector3.forward*10,ForceMode.Force)
velocity:设置速度,参数Vector3类型。按世界坐标系。
void FixedUpdate(){}:固定更新方法,默认时间间隔0.02秒,用于执行物理操作。
MonoBehaviour类的事件方法。
14、刚体碰撞事件监测与处理
碰撞事件监测方法
OnCollisionEnter(Collision coll):碰撞开始,执行一次,事件方法
coll.gameObject:与当前物体碰撞的物体
coll.gameObject.name:与当前物体碰撞的物体的名称
OnCollisionExit(Collision coll):碰撞结束,执行一次,事件方法
OnCollisionStay(Collision coll):碰撞进行中,多次执行,事件方法
15、刚体触发事件监测与处理
碰撞体变为触发器:勾选“Is Trigger”选项。
触发事件监测方法
OnTriggerEnter(Collider coll):进入触发范围,执行一次,事件方法
coll.gameObject:与当前物体接触的物体
coll.gameObject.name:与当前物体接触的物体的名称
OnTriggerExit(Collider coll):离开触发范围,执行一次,事件方法
OnTriggerStay(Collider coll):在触发范围内,多次执行,事件方法
16、网络组件之网格过滤器和渲染器
网格过滤器(Mesh Filter)
网格渲染器(Mesh Renderer)
17、疯狂教室案例开发上
模型中心点的改变:利用空物体
中心点工具
Pivot:中心点在后选物体上
Center:中心点在两个物体中间
物体旋转
Transform组件类的Rotate(Vector3,float)方法
例如:m_Transform.Rotate(Vector3.up,90)
查找物体
GameObject.Find(string):静态方法,参数为物体名称。
GameObject.FindWithTag(string)
GameObject.FindGameObjectWithTag(string)
GameObject.FindGameObjectsWithTag(string)
GameObject.FindObjectOfType<T>()
GameObject.FindObjectsOfType<T>()
18、疯狂教室案例开发下
为物体设置tag:Inspector面板》Tag
通过Tag查找多个物体
GameObject.FindGameObjectsWithTag(string)
返回GameObject[]数组
19、PC端游戏打包与发布
File》Build Settings
20、新手入门总结
二、新手进阶
1、旧版UI组件之GUIText
UI就是用户操作界面。
常用UI系统:NGUI、UGUI
旧版UI有两个组件:GUIText和GUITexture
GUIText:文字
位于Component》Rendering
只能在Game视图可以看到
2、旧版UI组件之GUITexture
GUITexture:图像
位于Component》Rendering
只能在Game视图可以看到
鼠标事件方法
void OnMouseEnter():鼠标进入
void OnMouseExit():鼠标移开
void OnMouseDown():鼠标点击
void OnMouseUp():鼠标释放
void OnMouseDrag():鼠标拖动
3、特效组件之TrailRenderer
拖尾渲染器,用于显示拖尾特效。
位于Component》Effects》TrailRenderer
在Scene视图拖动物体可以看到拖尾效果
物体应用TrailRenderer:先把组件附加到空物体,然后空物体作为子物体
属性
Materials:材质球
Time:消失时间
Width:宽度
Color:颜色
制作透明材质球:设置材质球的Shader为Particles/Additive(粒子/添加物),再给材质球赋予贴图(白色显示,黑色不显示)。
4、特效组件之LineRenderer
线渲染器,用于显示“线特效”。类似激光笔效果。
位于Component》Effects》LineRenderer
常用属性有:
Positions:设置位置。
Width:设置宽度。
Color:设置颜色。
5、声音组件之AudioSource
unity支持的音频格式:mp3、wav、ogg、aif
音频文件存放到文件夹Audios中。
AudioSource:音频源组件
位于Component》Audio》AudioSource
常用属性有:
AudioClip:设置音频剪辑。
Play On Awake:设置在唤醒时播放。
Loop:设置是否循环。
Mute:设置静音。
Volume:设置音量。
Spatial Blend:设置是2D声音还是3D声音。3D声音有空间变化。
AudioListener:声音侦听组件
位于Component》Audio》AudioListener
AudioSource组件类的常用方法:
Play():播放
Stop():停止
Pause():暂停
6、常用API之实例化与销毁
实例化
GameObject.Instantiate(Object,Vector3,Quaternion)
Object:实例化的物体
Vector3:放置的位置
Quaternion:设置旋转,四元数,Quaternion.identity为无旋转。
销毁
GameObject.Destroy(Object[,float])
Object:销毁的物体
float:设置销毁时间
Random.Range(min,max):生成随机数。
7、常用API之Invoke函数调用
Invoke(string,float)
多少秒后执行某个函数(只会调用一次)。
InvokeRepeating(string,float,float)
多少秒后重复执行某个函数。
第一个float为开始时间
第二个float为间隔时间
CancelInvoke()
取消本脚本中所有Invoke执行。
以上三个函数为类MonoBehaviour的方法
8、常用API之消息发送
gameObject.SendMessage(string)
执行物体上脚本组件中的公有方法
也可以用
gameObject.getComponent<脚本组件>().公有方法()
9、常用API之协同程序
协程不是线程。
只有在继承了“MonoBehaviour”这个类的子类中才能使用协程。
//协同程序
IEnumerator Task3(){
yield return new WaitForSeconds(2);
Debug.Log("任务3");
}
StartCoroutine("协程名"); //调用协同程序
StopCoroutine("协程名"); //停止协同程序
StopAllCoroutines(); //停止所有协同程序