导图社区 Unity 使用
这是一篇关于Unity的思维导图,主要内容包括:打包,快捷键,插件,特殊窗口,优化,补充,界面窗口。
编辑于2024-11-27 22:15:14这是一篇关于SolidWorks的思维导图,主要内容包括:工具,快捷键,知识,窗口。汇总了实用的快捷键,帮助用户更高效地进行操作。希望通过这些内容的介绍,能让大家更好地掌握SolidWorks,在工程设计的道路上更加得心应手。
这是一篇关于乐理知识的基本知识,介绍了最常见的音符时值,包括全音符(4拍)、二分音符(2拍)、四分音符(1拍)、八分音符(半拍)、十六分音符(1/4拍)、三十二分音符(1/8拍)。
Houdini的基本使用,涵盖窗口界面的布局与模式选择、基础设置的调整与保存、知识补充中动态和表面操作符的相关概念,以及实用的快捷键操作,为初学者搭建起通往Houdini奇妙世界的知识桥梁,助力大家开启创意无限的三维创作之旅。
社区模板帮助中心,点此进入>>
这是一篇关于SolidWorks的思维导图,主要内容包括:工具,快捷键,知识,窗口。汇总了实用的快捷键,帮助用户更高效地进行操作。希望通过这些内容的介绍,能让大家更好地掌握SolidWorks,在工程设计的道路上更加得心应手。
这是一篇关于乐理知识的基本知识,介绍了最常见的音符时值,包括全音符(4拍)、二分音符(2拍)、四分音符(1拍)、八分音符(半拍)、十六分音符(1/4拍)、三十二分音符(1/8拍)。
Houdini的基本使用,涵盖窗口界面的布局与模式选择、基础设置的调整与保存、知识补充中动态和表面操作符的相关概念,以及实用的快捷键操作,为初学者搭建起通往Houdini奇妙世界的知识桥梁,助力大家开启创意无限的三维创作之旅。
Unity
界面窗口
顶部菜单
文件
生成设置:添加需要加载的场景(直接拖入场景)
窗口
渲染-光照:环境-天空盒材质
包管理器:管理插件
分析
Input Debug:查看设备是否正常运行
分析器:分析性能
正在排序(Sequencing)
时间轴Timeline:管理过场动画
摄像机切换,人物,场景
资源
导入包:导入插件
场景
全局(世界坐标),局部(相对坐标)
全局(世界坐标)
局部(相对坐标)
中心,轴心
中心:物体的中心
轴心:物体的坐标轴
坐标轴
点击中心切换透明/正交
游戏
状态:游戏时Fps等
项目设置
输入管理器
名称对应移动操作设置
2D物理
设置两者是否可碰撞的检测
玩家
游戏图标(icon)
默认打开的模式(全屏/窗口/无边框)
其他设置-配置-脚本后端:Mono/IL2CPP
开发用Mono
打包用IL2CPP
质量
Rendering-Vsync计数:垂直同步(fps)
可视化脚本编程
Type Options:类型
插件的[类型]在这添加
Node Library:API节点
插件的[节点]部分需要在这添加
Regenerate Nodes:重新生成节点
首选项
颜色
游戏模式高亮颜色
CBCEFF
层级
创建
效果
粒子系统:CPU模拟
简单,消耗小
视觉效果
视觉效果:VFX
强大,消耗大
UI
文本Text
文本:Text Mesh Pro
Outline:边框
Underlay:阴影
补充
Softness柔化
Dilate膨胀(变粗)
thickness厚度(粗细)
旧版文本:Text
旧版文本组件
shadow文字阴影
按钮Button
旧版按钮:Button
自动生成一个子级的文本(按钮的文本)
是否能使用
面板Panel
可以把其他UI项放在此子级
滑动条Slider
滚动条Scrollbar
补充
自动生成Canvas(UI窗口)
Canvas Scaler窗口大小
UI缩放模式:推荐屏幕大小缩放
匹配(优先匹配高度还是宽度):推荐高度1
优先高度的话可以适配宽屏和带鱼屏
选中按F查看UI窗口
自动生成EventSystem
不能删除,不然无法使用按钮
锚点:基于设置的锚点位置来移动(更好的匹配不同屏幕)
在这里调整UI大小和位置,不要在缩放调整
可以用空对象+Layout Group(对齐)组件来管理UI
音量(Volume后期盒)
全局音量(全局范围)
盒体体积(盒体范围)
球体体积(球体范围)
使用
1. 点击[新建]配置文件
会在Scenes文件里生成配置文件
2. 点击[添加覆盖],添加Post-processing(后期效果)
3. 摄像机需要开启[后处理效果]
后期效果
Bloom:泛光
Color Adjustments:颜色调整(曝光,色调,对比度)
Chromatic Aberration:色差(RGB分离+拉伸)
类似幻觉
Depth Of Field:景深(散景模糊,高斯模糊)
各种模糊的算法
可以调节虚化距离
径向模糊(Radial Blur)
Film Grain:电视雪花
Lens Distortion:镜头畸变
Motion Blur:运动模糊
Tonemapping:颜色映射(对比度,深色更深,亮更亮)
ACES:写实
Vignette:晕影(四周黑边)
项目
创建
2D
Physical Material 2D:2D物理材质
添加到[2D碰撞体]的材质
Sprite Library Asset:Sprite库
添加到[Sprite Library]
Sprite Shape Profile:Sprite特殊轮廓
例
封闭时,填充的Sprite
Corners拐角:内/外 的上下左右拐角Sprite
可直接拖拽到[层级]
碰撞使用[Edge Collider 2D]
添加后,在[Sprite Shape Profile]里Collider可调节碰撞体
Offset拉满:匹配碰撞
或Polygon Collider
Is Open Ended:不勾选则封闭(封闭则会自动填充内部)
场景:关卡
材质
Shader Graph:可视化材质
(仅HDRP)视觉效果:VFX
*动画控制器:动画状态机(控制动画)
添加到[Animatior]的控制器
动画:2D/3D动画
循环:点击[动画]-[检查器]面板
下方-拖入预览物体-查看动画
物理材质:反弹,摩擦力
添加到[3D碰撞体]的材质
预制件Prefab(实例):包含所有数据,[层级]拖入[项目]即生成
预制件:可重复使用的资源模板,所以不能删除根本的资源
Model:模型
**缩放系数:缩放大小(不影响场景里的Scale缩放)
读取/写入:允许访问顶点和索引
Rig:骨骼
Animation:动画
**修改Prefab后,记得应用!
右键-解压缩:独立化(断开关联,成为独立的物体)
检查器(细节)
隐藏物体
标签Tag
配合[Find with tag]使用
图层:碰撞检测
添加图层(碰撞检测)
物理/2D物理可设置[碰撞检测]预设
组件
2D Animation
Sprite Skin:Sprite骨骼
自动生成Sprite Renderer
Sprite Skin
Sprite Library:Sprite库
需要在[项目]右键-2D-创建[Sprite Library Asset]
分类,选择Sprite,命名
Sprite Resolver:使用Sprite库(在对应的图层图片添加该组件)
若图片匹配不上,需修改原图层图片的锚点
Audio
Audio Source:音频
Audio Listener:接收音源
默认放在MainCamera
Miscellaneous
Animatior:动画
控制器添加[动画控制器]
应用根运动:动画的位移应用到对象
Physics
Rigidbody:刚体(物理)
身体类型
Dynamic动态
Kinematic
不受重力和AddForce等 影响
静态
材质:添加[物理材质]
质量:类似重量
碰撞检测:持续
插值
外推(可以避免穿墙)
Info:物理信息(速度,位置等)
[Box,Sphere,Mesh] Collider:碰撞体
是触发器:开启重叠事件(Trigger)
当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数
当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数
Character Controller:角色控制器
斜度限制:可以走的斜坡角度
每步偏移量:可以登上的台阶高度
蒙皮宽度:用于防止人物卡住(建议设置为碰撞半径的10%)
开启后建议移动碰撞体的Y轴,否则浮空
最小移动距离:移动值小于这个值则不移动(建议0或0.001)
注意
不能和Rigidbody,碰撞体同时用
需要自己写重力
补充
【详解Unity】角色控制器 | Character Controller
此控制器比较旧,可考虑使用KCC角色控制器(较难)
Character Controller的可视化编程节点
Hinge Joint:铰链
2D
Composite Collider 2D:复合碰撞体(合并)
自动生成Rigidbody2D
作用:优化瓦片地图碰撞
1. 瓦片地图的Rigidbody2D设置为[静态]
2. TilemapCollider2D 勾选[由复合使用]
整体变成圆角
Edge Collider 2D:多线段碰撞
Platform Effector 2D:单向平台
需要碰撞体开启[由效果器使用]
Rendering
Camera组件:渲染-抗锯齿
默认在Main Camera上添加该组件
渲染-抗锯齿
Sprite Renderer:Sprite精灵
图层优先级:越上越前
同层级优先级:越大越前
Tilemap
Tilemap Collider 2D:瓦片地图碰撞体
Layout Group
Grid Layout Group:格子对齐
适合背包管理用
Horizontal Layout Group:水平对齐
Vertical Layout Group:垂直对齐
Visual Scripting
Script Machine:可视化编程
State Machine:脚本图状态机
直接搜索
IK Manager 2D:反向动力学
Chain(CDD):链条(单向)
Chain Length:影响多少骨骼(父级)
Chain(FABRIK):链条(双向)
Chain Length:影响多少骨骼(父级)
Limb:肢体(模拟人体)
只能影响3个骨骼点,包换空物体的点
***Effector:放置在末端的[空物体]
Filp:翻转方向
控制台
折叠:相同的报错折叠在一起
BUG报错解决
MissingReferenceException: The object of type 'XXXXX' has been destroyed but you are still trying to access it.
意思
代码运行时Object丢失或被销毁
原因
变量名一样被代替了(例如面板Canvas和场景变量)
解决
更换不同场景的面板名字和场景变量的名字
NullReferenceException: Object reference not set to an instance of an object XXXX
意思
过程object为null
CS1056: Unexpected character
意思
含有未知符号
解决
删除
快捷键
鼠标所在窗口,Shift+空格:最大化该窗口
物体(场景&层级)
按住alt键+点击三角:打开所有子文件
F:查看选中物体
T:形变
按住v拖拽物体坐标轴:顶点对齐
选中摄像机后Ctrl+SHift+F:摄像机移动到当前视角
Ctrl+7:分析器(查看性能状态)
补充
文件类型
Unity单位为 米
人物动作
站立
idle
LR-idle
行走
walk
跑
run
跳跃
jump
下坠/下落
falling
冲刺
sprint
dash
翻滚
roll
蹲
crouch
攻击
attack
格挡
guarding
受伤
hit
悬挂
Hanging
删除的文件可以在回收站找回!
抗锯齿
FXAA:模糊锯齿(效果差),性能消耗极低
**SMAA:性价比(效果一般),性能消耗低
**TAA:现在常用(效果好,但会严重模糊,特别是在动态下),性能消耗一般
DLSS2/FSR2 的运作都是依赖 TAA 的
MSAA:画面好(效果好,但现在几乎不用),性能消耗过大
(主要看是2x,4x,8x)
DLSS
分辨率越高,总体模糊的程度越小
贴图质量
对性能影响不大,对显存有要求
动态分辨率
设置一个最低帧数,若无法达到最低帧数,自动降低解析度
不建议打开
打包
文件-生成设置:选择平台后,点击[生成]
打包前注意
玩家设置:打包设置
优化
**部分数值乘DeltaTime/per second
**预制件Prefab:实例化
地图碰撞体优化
可视化编程节点优化
插件
可视化编程:插件需手动添加节点类型
官方
Cinemachine:超强摄像机
默认
MainCamera自动生成CinemachineBrain组件
Ignore Time Scale(忽略时间尺度):是否被时间缩放影响
相机切换过渡
Default Blend:摄像机切换过渡类型(后面为过渡时间)
多摄像机切换
1. 修改优先级(优先级越大越优先)
2. 切换摄像机时停用摄像机,便会自动切换到第二个摄像机
Custom Blends:给不同的摄像机给予不同的切换过渡类型
角色可以通过State-Driven Camera:摄像机状态机来切换
事件
Camera Cut Event:切换的第一帧时(CUT剪切的切换过渡类型)
Camera Activated Event:切换的第一帧时(非CUT剪切的切换过渡类型)
[场景]自动生成一个CM vcam1
CM vcam1(所有的CM摄像机)会控制MainCamera
可重命名
组件:CinemachineVirtualCamera
[游戏]镜头指引:开启[Game Window Guides]和[Body],然后选中角色
Save During Play:保存游戏模式下的修改
Follow:跟随的目标 ,Look At:看向的目标
过渡
**Inherit Position:继承位置(在当前摄像机位置切换)
没有过渡,用来切换摄像机类型
一般不在主摄像机上使用
Lens-Advanced-Mode Override:摄像机类型(正交,透视,物理[真实])
Body:控制Follow的方式
Body类型
Orbital Transposer:圆形轨道
Binding Mode:绑定类型
Heading:轨道初始位置
定义
Target Forward:目标后面
Recenter to Target Heading:镜头恢复到初始位置
Wait Time:等待多长时间开始恢复到初始位置
Recenter time:使用多长时间恢复到初始位置
Framing Trasnsposer:固定(一般2D使用)
Lookahead:镜头向前看
Center On Activate:激活时居中
Damping跟随速度(阻尼):越大越慢
DeadZone死区:范围内镜头不跟随
Aim:瞄准,控制Look At的方式
Aim类型
Hard Look At:无论在哪都瞄准目标
Composer:有阻尼,滞后的
Noise:摄像机抖动效果
Noise Profile:抖动类型
创建
State-Driven Camera:摄像机状态机
场景生成一个CM StateDrivenCamera1(包含一个子级,子级可删)
组件:CinemachineStateDrivenCamera
Default Blend:摄像机切换过渡类型(后面为过渡时间)
Animated Target:动画器(选择对应物体)
Layer:所选动画器的动画层
添加动画和播放该动画时使用的摄像机
放在子级的摄像机
FreeLook Camera:自由视角
场景生成一个CM FreeLook1
组件:CinemachineFreeLook
建议翻转Y,X不翻转
环绕的轮廓
Add Extension:添加扩展
Impulse Listener:摄像机震动
Use 2D Distance:忽略相机Z轴的抖动
使用
1. 在需要[震动]的物体上添加[Cinemachine Collision Impulse Source]组件(直接搜索)
Impulse Shape:震动波形
s为持续时间
推荐Explosion
Default Velocity:震动幅度
建议斜着震动(-0.17,-0.3,0)
2. 该物体需拥有碰撞组件(碰撞或触发器皆可)
3. 图层遮罩选择与其能产生[震动]的图层
Confiner(2D/3D都可用):限制摄像机范围
1. 在[瓦片地图]或[空物体]创建[PolyqonCollider2D]来限制范围
可详细编辑每个点的位置
2. 拖拽到Bounding Shape 2D
Confine Screen Edges:不以摄像机中心来限制范围
阻尼:类似滞后
Confiner 2D:限制摄像机范围
1. 在[瓦片地图]或[空物体]创建[PolyqonCollider2D]来限制范围
可详细编辑每个点的位置
2. 拖拽到Bounding Shape 2D,点击Invalidate Cache
镜头类型
第三人称,自由视角(永劫,老头环类)
CinemachineFreeLook
Cinemachine可视化编程节点
需要手动添加
Input System:输入系统
使用
1. 项目设置-玩家-配置:活动输入处理[两个Both]
2. 角色添加Player Input组件并添加[Actions]
3. 点击进入创建的Input Actions
Input事件
组件-Invoke unity Events:输入操作来执行脚本
若需要修改input的内容,需生成C#脚本
补充
上方
All Control Schemes-Add Control Scheme:添加新的控制预设
预设名,设备类型(例如键盘+鼠标)
修改要记得保存
左方
Action Maps:不同状态的按键操作图
例
中间
绿色:按键类型
蓝色
输入设备类型
粉色:绿色里的特殊类(图2是有粉色的蓝色)
Up\Down\Left\Right Composite:上下左右
Modifiers:添加组合键
例,A+D一起按触发
例,Q+W+E一起按触发
右方
设置键可以点击Listen找到想要的键位
interactions交互,Processors处理
Interaction:交互
教学1 https://learn.u3d.cn/tutorial/input-system-swt?chapterId=63562b29edca72001f21d1e9#62f5d684fc246700206a7ee8 教学2 https://www.jianshu.com/p/0134f9ad01fc
默认
Press:按下
什么时候触发事件:PressOnly按下,ReleasedOnly松开,PressAndReleased按下和松开
Hold:按住
Tap:按下
Slow Tap:轻按(短按)
Multi Tap:连续按下
Processors:处理
Vector 2类
Invert Vector 2:反转向量
Scale Vector 2:缩放向量
Stick Deadzone:死区
Input System可视化编程节点
Animation Rigging
组件
Bone Render:渲染骨骼
Rig:Rig权重
Two Bone IK Constraint:双骨骼IK约束
Universal RP(URP):URP渲染管线
使用
1. 项目设置-图形-可编写脚本的渲染管道设置:放置管线
2. 材质切换成Lit-Default
若没有则点击此项
效果
Post-Processing(后期效果盒)
后期效果
管线的质量设置(可以建多个,做为不同画质的预设)
2DLight
全局光照
补充
若是后添加URP插件,需要的设置
Unity 输入冲突-InvalidOperationException
HDRP:高清渲染管线
使用
非官方(需包管理器下载)
Colored Hierorchy Headers:场景分区管理
使用
1. 上方-工具-Colored Header Creator
2. 改换名字颜色,创建
创建后,点击也可修改
Readme:组件备注
使用
1. 添加组件- readme
2. 点击Edit 编辑
Magica Cloth 2:布料模拟
RayFire:模拟破碎
【Unity】RayFire使用心得
**[教程]Unity专业破坏效果插件RayFire for Unity入门(附插件资源链接)
组件
RayFire Shatter:进行切割
RayFire Rigid:物理效果,并控制破碎的生效
RayFire Man:Manager管理,用于管理场景全部参数
RayFire Bomb:模拟爆炸产生的冲击波和冲击影响
RayFire Sound:声音
RayFire Dust:烟尘特效
Easy Save 3:简易保存
使用
视频教学 https://learn.u3d.cn/tutorial/easy-save?chapterId=63562b29edca72001f21d1d8#62f49db9d87ec3001ff3b5c5 图文教学 https://blog.csdn.net/ChinarCSDN/article/details/88984861?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167685154616782425167848%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167685154616782425167848&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-7-88984861-null-null.142^v73^control_1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=EasySave3&spm=1018.2226.3001.4187
ES3.Save:保存
ES3.Load:读取
闲置
PlayMaker
使用
1. 安装
2. 添加组件PlayMaker-FSM状态机
节点
移动:Axis
补充
用PM不能开启[进入播放模式设置]
设置中文
更新前检测(更新该插件时使用)
Kinematic Character Controller:KCC角色控制器
特殊窗口
动画
动画器:状态机
Script Graph:脚本图(可视化编程)
平铺调色板:瓦片块
Sprite编辑器
预先设置
新项目
UBP才包含2DLight
也可给现无的项目添加此插件
首选项
设置为:VS,版本越高越好(2022)
可视化脚本编程:设置
项目设置
编辑器-进入播放模式设置:开启后进游戏不卡顿
质量
Rendering-Vsync计数:垂直同步(fps)
2D
Sprite图片
Sprite编辑
默认单块大小:256*256
场景的每一个单元中分配多少个该图片像素,越小,该图在场景中显示越大
像素画设置对应更低(64,128)
推荐512*512
过滤模式:正常设置为[双线性],像素画设置为[点]
压缩:无
修改完点击[应用]
图层顺序(前后关系)
Sprite编辑器窗口
Sprite Editor:切片
使用
1. 选中Sprite(图片)
2. Sprite模式设置为[多个]
3. 点击切片
类型
自动:自动把独立的切片
Grid By Cell Size:按分辨率大小切片
Grid By Cell Count:按网格数切片
4. 点击[应用]
注意
在Unity进行切片,瓦片地图可能会在[场景]没有缝隙,但[游戏]中会出现缝隙
解决方法
方法1
选择[瓦片地图],单元格间隙XY改成-0.001
方法2
选择[瓦片地图],单元格大小XY改成0.99
Skinning Editor:2D骨骼动画
使用
0. 准备的图片
分开图层和命名,导出psd格式
将导出的psd格式改成psb格式
1. 导入图片.psb,
2. 到[Skinning Editor]双击图片,创建骨骼
3. 点击[自动生成网格]
4. 调整权重
不想被其他骨骼影响权重,则点击[Bone Influence]
在[精灵]面板,点击要调整的[骨骼],添加/减去关联骨骼的权重
5. 完成后拖到[场景]需要创建一个[空物体]预制件(否则无法保存和添加组件)
(ik:在需要的骨骼末端添加[空物体]并添加组件[IK Manager 2D])
IK Manager 2D详细
6. 动画(第一帧需要把全部骨骼K帧(全选骨骼,除开ik,添加密钥))
添加密钥:K帧
骨骼的位置和旋转都需要K
工具
骨骼
创建骨骼
父骨骼跟随:选中父骨骼再创建骨骼
武器也需要跟随父
骨骼中添加骨骼
几何体:网格
自动生成网格
编辑网格
删除点:选中,按Delete
添加点
可添加到内部
权重
权重刷
Hardness:强度
Sprite表单:查看各图层
右上角[可视性]:查看骨骼
注意要添加API节点和类型
API节点
2D.Animation.Editor
类型
Sprite Library Source Asset Importer
2D的摄像机
使用透视摄像机可以很好的利用Z轴来做视觉差
特殊瓦片
适合做背景
瓦片地图
[层级]-右键-瓦片地图
1
添加组件:Tilemap Collider 2D
2
添加组件:Composite Collider 2D
自动生成Rigidbody2D
作用:优化(合并)瓦片地图碰撞
1. 瓦片地图的Rigidbody2D设置为[静态]
2. TilemapCollider2D 勾选[由复合使用]
平铺调色板窗口:瓦片块
创建瓦片组
拖入Sprite(图片)创建瓦片
瓦片地图
框选:按住Ctrl
橡皮檫:按住Shift
工具
Unity2D像素游戏开发——绘制瓦片地图·构建简单的游戏场景及解决常见问题
背景可以放在摄像机的子级或正常放置
材质
材质
基础(内置):此处放贴图
Shader Graph材质添加
方法1
右键Shader Graph,创建材质
方法2
将Shader Graph拖拽到Material上
方法3
点击材质上方的shader,选择Shader Graphs-Shader Graph名
Shader Graph(可视化材质)
URP
Graph Inspector:图形检查器
Graph Settings(材质编辑)
Workflow mode:工作流(金属,高光)
Surface Type:表面类型(不透明,半透明)
Render Face:渲染面(前,后,全部)
Cast Shadows:投射(生成)阴影
Receive Shadows:接收阴影
Node Settings(节点编辑)
点击变量进行编辑
Vertex(顶点着色器):顶点变换时使用
Fragment(片元着色器):颜色等
Sample Texture 2D:用于连接图像
变量:编辑材质项
变量可在外部编辑
类型
texture 2D:图像纹理
需要连接Sample Texture 2D
mode:选择图像类型(白,黑,灰度,法线,线性灰,红)
use tiling and offest:使用UV平铺和偏移
Float:浮点(小数点)
mode:选择值类型(Slider滑块(最大最小值),整数)
节点
Artistic:艺术效果
Adjustment:调整
Blend:混合
Filter
Mask:遮罩
Normal:法线
Utility
Channel
Input:输入
Basic:基础
Time:时间偏移
Geometry:几何图形
Gradient:渐变,坡度
Lighting:照明
Matrix:矩阵
PBR
Scene:场景
Texture:图像纹理
Math:数学
Advancend:高级
Negate:反转颜色
Basic:基础
Derivative
Interpolation:插值
Matrix:矩阵
Range:范围
Round:附近值
Trigonometry:三角函数
Vector:向量,矢量
Wave:波动,波形,起伏
Procedural:程序化
Procedural:程序化图形
Properties:属性,资产(变量)
Utility:多功能
Utility:多功能(布尔等)
UV
UV
快捷键
Ctrl+G:打组
补充
ShaderGraph节点大全
组合效果
骨骼动画
动画
动画窗口
使用
1. 角色添加组件:Animator
2. 右键-[动画控制器],添加到Animator组件的[控制器]
3. 先点击角色,到[动画]建立动画
4. 左上角[创建新剪辑]添加更多动画
2D
将Sprite(图片)拖入时间轴
补充
右上角-Show Sample Rate:类似播放速度
下方-曲线:调整动画曲线
右键-选中点:调整曲线类型(线性,平滑,等)
循环:点击[动画]-[检查器]面板
添加属性:动画时修改组件
停用组件
修改速度,重力
过场动画使用时间轴timeline
动画器窗口:状态机
使用
1. 选中角色
2. 拖入动画
3. 右键[创建过渡]:动画之间过渡/条件
(先测试参数再添加对应的条件)
过渡/条件
左上角-[参数]:创建播放动画的条件
[可视化编程]的设置条件节点
条件:能达成即执行
Bool和Trigger的区别
有退出时间:是否需要播放完
X则瞬间转换
大于
小于
动画之间过渡:图为无过渡
2D的设置
动画状态
Any State:任意状态(任何时候)
死亡动画要关闭此项
橙色:设置的默认动作
动画
Write Defaults:在动画某些值没有默认值时执行默认值
混合树
右键-创建状态-从新混合树
1. 创建后双击动画状态进入
2. 添加运动域:添加动画
会自动生成一个浮点类型的条件
条件只能是数值(Int或Float),不同数值播放不同动画
红色区域:条件
黄色区域:动画
ThreshHold(阈值):到该值(条件的值)就播放对应动画
Automate ThreshHolds:自动平均阈值
Compute Thresholds:计算阈值
例: 0=第一个动画,0.25=第二个,1=第五个
阈值可以超出0到1
播放速度
混合类型
2D混合:多角度混合(前后左右)
动画层
层级:越下越优先
动画层 和 Avatar遮罩 把多个动画组合
权重:层级权重(影响混合的比例)
遮罩:选择生效的区域
同步:同步源层的动作(用于受伤,疲劳)
定时:同步动画时长(同步的动画由动画层权重决定)
正在混合:混合模式
覆盖:取代动画,Additive:混合动画
补充
预制件骨骼
人形(humanoid)
人形可以重定向骨骼动画
Humanoid动画中的Root Motion
泛型(Generic通用)
Generic的Root Motion动画设置
预制件动画
分割动画:新添一个动画,选择播放部分
动画文件添加Curve(曲线),并以此控制游戏对象的属性
该曲线名=同名的条件的值
粒子
粒子系统
停止行动:播放完后执行
销毁(改善性能)
VFX
Spawn:生成
Constant Spawn Rate:每秒重复生成(每秒生成多少粒子)
Single Burst:单次生成
Periodic Burst:周期性爆发
Count:每次生成多少 Delay:每延迟多少秒再次生成
Initialize Particle:初始化粒子
Update类型
Capacity注意: ***生成的粒子要是没有超出Capacity的大小则会继续生成粒子 Bounds Mode范围: Recorded Manual手动 Automatic自动
Particle:粒子
Particle Strip:粒子带(条)
Update Particle:更新粒子(动态变化)
需要实时变化的效果都放在Update
Gravity:重力
Force:力
LInear Drag:线性阻尼
Flipbook Player:播放序列图像
Blend Position:混合位置
Blend连接时间节点,建议Delta Time (VFX)
用于转换位置(初始化的位置到混合的位置)
Turbulence:湍流,气流
Output Particle :输出粒子(渲染)
Output类型
使用Alpha贴图:Blend Mode-Additive
无光照
Particle Quad:四边形粒子
Particle Triangle:三边形粒子
Particle Octagon:八边形粒子
Crop Factor:以中心缩放四个角(p1:接近0,p2接近1)
Particle Line:线形粒子
条带
ParticleStrip Quad:四边形粒子带(条)
ParticleStrip Line:线形粒子带(条)
光照
Particle HDRP Lit Quad:HDRP光照四边形粒子
Particle HDRP Lit Triangle:HDRP光照三边形粒子
Particle HDRP Lit Octagon:HDRP光照八边形粒子
Crop Factor:以中心缩放四个角(p1:接近0,p2接近1)
条带
ParticleStrip HDRP Lit Quad:HDRP光照四边形粒子带(条)
3D
Particle HDRP Lit Sphere:HDRP光照球体粒子
Particle HDRP Lit Cube:HDRP光照正方体粒子
Particle HDRP Lit Mesh:HDRP光照网格体粒子
Orient:朝向
***Face Camera Plane:面部相机平面
Camera Fade (Alpha):摄像机变淡(逐渐消失)
Faded大于Visible:靠近看得见,远处逐渐消失
Visible大于Faded:远处看得见,靠近逐渐消失
Screen Space Size:屏幕空间大小(根据屏幕远近改变大小)
Connect Target:连接目标
Conform to Signed Distance Field:施加向一个(有向距离场SDF)区域的力
Attraction Speed:粒子在力的作用下能达到的最大速度。 Attraction Force:力的大小,决定粒子加速度的大小,即达到最大速度所需时间。 Stick Distance:距离SDF多远的距离才开始让Stick Force生效。 Stick Force:把粒子固定在SDF中的力的大小,翻译成人话就是,当粒子到达上面指定的区域后,该区域会产生多大的力把粒子留在这里。
Conform to Sphere:施加向一个球形区域的力
Attraction Speed:粒子在力的作用下能达到的最大速度。 Attraction Force:力的大小,决定粒子加速度的大小,即达到最大速度所需时间。 Stick Distance:距离SDF多远的距离才开始让Stick Force生效。 Stick Force:把粒子固定在SDF中的力的大小,翻译成人话就是,当粒子到达上面指定的区域后,该区域会产生多大的力把粒子留在这里。
Subpixel-Anti-aliasing:抗锯齿(消除硬颗粒,模糊边缘)
节点
System
Simple Heads And Sparks:火花
Simple Heads And Trails:轨迹
Simple Ribbon:带状物
Simple Swarm Particle System:粒子群
Simple Particle System:默认模版
Empty Particle System:空模版
事件
Event:事件(事件名)
1. 在VFX加上碰撞Trigger
2. 再添加VFX Trigger Event Binder,并选上目标,事件名和Colliders(触发的碰撞体)
采样
Sample Mesh:网格采样
Placement Mode:位置
Surface表面
Sample Gradient:渐变采样
颜色可调整发光强度
噪波
Value Curl Noise 3D:3D卷曲噪波
Roughness越大感觉越重
随机
Random Number:随机值
Constant:常数,是指固定不变的数值
设置
Set Velocity Random (Per-Component):设置随机速度(每个组件)
随机值:A~B之间
Set Velocity:设置速度
Set Lifetime Random (Uniform):设置随机寿命(一致)
随机值:A~B之间,单位:秒
Set Lifetime :设置寿命
Set Position:设置位置
Set Position (Shape: XXX)
类型
Line 线 AABox 盒 Cone 圆锥 Torus 圆环 Circle 圆圈 Sphere 球
检查器-可改变为Add Position等
Set Size:设置大小
Sample Mode采样模式
Over life:曲线
Set Color:设置颜色
Sample Mode采样模式
Over life:曲线
Color
颜色可调整发光强度
继承
继承 之前保留的颜色/位置/寿命等....
inherit ....
获取
Get Attribute: particleld (Current):获取粒子ID
粒子ID:每个粒子都有一个固定的ID编号,从0开始,不重复
时间
用乘法控制速度
Total Time (Game):游戏时间(根据游戏运作的总时间)
Total Time (VFX):VFX时间(根据VFX特效组件开始运作的总时间)
Delta Time (VFX):VFX每帧时间
布尔
Branch:if
Compare:比较
比较类型
数学
Sine Wave:正弦波(正弦曲线)
sine正弦
例
Maximum:最大值
用于限制位置,值
Distance:相差距离
可以使用除法调整结果距离
Divide:除法
VFX案例
显示粒子在网格上
VFX变量
Transform
可以改变世界坐标或局部坐标
Mesh网格
预制件文件需要开启[读取/写入]
VFX组件
VFX Property Binder:变量页(添加变量的对象)
红色的V:选择变量
VFX Trigger Event Binder:触发事件
VFX预先设置
首选项-Experimental Operators/Blocks:实验性功能
可视化编程
使用
1.创建组件
Visual Scripting
Script Machine:可视化编程组件
会同时生成Variables(变量)
State Machine:脚本图状态机
2.点击New创建
类型
Embed:内置(包含在物体)
Graph:外置(独立的文件)
3. 点击Edit Graph进入可视化编程
变量
创建变量
1.输入变量名字,点击+
2.选择类型,初始值
变量类型
浮点
整数
布尔
字符串
向量2
向量:上下左右
向量3
向量:上下左右前后
数组:list of ...
物体
原文件
通用
其他
Stack:堆栈
Sheet:表格
属性类型
Graph:仅脚本图内可用的变量
Object对象:同物体可用(类似public)
可引用其他GameObject
Scene场景:场景变量
场景会生成[变量]
App软件:整个项目可用,游戏退出会重置
Save保存:应用程序退出,存储变量也会继续存在
Initial初始变量
Saved保存的变量
可用于保存设置和存档
存档
玩家位置
场景
能力
分数
设置
fps限制
*使用
获取变量:拖拽
设置变量:按住Alt+拖拽
函数/宏
Subgraph节点
仅自身脚本图可用
双击进入
左上角点击[名字]返回
左上角可添加输入输出口
Trigger Inputs:输入输出口
Data Inputs:变量输入输出口
右键-创建-可视化编程-脚本图
不同脚本图可共用
拖入或节点搜索使用
左上角点击[名字]返回
左上角可添加输入输出口
Trigger Inputs:输入输出口
Data Inputs:变量输入输出口
动画
动画过渡条件
Set Float/Int/Bool
Set Trigger
Bool和Trigger的区别
补充
Name:对应动画器内条件的名字
例
动画事件
动画:选择TriggerAnimationEvent
直接选动画下,函数为TriggerAnimationEvent
String写[事件名字](对应Animation Event的名字)
Animation Event:命名的动画事件
材质
调用Shader Graph的变量名字使用Reference的)
Get Material:获取材质
Mesh Renderer类型
Set Float/Int/Vector(向量)
Set Color:设置颜色
Set Shader:设置shader(Shader Graph)
插件
Cinemachine(在CMvam1的脚本图使用)
注意要添加API节点和类型
Set Enable:停用
Input System
On Input System Event (Float ,Button ,Vector2):对应输入事件(类型)
Float/Button/Vector2 对应操作事件的Action Type
脚本图状态机
Toggle Start:Update(每帧使用)
可多个
Make Transition:连接
按住Ctrl拖拽
Trigger Transition:条件
一个状态可以添加多少转移函数没有限制。但转移之间没有优先权的概念。必须使用条件来确保正确的转移函数被选择
Make Self Transition:自我过渡
Create Any State:任何状态
状态机节点
On Exit State:离开状态机时
On Enter State:进入状态机时
State Unit:进入状态机
双击进入
类似内嵌
补充
快捷键
Home:查看全部
***注释:Ctrl+左键拖拉
引用对象以及变量
方法1
Object创建一个GameObject变量,然后再获取他的变量
插件的节点和类型需要到[项目设置]内添加
指针(输入输出)不需要都连上
若选项内没数值,可双击此项
出现错误时,右上角Clear Errors清除
Unity的执行顺序
使用C#脚本
自定义节点
using Unity.VisualScripting; public class MyCustomNode : Unit { protected override void Definition() { } }
完成后点击[Regenerate Nodes]
输入输出端口
using Unity.VisualScripting; public class MyCustomNode : Unit { #region 端口定义 // DoNotSerialize这个Attribute应该修饰在每个端口上,因为端口并不需要序列化,这是官方提倡的 [DoNotSerialize] public ControlInput InputTrigger; [DoNotSerialize] public ControlOutput OutputTrigger; [DoNotSerialize] public ValueInput InputValue1; [DoNotSerialize] public ValueInput InputValue2; [DoNotSerialize] public ValueOutput OutputValue; #endregion // 用来保存计算的结果 private float result; protected override void Definition() { // 这里,第一个参数是该输入端口的名字,也可以称为key // ControlInput等函数会对第一个参数进行校验,校验要求同类型的key不能重复,否则会报错 // 例如,如果该节点有两个输入端口都叫input,或有两个输出端口都叫output,这是不满足校验需求的 // 但如果一个输入端口和一个输出端口都叫value,这是可以接受的 // 这里的第二个参数需要传一个函数,可以使用lambda函数,也可以自己声明一个函数;要求必须具有一个Flow类型的输入参数,并返回一个ControlOutput类型结果 InputTrigger = ControlInput("InputTrigger", flow => { // 在流执行的过程中想要获取该节点的其他值输入端口的值,需要调用GetValue函数,并传入对应的值输入端口作为参数 result = flow.GetValue<float>(InputValue1) + flow.GetValue<float>(InputValue2); return OutputTrigger; }); OutputTrigger = ControlOutput("OutputTrigger"); InputValue1 = ValueInput<float>("InputValue1"); InputValue2 = ValueInput(typeof(float), "InputValue2"); // 上述两种写法都是可以的,但我更推荐第一种,因为可以方便地指定默认值,就像这样: // InputValue1 = ValueInput<float>("InputValue1",2.0f); // 使用后一种当然也可以指定默认值,但只支持字符串形式的传参,会在内部进行额外的类型转换,性能和可读性都不佳,且不能处理比较复杂的类型,不推荐用 // 和ControlInput函数类似,ValueOutput函数的第二个参数也需要传入一个函数,需要具有一个Flow类型的参数,并返回该输出端口对应的结果 // 需要注意的是,事实上,计算的过程不一定要放在ControlInput的函数内,写在OutputValue内也是同样可行的 // 但由于下游节点每次获取该端口的值时都要执行一次计算的函数才能获取到值,因此仅适用于一些逻辑和运算简单且不会对源数据造成额外更改的函数 OutputValue = ValueOutput<float>("OutputValue", flow => result); } }
节点
事件
Start:开始时
Update:每帧执行
每帧的时间是不固定的
On Fixed Update:每帧执行(固定帧)
每帧的时间是固定的
每0.02s执行一次,1秒执行50次
***和物理相关的操作代码,都要写在FixedUpdate中
On Late Update:后续Update
只有在所有Update执行完后才执行LateUpdate
On Enable:组件调用时
Start仅会在第一次调用时生效,OnEnable会在每次调用时生效
On Disable:组件停用时
Custom Event/Custom Event Trigger:自定义事件
上方数值:添加输入/输出的变量
Input
On Mouse Down:鼠标按下时
On Mouse Up:鼠标松开时
On Mouse Drag:鼠标拖动时
On Button Input:输入映射时
name对应[项目设置]-输入管理器
Trigger
On Trigger Stay:Trigger开始重叠时
On Trigger Enter:Trigger持续重叠时
On Trigger Exit:Trigger结束重叠时
Trigger补充
需要Is Trigger=true
碰撞
On Collision Enter:碰撞开始重叠时
On Collision Stay:碰撞持续重叠时
On Collision Exit:碰撞结束重叠时
碰撞补充
需要Is Trigger=False
Contacts:发生碰撞的接触点
对应rb的Contacts
Contact Point Get Normal:获取接触点的法线方向
例:获取第一个点的法线方向
事件补充
协程执行
正常
协程执行
使用Wait For Second需开启此项
UI相关Event
操作映射相关Event
动画相关Event
状态机相关Event
常用
数组
**List of XXX:创建XXX类型的数组
Get Item List:获取数组第X个的值
Index的值=第X个的值
First Item:数组第一个值
Count Items:获取数组总数
Add Item:添加到数组
获取/找到
Game Object Get Name:获取名字
GameObject Set Name:设置名字
引用对象以及变量的方法
Component Get Game Object:获取GameObject
Find with Tag:找到有此标签的所有物体
Get Position:获取位置
Get Child:获取子类
Layer Mask:选择图层
变量
Set Variable:设置变量
Get Variable:获取变量
引用对象以及变量的方法
点击此可选择已有的变量
布尔
Comparison:比较
Negate:not
Equal:等于
Null相关
Null:无
Null Check:检测是否为无
字符串
To Lower:转换成小写
Concat:附加
例
循环
While Loop:当True时循环(body)
注意放在Update一直执行会卡死!
For Each Loop:对于每个循环
对数组的每一个执行一次
For Loop:间隔循环
注意放在Update一直执行会卡死!
Break Loop:结束循环
Switch On String:根据字符串名字执行
例:得到的信息=1,则执行1通道
Switch On Integer:根据整数执行
Select On Flow:进行X输出X
Once:DoOnce仅做一次
Sequence:按顺序执行
从0开始执行
Toggle Flow:开关[输入输出]
Start On:默认开
切换执行
Toggle Value:开关[值]
Start On:默认开
切换值
To String(Float,Int...):转换类型
时间
per second:值乘deltaTime
*Get Time:时间
计算非Update类事件的时间(例如按下松开等单次执行的事件)
*Get Delta Time:Update每帧的时间
计算Update里的时间
Get Fixed Delta Time:FixedUpdate每帧的时间
默认每帧:0.02
Wait For Seconds:等待X秒(延迟)
勾选 Unscaled 使其忽略时间缩放(子弹时间)
**使用要开启Coroutine(协程)
Wait Until:直到ture才执行
Wait For Next Frame:直到下一帧
Wait For End of Frame:直到帧结束
Set Time Scale:时间缩放(子弹事件,慢/快动作)
默认:1
越小越慢,越大越快
0等于暂停游戏(完全静止)
***Timer:计时器
勾选 Unscaled 使其忽略时间缩放(子弹时间)
***CoolDown:冷却时间
Remaining和[大于等于小于]等使用要连接[tick]
勾选 Unscaled 使其忽略时间缩放(子弹时间)
场景
**Scene Manager Load Scene:加载(重新加载)场景
例
**加载的[场景]需要在[文件]-生成设置里添加
Get Active Scene:获取激活的场景
Scene Get Name:获取场景名字
Dont Destroy On Load:在加载场景后不销毁
可以在主页面中OnStart中使用
Quit:退出
编辑模式下无法退出
功能
GameObject
***GameObject Instantiate:生成实例化(生成物体)
对象需要是预制件
粒子等
GameObject Destroy:销毁
T:延迟秒数
Set Active:显示/隐藏
可以用于显示UI面板
变换
Translate:移动
需*DeltaTime(per second)
Rotate:旋转
需*DeltaTime(per second)
Set Position:设置位置
获取位置
Set Local Scale:设置相对缩放
Set Rotation+Euler:设置旋转
Get Normalized:归一化
向量保持相同的方向,其长度为1.0
向量太小不能归一化,则返回0向量
Rotate Towards:从...旋转到...
maxDistanceDelta是每次调用旋转的距离
需要值乘DeltaTime
在Update函数中实现
如果只调用一次,只能实现瞬间移动
Get Identity:一致的旋转
InverseTransformVector:世界坐标转相对坐标
插值相关(Lerp等)
随机
Get On Unit Sphere:球形表面随机点
仅能生成在世界原点的位置
Get Inside Unit Sphere:球形范围内随机点
仅能生成在世界原点的位置
Get Value:随机值(0和1之间,7位小数点)
例:0.1234567
射线检测
***Physics ... Cast:射线检测(单个)
例
形状
Ray射线
开始于origin点,朝向direction方向
Sphere球形
Circle圆形
Box方形
Line线
某两点之间 的射线进行检测
仅能检测到 第一个被射线碰撞的物体
...cast All:射线检测(多个)
可检测射线路径上的 所有物体
Expose Raycast Hit:中断射线命中信息
绘制射线
DrawRay:绘制射线
On Draw Gizmos
Draw Cube:实体方形
Draw Wire Cube:方形边框
碰撞检测
Overlap ...:重叠检测
形状
Sphere球形
Circle圆形
Box方形
Expose Collider:中断重叠命中信息
绘制射线
DrawRay:绘制射线
On Draw Gizmos
Draw Cube:实体方形
Draw Wire Cube:方形边框
碰撞体组件
Set Enabled:碰撞开关设置
Get Bounds:获取碰撞体信息
Set Trigger:设置为触发器
Expose Bounds:中断碰撞体命中信息
Center中心点
Size大小
Extents范围:碰撞体的形状(不包含偏移和大小的值)
Min最小:碰撞体的最左下角((-x,-x)所以是最小)
Max最大:碰撞体的最右上角((x,x)所以是最大)
检测信息
Is Touching Layers:检测是否触碰到图层
使用Null Cheak可以达到更好效果
IsTouching:检测是否触碰到碰撞体
优化
Cache缓存:保存昂贵的结果并重用它,而不是在每次需要时再次获取它
例
数学
Multiply:乘
Add:加
附加:可以用于String+String
Subtract:减
插值
线性
Lerp插值:从A到B,T为Alpha
例:(非匀速),匀速需要*DeltaTime
有不同的类型
T为0到1之间
Lerp Unclamped插值(非限制):从A到B,T为Alpha
有不同的类型
T没有限制,返回值会超过A和B的范围
Move Towards:从Current移动到Target
Move Towards:从Current移动到Target(两者一致,但是浮点和有输出输入流)
maxDistanceDelta是每次调用移动的距离
需要值乘DeltaTime
例,在Update里使用
(没放在Update)如果只调用一次,为瞬间移动
平滑
SmoothStep:平滑插值(在限制处渐入渐出)
Smooth Damp:平滑阻尼
Smooth越大越慢
Round:取整数
Round类型
Floor:小数点多于5进1
Floor To Int:向下取整(取小的整数)
例:10.2=10,-10.7=-11
Ceiling:小数点小于5进1(开始则1)
Ceil To Int:向上取整(取大的整数)
例:10.2=11,-10.7=-10
***Away From Zero:从0开始
Round To Int:取整数(0.5不进1,0.6进1)
四舍五入
Abs:绝对值(正负数都等于正)
Absolute:绝对值(正负数都等于正)
|2|=2,|-2|=2
两者一致,但有输入输出流
Pow:次方
Exponentiate:次方
x的n次方
两者一致,但有输入输出流
例,F的P次方
Sqrt:平方根(开根,开方)
如果参数是负值,则sqrt失败
例:√4=2 (2x2),√25=5 (5x5),像这样开方的过程就叫开根
Normalize:归一化(将值限制在-1~1以内)
例:(100,-100)=(1,-1)
向量方向不变
向量太小不能归一化,则返回0向量
Get Sqr Magnitude:向量长度的平方
单纯比较向量之间的大小的话,建议使用Sqr Magnitude(更提高效率和节约性能)
Get Magnitude:向量的长度
Maximum:分别取出最大值
例:A=(1,0,5),B=(1,2,1)则返回(1,2,5)
Minimum:分别取出最小值
例:A=(1,0,5),B=(1,2,1)则返回(1,0,1)
Angle:求出之间的角度
默认:计算A点与B点以世界坐标原点为夹角的角度
计算以B点为顶点BA,BC为边的夹角Angle(B.位置-A.位置,B.位置-C.位置)
Dot:点积
释
用法
Cross:叉积
释
用法
Distance距离:求出之间距离
Clamp:返回值限制在最大最小值
Clamp 01:返回值限制在0和1
小于0,返回0。大于1,返回1
Sign:正数或0返回1,负数返回-1
例:999=1,0=1,-432=-1
Repeat:重复
循环值t,使输出不会大于等于length,也不会小于0
Repeat用法
例,在Update里使用
PingPong:小到大,再由大到小,循环往复
使用
类似呼吸灯效果
PingPong用法
循环值t,使输出不会大于length,也不会小于0
返回值将在0和length之间来回移动
例,在Update里使用
Atan2:Y到X的弧度
返回值为弧度
Get Rad 2 Deg:弧度转换角度
释
弧度x此节点=角度
Get Deg 2 Rad:角度转换弧度
角度x此节点=弧度
物理
补充
部分和物理相关的操作代码,都要写在FixedUpdate中
Set Velocity:设置速度
直接修改物体的速度,无视外力
Unity:addForce和velocity的区别
DEBUG:不要乘per second!
Add Force:添加力
模仿物理受力,给物体施加一个力,会收到其他力的作用
2d只有2个
Impulse:瞬间冲击力(有关质量)
Force:固定的力(有关质量)
不需要写在FixedUpdate
DEBUG:不要乘per second!
Set Constraints:设置约束(锁定)
Freeze position:冻结位置
X
Y
Freeze rotation:冻结位置
Everything/Freeze all:冻结全部
不需要写在FixedUpdate
Character Controller
Move:移动
Move不带重力
可实现跳跃功能
Simple Move:移动
Simple Move自带重力
无法实现跳跃功能
玩家在地面时返回Ture
Is Grounded:在地面
有bug,不建议使用
Set Slope Limit:斜度限制(可以走的斜坡角度)
Set Step Offest:每步偏移量(可以登上的台阶高度)
2D
Set Filp X/Y:Sprite翻转X/Y
全局
Set Target Frame Rate:帧数限制
无上限:-1
使用此节点需关闭[垂直同步]
编辑器内无效,发布后有效
控制
角色
Get Axis:操作映射(包含小数)
axis name对应[项目设置]-输入管理器
Horizontal:水平(A/D)
Vertical:垂直(W/S)
Mouse ScrollWheel:滚轮
Get Axis Raw:(线性,整数)
操作映射事件
On Button Input:按下操作映射时
name对应[项目设置]-输入管理器
鼠标
Get Mouse Button:鼠标[_]键
按下/按住t,松开f
Get Mouse Button Down:按下鼠标[_]键t
Get Mouse Button Up:松开鼠标[_]键t
对应鼠标按键
左键
(0)
右键
(1)
中键
(2)
Get Mouse Position:获取鼠标位置
Get Mouse Scroll Delta:获取鼠标滚轮值
向上滚:(0.00, 1.00)
向下滚:(0.00, -1.00)
滚的快会超出1
键盘
Get Key Down:按下[_]键t
Get Key Up:松开[_]键t
Get Key:按住和按下[_]键t
手柄
对应手柄按键
PS手柄:X
joystick button 1
PS手柄:O
joystick button 2
UI
Set Text:设置文本(旧版)
UI事件
On Button Click:点击按钮时
记得选择对应的按钮
On Slider Value Changed:滑动条数值
记得选择对应的滑动条
摄像机
Get Main Camera:获取主摄像机
Screen To World Point:屏幕位置到世界坐标
World To Screen Point:世界坐标到屏幕位置
音频
Play one shot:播放一次
编程案例
物体
均速移动位置
//速度 float speed = 1; //得出的合理的移动距离 float distance = speed * Time.deltaTime; //this位移 this.Transform.Translate(distance,0,0);
2D
角色
操作
左右移动
方法1:设置速度
分辨左右
方法1:缩放(碰撞体会跟着旋转)
方法2:翻转Sprite的X(碰撞体不会跟着旋转)
跳跃
方法1:脚部通过标签检测(脚部检测脚本图)
施加力跳跃(角色脚本图)(不稳定)
脚部检测注意开启Is Trigger
方法2:脚部通过标签检测(脚部检测脚本图)
推荐 优化操作: ***后续可把输入换到Update,物理连接FixedUpdate
设置Y速度(角色脚本图)
脚部检测注意开启Is Trigger
长按跳跃+二段跳
跳跃判定
二段跳
长按跳跃
检测上一次操作的方向
冲刺
冲刺中不可切换方向
在Update的输入
滑墙
墙跳(爬墙跳,蹬墙跳)
在Update的输入
修复在二段跳和跳跃中消耗掉[跳跃次数]:在跳跃中前面加上墙跳中不可跳跃
墙跳后恢复二段跳
手感优化
掉落速度
AI
巡逻,(巡逻目标为Transform数组)
功能
跟随鼠标在视角的位置
Update事件的计时器(+=)
不完全正确
场景
角色死亡,重新加载场景
UI
显示变量文本
在对应的[文本GameObject]使用
控制面板
默认
esc面板
数学
Lerp用法(非均速),匀速需要*DeltaTime
动画
移动
跳跃(一段跳)
在地面:脚步检测
二段跳
掉落
在地面:脚步检测
编程
变量(值类型)
浮点:使用加f
float
例:1.5f
整数
int
666
字符串
string
例:("呵呵")
布尔
bool
(true)
(false)
数组:后面加[]
变量[]
例:float[]
向量
V2
Vector2.zero
(0,0)
Vector2.one
(1,1)
X轴方向
Vector2.right
(1,0)
Vector2.left
(-1,0)
Y轴方向
Vector2.up
(0,1)
Vector2.down
(0,-1)
V3
Vector3.zero
(0,0,0)
Vector3.one
(1,1,1)
X轴方向
Vector3.right
(1,0,0)
Vector3.left
(-1,0,0)
Y轴方向
Vector3.up
(0,1,0)
Vector3.down
(0,-1,0)
Z轴方向
Vector3.forward
(0,0,1)
Vector3.back
(0,0,-1)
运算符
加+
+=
X+=1,则等于 X=X+1
if,else
or
||
在回车键上面
and
&&
not
!
补充
逻辑运算(if等)用要==,&&,||
数学
向量长度
向量1.magnitude
例:向量1-向量2=向量3(之间的距离),float 名字 = 向量3.magnitude
距离
Vector3.Distance(向量1,向量2)
长度(数量,大小)
Length
例:XXX.Length
反向
0 -
例:1,0-1=-1
标准化(缩放向量,长度为1)
normalized
组件
Audio音频
AudioSource:音频
不同的音频
pulibc AudioClip 名字,指定音频
多个则public多个
获取组件后,名字.Clip
播放
GetComponent<AudioSource>().Play();
暂停
GetComponent<AudioSource>().Pause();
停止(结束)
GetComponent<AudioSource>().Stop();
是否在播放中
GetComponent<AudioSource>().isPlaying;
播放一次
GetComponent<AudioSource>().PlayOneShot();
AudioSource组件面板下的均可设置
静音
GetComponent<AudioSource>().mute = true;
循环
GetComponent<AudioSource>().loop = true;
音量
GetComponent<AudioSource>().volume = 5;
C#脚本
脚本名
脚本名.public值
Physics物理
Rigidbody:刚体
物理都需要放在FixedUpdate里
官方文档:脚本 API
补充
C#脚本命名不能有空格,显示里大号会自动空格
脚本就是Class(类)
引用对应的插件或脚本,需要在上方using XXXXX;
键映射
输入Input
鼠标
左键
(0)
右键
(1)
中键
(2)
鼠标按下
Input.GetMouseButtonDown(0)
鼠标松开
Input.GetMouseButtonUp(0)
键盘
键盘按下
Input.GetKeyDown(键)
键盘松开
Input.GetKeyUp(键)
键位
KeyCode.键
例:KeyCode.W
时间
游戏时间
time.time
返回值
delta值距上次的时间差
time.deltatime
返回值
功能
实例
GameObject 实例名 = Object.Instantiate(指定的[原物体],指定的[父类])
例:GameObject 实例A = Object.Instantiate(A,父类物)
补充
父类可指定为[空对象],方便继承父类移动旋转缩放
无父类则null
可见/隐藏
是否可见?
ActiveSelf
设置可见/隐藏
SetActive
true为可见,false为不可见
定时器
调用事件/函数(单次)
this.Invoke("事件名/函数",延时多少秒)
例:this.Invoke("start",3)
调用事件/函数(循环)
this.InvokeRepeating("事件名/函数",延时多少秒,循环间隔多少秒)
例:this.InvokeRepeating("start", 1, 2)
是否调用中?
IsInvoking(事件/函数)
取消调用
CancelInvoke(事件/函数)
( )空则取消脚本内全部调用
补充
不要放在Update!
销毁
Object.Destroy(this.GameObject)
Destroy(this.GameObject)
位置
世界坐标
物体.Transform.position
*相对坐标
物体.Transform.localposition
世界旋转
物体.Transform.eulerAngles
*相对旋转
物体.Transform.LocalEulerAngles
*世界缩放
物体.Transform.Scale
*相对缩放
物体.Transform.LocalScale
*位移XYZ
Translate(X,Y,Z(,Space.world世界坐标/Space.Self相对坐标))
例:this.Transform.Translate(8,10,0)
后面不写默认为Self
*旋转XYZ
Rotate(X,Y,Z(,Space.world世界坐标/Space.Self相对坐标))
例:this.Transform.Rotate(0,45,0)
后面不写默认为Self
面向(朝向)位置
LookAt(物体.Transform)
例:this.Transform,LookAt(物体.Transform)
引用/获取
**引用脚本自身物体
this
父子级
获取父类
Transform 名字 = this.transform.parent
引用父类
this.Transform.Parent.GameObject
获取子级/路径子级
Transform 名字 = this.transform.Find("子级/子级/子级...")
引用子级/路径子级
this.Transform.Getchild(子级名字).GameObject
设置新的父级
this.Transform.SetParent(名字)
设置为父级
this.Transform.SetParent(null)
null等于空 所以自身变为父级
**引用物体
public GameObject target
例:public GameObject target,然后unity里指定目标
GameObject.Find("Unity里物体名字")
例:GameObject 自定义名字 = GameObject.Find("物体名字")
组件
获取组件
组件类型 名字 = 物体.GetComponent<组件类型>()
例:AudioSource bgm = this.GetComponent<组件类型>()
获取其他物体的组件
public 物体 名字
选择物体,再获取组件
*引用其他物体的组件
public 组件类型 名字
选择物体,自动找到该物体的组件
例:public AudioSource bgm,然后unity里指定目标
组件类型与api
全局设置
设置帧数
Application.targetFrameRate = 60;
常用
*打印文字
例:Print("呵呵")
打印多位小数点
("名字.ToString("f小数点后多少位")")
例:print("ShuZi.ToString("f3")")
Debug.Log
例:Debug.Log("呵呵")
***公开的
public
例:public float 名字 = 1
可以被调用
*注解(解释意思)
[ Tooltip("速度") ]
分组
[Header("X")]
限制public的最大最小值
[Range(X,X)]
私有的
private
不可以被调用
创建/赋值
new
结束
return
后面的代码不会被执行
随机
随机数
Random.Range(最小值,最大值(不包含最大值))
例:int shuzi = Random.Range(0,100)
事件void
*GameBegin
Awake:和start一样但优先于Start
组件启用时 会生效
Start
组件启用时 仅会生效一次
*事件tick
Update
FixedUpdate
**自定义事件
void 事件名字()
例:void Attack()
使用事件
事件名字()
例:Attack()
组件启用时
OnEnable
组件禁用时
OnDisable
组件重叠时(需开启触发器)
OnTriggerEnter(Collider other)
组件结束重叠时(需开启触发器)
OnTriggerExit(Collider other)
摧毁时
OnDestroy
游戏
镜头
镜头类型
打击感
顿帧(停顿)
镜头
晃动
滞后:平滑跟随
音效
大小
设备震动
人物闪烁
闪白/闪红...
氛围感
后期盒子
大气雾
灯光
音乐
高低音调