unity笔记
文章目录
unity入门
-
Unity环境搭建
-
Unity界面基础
Scene场景和Hierarchy层级窗口
Game游戏和Project工程
lnspector检查和Console控制台
工具栏和父子关系
- Unity工作原理
反射机制和游戏场景
预设体和资源包的导入导出
- Unity脚本基础
脚本基本规则
生命周期函数
Inspector窗口可编辑的变量
Mono中的重要内容
- Unity重要组件和Api
最小单位Gameobject
时间相关Time
必不可少Transform
Input和Screen
必不可少Camera
- 核心系统
核心系统—光源
核心系统—物理系统之碰撞检测
核心系统—音效系统
——
GUI
PlayerPrefs
场景切换和游戏退出
鼠标隐藏锁定相关
随机数和Unity自带委托相关
模型资源的导入
Unity环境搭建
工程文件夹
-
Assets:工程资源文件夹(美术资源,脚本等等)
-
Library:库文件夹(Unity自动生成管理)
-
Logs:日志文件夹,记录特殊信息(Unity自动生成管理)
-
obj:编译产生中间文件(Unity自动生成管理)
-
Packages:包配置信息(Unity自动生成管理)
-
ProjectSettings:工程设置信息(Unity自动生成管理)
assets以外都可以删除,再启动会自动生成
unity hub中可以移除工程,不会实际删除工程
再打开,选择添加工程
Unity界面基础
窗口布局
右上角——layout
推荐选择:2by3
同时显示scene和game窗口
-
Inspector检查窗口:用于设置游戏对象具体信息
-
Console控制台窗口:用于显示调试信息,报错、警告、打印信息等
-
Scene场景窗口:所有游戏对象所在地
-
Hierarchy层级窗口:所有游戏的对象名单
-
Game游戏窗口:玩家看到的游戏画面
-
Project工程窗口:所有游戏资源和脚本内容
Hierarchy层级窗口
显示一个场景中的所有对象
创建或拖入各种游戏对象
模型、光源、图片UI等等内容
手指——
眼睛——隐藏对象
快捷键:
F2:对象改名 rename
Ctrl+C:复制 copy
Ctrl+V:粘贴 paste
Ctrl+D:克隆一个(复制粘贴)
Delete:删除
Scene场景
查看所有游戏对象
设置所有游戏对象
- 窗口上方工具条内容:
0.辅助线 可以选择XYZ轴向
1.渲染模式 shaded着色器 wireframe网格
2.2D、3D视图切换
3.光源、音效、特效显示开启
4.辅助功能,控制场景上提示图标等
5.搜索
6.场景轴向
点击中心:
ISO 正交模式 2D
persp 透视模式 3D
- 3D世界坐标轴:
红色为X轴正向
绿色为Y轴正向
蓝色为Z轴正向
- 以屏幕为参照物:
垂直屏幕向内为Z正方向
平行屏幕向右为X正方向
平行屏幕向上为Y正方向
- 窗口左侧工具条内容:
平移 Q
移动 W
旋转 E
缩放 R
2D T
综合 Y
旋转时轴的相对目标 global/local
磁铁 吸附移动(W global状态下) 快捷键按住ctrl
- 场景中的操作
左键相关
鼠标单击:选中单个物体
鼠标框选:选中多个物体
Ctrl+鼠标单击:多选物体
长按ALT键+鼠标左键+移动鼠标:相对观察视口中心点旋转
右键相关
鼠标右键按下+移动鼠标:旋转视口
鼠标右键按下+WASD:漫游场景
鼠标右键按下+WASD+Shift:快速漫游场景
长按ALT键+鼠标右键+移动鼠标:相对屏幕中心点拉近拉远
中键相关
滚动鼠标中间:相对屏幕中心点拉近拉远
鼠标中间按下+移动鼠标:平移观察视口
长按ALT键+滚动鼠标中间:鼠标指哪就朝哪拉近拉远
选中物体之后,按F键:居中显示物体
(或者在层级窗中双去对象)
Game游戏窗口
游戏画面窗口
场景中摄像机拍摄范围内的游戏对象
玩家能看到的画面内容
- 上方:
1.引擎中运行游戏
2.暂停运行
3.逐帧运行
- game窗口标志右键:
1.Warn if No Cameras Rendering
场景中没有摄像机时会发出警告
2.Clear Every Frame in Edit Mode
游戏未播放时,也更新Game窗口,避免显示问题
- 游戏窗口上方工具条:
显示设备选择 display1
屏幕分辨率 aspect
缩放大小 scale
运行时全屏 play maximized
静音
渲染统计信息
辅助功能 辅助图标显示
Project工程窗口
工程资源窗口
所有的工程资源都会在该窗口中显示
显示的内容为Assets文件夹中的所有内容
主要用来管理资源脚本文件
- 默认文件夹Scenes:
里面有一个默认空场景
- Packages:
官方拓展包
第三方插件
- Project工程窗口关键功能
1.窗口设置 右上角三点 一列显示/两列显示
2.创建相关资源文件 加号 folder文件夹 在外部打开
3.查找
4.按资源类型查找 相当于输入 t:
5.按标签查找
6.显示隐藏
- 文件右键
Ctrl+D:克隆
Delete:删除
- 资源类型
图片格式: jpg、png、tga
模型格式: fbx、max、maya
音效:wav、mp3、ogg
文本: txt、json、bytes
视频: mp4
lnspector检查窗口
查看场景中游戏对象关联的C#脚本信息
不选择场景中游戏对象或不进行任何相关设置,该界面不会显示任何信息
当选择场景中意游戏对象时,该界面将显示和该游戏对象关联的C#脚本信息
1.游戏对象基本设置 标签tag 大类型标签layer
2.关联的C#脚本 transform脚本——位置信息、旋转、缩放
3.脚本的公共成员变量
0.Add component 增加脚本
Console控制台窗口
用于查看调试信息的窗口
报错、警告、测试打印都可以显示在其中
默认未开启
可以在Window一>General中开启
快捷键:Ctrl+Shift+C
该窗口将显示代码编译过程中或者游戏运行过程中的报错、警告、测试信息
主要用于查错和调试用
1.清空控制台 运行时清空 构建时清空
2.相同内容折叠显示
3.报错暂停运行
1.是否显示错误信息
2.是否显示警告信息
3.是否显示打印信息
工具栏
重点:
File中的重要选项:
BuildSetting (工程发布打包)
Edit中的重要选项:
Project Setting (工程各系统设置)
Preferences(首选项,可以设置编程软件)
GameObject中的重要选项:
MoveToView、Align With View、Align View to Selected(几种快捷设置位置的功能)
具体:
1.文件操作:新建工程,新建场景,保存,打开,工程打包build setting
2.编辑操作:对象编辑操作相关,工程设置,引擎设置相关
ctrl+z撤销
ctrl+y取消撤销
project setting 与ProjectSettings文件夹相同
preference首选项 external tools开发工具 ide可以选择编辑器vs2019
shortcut快捷键设置
3.资源操作:基本等同于Project窗口中右键相关功能
创建资源 在外部打开
包导入导出
4.对象操作:基本等同于Hierarchy窗口中右键相关功能
创建对象
move to view设置对象到视图 ctrl+alt+f
align with view设置摄像机到视图
align view to selected到选中对象
对象失活激活 和inspector窗口打勾作用一样
5.脚本操作: Unity自带的脚本,可以添加各系统中的脚本
选中对象才可以添加脚本
和inspector中add component相同
7.窗口:可以打开Unity各核心系统的窗口
general常用窗口
asset store 官方市场(要上网站)
9.帮助:检杳更新,杳看版本等等功能
官方文档
unity manual
scripting reference
unity中国官网 可以看中文文档
父子关系
树形结构
1.子对象会随着父对象的变化而变化
2.子对象Inspector窗口中Transform信息是相对父对象的
3.Scene上方选择
Pivot中心点在父对象自身 center中心点在父子对象中心
Global坐标系 local
作用:
创建空对象,设置子对象
可以一起控制子对象
父对象做啥,子对象做啥;
子对象做啥,父对象不管
unity工作原理
unity自带脚本(gameObject,transform,物理,音效)+ 自定义脚本(玩家,怪物)——>游戏对象
游戏场景——面向对象,实例化对象
反射机制
反射的概念:
程序正在运行时,可以查看其它程序集或者自身的元数据
一个运行的程序查看本身或者其它程序的元数据的行为就叫做反射
在程序运行时,通过反射可以得到其它程序集或者自己程序集中代码的各种信息,比如类,函数,变量,对象等等,可以实例化它们,执行它们,操作它们
本质:
Unity引擎本质是一个软件
Unity开发的本质就是
在Unity引擎的基础上
利用反射和引擎提供的各种功能进行的拓展开发
GameObject:
GameObject类对象是Unity引擎提供给我们的
作为场景中所有对象的根本
GameObject对象必须有一个表示自己所在位置的信息
Transform:
Transform就是一个必不可少的脚本
(相当于就是用一个Transform类对象和GameObject类对象进行关联)
用于设置和得到演员在世界中的位置角度缩放等信息
- 反射机制的体现:
可以为(GameObject)关联各种(C#脚本)让它按照(代码逻辑中)的命令来处理事情
这个过程就是在利用反射new一个新的对象和(GameObject)对象进行关联
举例体现:
前提: Unity帮助我们实现了对象查找和关联
1.修改Inspector面板中Transform的内容
利用反射:已知对象,类名,变量名,通过反射为该对象设置变量值
2.新建一个脚本后,添加给一个指定的GameObject对象
利用反射:已知类名,可以获取所有公共成员,故可以在lnspector面板上创建各公共字段信息
游戏场景本质
1.游戏场景的新建
左上角file——new scene
2.游戏场景的保存
选中hierarchy窗口——ctrl+s——保存到scenes文件夹
project窗口 双击scenes内场景 切换场景
3.多个游戏场景叠加显示
project窗口场景拖到hierarchy窗口
可以同时显示多个场景
用处:方便拷贝对象到别的场景
4.游戏场景的本质
特殊格式的配置文件
包含GameObject,Transform
游戏场景文件后缀为.unity
本质就是一个配置文件
Unity有一套自己识别处理它的机制
但是本质就是把场景对象相关信息读取出来通过反射来创建各个对象关联各个脚本对象
可以用文本编辑器(记事本)打开
预设体
预制体
后缀prefab
可以用文本编辑器(记事本)打开
1.预设体是什么
保存单个物体的信息
预先设置,方便使用
- 2.创建预设体
在hierarchy窗口选中物体,拖入project窗口assets文件夹下
(蓝色图标 立方体)
可以在assets文件夹新建Prefabs文件夹,专门用于保存预设体
- 3.修改预设体
方法一:
在hierarchy中修改后,选中hierarchy预制体主体 ——>
在inspector中override ——>
——revert all恢复最初的预制体
——apply all保存修改应用到所有
方法二:
拖动修改后的物体,到assets文件夹原来的预设体上
直接覆盖
- 0.打开预设体,进行编辑
方法1:
project窗口assets文件夹中选中,在inspector窗口点open
方法2:
hierarchy窗口预设体 点击箭头>
- 在原预设体基础上,创建新的预设体
先破坏预设体:
hierarchy窗口,选中预设体,右键Prefab选择unpack
拖入assets文件夹
重名会自动加编号
- 4.删除预设体
资源包导入导出
文件后缀unity package
project窗口
- export package
默认包含关联
- import package
导入资源包
和直接拖入文件相同
unity脚本基础
设置编程用工具:
edit——>preference——>external tools——>ide选择vs2019
脚本基本规则
1.不在VS中创建脚本
在unity中创建,双击打开跳转vs
2.可以放在Assets文件夹下的任何位置
(建议同—文件夹管理) 创建文件夹Scripts
3.类名和文件名必须一致,不然不能挂载
(因为反射机制创建对象,会通过文件名去找Type)
必须同时修改
4.建议不要使用中文名命名
5.没有特殊需求不用管命名空间
默认创建的脚本 没有命名空间
6.创建的脚本默认继承MonoBehavior
MonoBehavior基类
1.创建的脚本默认都继承MonoBehaviour
继承了它才能够挂载在GameObject上
2.继承了MonoBehavior的脚本,不能new,只能挂
3.继承了MonnBehavior的脚本,不要去写构造函数
因为我们不会去new它,写构造函数没有任何意义
4.继承了MonoBehavior的脚本,可以在一个对象上挂多个
(如果没有加DisallowMultipleComponent特性)
特性写在类前[DisallowMultipleComponent]
5.继承MonoBehavior的类也可以再次被继承。
可以挂载
遵循面向对象继承多态的规则
不继承MonoBehavior的类
删除默认的继承MonoBehavior 以及 默认的函数
1.不继承Mono的类不能挂载在GameObject上
2.不继承Mono的类 想怎么写怎么写
如果要使用需要自己new
3.不继承Mono的类—般是单例模式的类(用于管理模块)
或者数据结构类(用于存储数据)
4.不继承Mono的类不用保留默认出现的几个函数
脚本执行的先后顺序
选择脚本后inspector窗口
Script Execution Order
——default time 默认时间——
增加脚本 设置时间
时间越小,越先执行
默认脚本内容
Ecitor\Data\Resources\ScriptTemplates
unity hub——>安装——>版本三点 在资源管理器中——>editor——>data——>Resources——>ScriptTemplates:txt文件
文件名称81-C# Script-NewBehaviourScript.cs
生命周期函数
帧
游的本质就是一个死循环
每一次循环处理游戏逻辑,就会更新—次画面
切换画面的速度到达—定时,人眼就认为画面是流畅的
—帧就是执行一次循环
fps (Frames Per Second) :即每秒钟帧数
—般我们说的60帧30帧
意思是1秒更新60次、30次画面
1s = 1000ms
60帧:1帧为
1000ms/60=16.66ms
30帧:1帧为
1000ms/30=33.33ms
人眼舒适放松时可视帧数是每秒24帧
游戏卡顿的原因:
跑1帧游戏逻辑中的计算量过大,
或者CPU不给力,不能在一帧的时间内处理完所有游戏逻辑
Unity底层已经帮助我内做好了死循环
我们需要学习Unity的生命周期函数
利用它做好的规则来执行我们的游戏逻辑就行了
生命周期函数的概念
所有继承MonoBehavior的脚本最终都会挂载到Gameobject游戏对象上
生命周期函数就是该脚本对象依附的Gameobject对象从出生到消亡整个生命周期中,会通过反射自动调用的一些特殊函数
unity帮助我们记录了,一个Gameobject对象依附了哪些脚本,会自动的得到这些对象,通过反射去执行一些固定名字的函数
生命周期函数
生命周期函数的访问修饰符一般为private和protected
因为不需要再外部调用,生命周期函数都是Unity自己帮助我们调用的
默认private
没有参数
支持继承多态
如果不在其中写逻辑,那就不要写生命周期函数;因为通过反射调用,找到就会调用
脚本可以关联多个对象,相互无关
对象一开始就失活,不会调用生命周期函数
分类:
-
只执行一次的
-
每一帧都执行的
-
特殊情况下执行的
- 对象出生
对象指脚本
- Awake
(自己这个类对象)出生时调用。类似构造函数
一个对象只会调用一次
可以在类对象创建时,进行一些初始化操作
- OnEnable
依附的GameObject对象 每次激活时调用
当一个对象被激活时进行一些逻辑处理
- Start
从自己被创建出来后。第—次帧更新之前调用
主要作用还是用于初始化信息的,但是它相对Awake来说要晚一点
因为它是在对象进行第一次帧更新之前才会执行的
一个对象只会调用一次
- FixedUpdate
物理帧更新
主要用于进行物理更新
固定时间间隔执行。间隔时间可以设置
时间间隔是可以在project setting中的 Time里fixed timestep去设置的
- Update
逻辑帧更新
每帧执行
主要用于处理游戏核心逻辑更新
- LateUpdale
每帧执行。
一般用来处理摄像机位置更新相关内容
于update之后执行
时间间隔和update相同,只是先后执行
Update和LateUpdate之间unity进了一些处理,处理我们动画相关的更新
- OnDisable
依附的GameObiect对象每次失活时调用
(inspector窗口取消打勾)
在一个对象失活时做一些处理
- OnDestroy