Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机
前置笔记(由浅入深)
2 场景操作
3D场景
- Q 手型工具(鼠标中键):上下左右移动场景
- ALT + 鼠标左键:以视图为中心旋转
- 鼠标右键:以观察者为中心旋转
- SHIFT + Gizmo方块:Y轴归位
- 物体节点 + F:观察者定位至物体
窗口布局
3D项目一般窗口布局如下

3 全局光照
全局光照GI(Glballlumination)(编辑模式下才能生成)
- Window | Rendering | Lighting Setting
- 光照强度因子 Intensity Multiplier
- Generate Lighting,生成一份光照数据(在场景目录)
4 3D物体
原生3D
- Plane、Quad 仅单面可见
- 用于度量
- 用于占位(原型设计)
增量移动
按住CTRL(默认0.25单位增量)

顶点对齐
一个物体的顶点(Vertex)与另外物体的顶点重合
选择一个物体按住 V ,拖动一个顶点至其他模型的顶点上
打开 shaded wireframe 可以看到各个模型的顶点

物体多选
- Hierarchy窗口,按CTRL或SHIFT
- Scene窗口,按CTRL选择
- Scene窗口,鼠标框选
5 材质
材质
球形预览:材质包含了 光照计算,光线不同角度照射时,显示效果不同
不同贴图的功能
- Albedo 反照率贴图,用于表现本体颜色
- Metallic 金属度贴图,用于表现哪些部位,更有金属光泽
- Normal Map 法线贴图,用于表现凹凸细节
- Specular 镜面贴图,用于表现镜面反射
着色器
着色器是一个程序,一个算法。会综合考虑以下因素
- AIbedo 物体本来的颜色
- 入射光的角度、颜色、强度
- Metallic / Specular / Normal Map / Hight Map 等
决定物体表面的实际显示效果,着色(上色、染色)。默认材质选择的是标准着色器算法
标准着色器算法里确定了顶点坐标与贴图对应关系(不同三角面对应贴图中的不同位置)
天空盒
天空盒也是一种材质
- 将贴图的 Wrap Mode 设为 Clamp 模式
- 创建 Material,选择 Shader:Skybox 6 Sided
- 设置对应的贴图 Front/Back/Left/Right/Up/Down
- 由六张贴图组成的一个无穷大正方体
6 物体运动
转向轴心投影位置
public GameObject target;
void Start()
{
Vector3 pos = target.transform.position;
pos.y = 0;
transform.LookAt(pos);
}
模型调整
导入Unity后,模型的 Axis、Pivot、Size 都是确定的,最好在建模软件中修改,也可以用空节点套子节点,调整子节点模型方向与空节点Z轴对齐
7动画
类别
- 旧版的,Legacy ,对应 Animation 组件
- 新版的,状态机动画 ,对应 Animator 组件,适合角色动画
旧版
创建 Animation | 检查器选项 | Debug模式 | 勾选 Legac
拖动至物体节点,添加 Animation 组件
选中动画物体节点,在 Animation 窗口(Window | Animation | Animation )添加属性
可以添加子节点的属性
进入录制模式,插入关键帧,调整节点属性
细节
- 非关键帧部分属性是插值计算出来的
- Animation 窗口每 60 帧相当于 1 秒
- 动画播放时间长度与游戏帧率无关
动画曲线
默认插值计算的动画曲线不是直线(匀速运动),Animation | Curves 看到各属性字段对应的曲线变化
- F键完全显示所有曲线
- CTRL + 滚轮(横轴缩放)
- SHIFT + 滚轮(纵轴缩放)
修改曲线过渡
进入 Recording Mode
左侧选中 Position.x,仅显示 x 属性的曲线
编辑关键帧,右键 Both Tangent | Linear 改为线性(匀速运动)
其他操作:添加、删除关键帧,Tangent 曲线手柄等

动画事件
当播放到某一帧时,触发一个回调方法
在时间轴下灰色部分右键 | Add Animation Event (左侧按钮)


事件调用的函数可以获取一个参数
Unity - Scripting API: AnimationEvent (unity3d.com)

public void DropOnGround(float time)
{
Debug.Log(time);
}
如果不自动播放,可以通过API获取Animation组件手动播放动画列表
private void Start() => GetComponent<Animation>().Play();
8动画状态机
状态机
Mecanim 一个基于状态机控制的动画系统
状态机:用算法控制一个有多种状态的事物或系统,在各种状态间切换的机制
一个人物模型可能有以下几种状态:idle、walk、jump、swim、attack,不同的状态有不同的动作
- 创建 Animator Controller 文件,拖动至物体节点,创建 Animator 组件
- 双击动画状态机文件,打开编辑窗口
- F键完全显示所有状态
状态过渡

Entry是状态的起点,默认状态显示为橙色
- 选择节点,右键添加过渡
- 将动画(不是Legacy) 绑定到各节点上的 Motion
利用 状态参数 控制状态机的运行
- 添加状态参数(左侧面板)
- 修改路径触发条件(检查器窗口)
路径属性 Has Exit Time (退出时间)
当前路径若同时设置退出时间与条件,时间到时会先检查条件,条件满足再退出,不满足的话当前路径会失效,后续再满足条件也不会走这条路
- Exit Time (秒、轮)
- Fixed Duration(勾是秒、不勾是轮)

脚本修改状态参数
private Animator animator;
private void Start()
{
animator = GetComponent<Animator>();
}
private void Update()
{
// animator.SetBool("isDancing", Input.GetKey(KeyCode.Space));
if (Input.GetKeyDown(KeyCode.Space))
animator.SetBool("isDancing",
!animator.GetBool("isDancing"));
}
状态机行为
进入状态、每次Update、退出状态时的回调;状态节点 | Add Behaviour
Has Exit Time 触发 OnStateExit , OnStateExit 先于条件检测发生

override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log("进入了 Dancing 状态");
}
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
animator.SetBool("isDancing",false);
}
控制物体移动
- 可以通过获取状态机的变量值进行判断
- 访问状态机当前层次正在播放的状态节点
- 添加一个新的状态变量,在关键节点利用状态机行为修改
public float walkSpeed = 0;
public float rollSpeed = 0;
private Animator anim;
private void Awake()
{
anim = GetComponent<Animator>();
}
private void Update()
{
if (anim.GetBool("Walk_Anim"))
transform.Translate(0,0,walkSpeed * Time.deltaTime);
bool flag = anim.GetCurrentAnimatorStateInfo(0).IsName("closed_Roll_Loop");
if (flag)
transform.Translate(0,0, rollSpeed * Time.deltaTime);
}
9 地形
地表
Create | Terrain Layer
指定 Diffuse 主帖图;Normal 法线贴图
Terrain 组件 | Paint Terrain | Edit Terrain Layers
第一个表面是默认表面
花草
Grass Texture 自动扭转对准摄像机,远了不渲染
- Terrain 组件 | Paint Details | Edit Details
- SHIFT 消除;CTRL 消除当前类型花草
植树同理(预制体,3D物体)
造山

挖坑
地表最低海拔为0,要挖坑必须先抬高地势
Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机的更多相关文章
- Unity游戏开发面试基础知识
面试第一次知识总结: 一.Unity基本操作 1.unity提供哪几种光源? 点光源.平行光.聚光灯.区域光. 2.物体发生碰撞的必要条件什么? 两个物体必须有碰撞体Collider组件,一个物体上必 ...
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...
- 【Unity游戏开发】浅谈Lua和C#中的闭包
一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...
- 喵的Unity游戏开发之路 - 推球:游戏中的物理
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- 喵的Unity游戏开发之路 - 多场景:场景加载
如果丢失格式.图片或视频,请查看原文:https://mp.weixin.qq.com/s/RDVMg6l41uc2IHBsscc0cQ 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始 ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)
本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (四)2018.4.3更新
本帖是延续的:C# Unity游戏开发--Excel中的数据是如何到游戏中的 (三) 最近项目不算太忙,终于有时间更新博客了.关于数据处理这个主题前面的(一)(二)(三)基本上算是一个完整的静态数据处 ...
- 喵的Unity游戏开发之路 - 玩家控制下的球的滑动
- 喵的Unity游戏开发之路 - 轨道摄像机
前言 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3 ...
- 喵的Unity游戏开发之路 - 在球体上行走
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
随机推荐
- 如何使用C++ 在Word文档中创建列表
列表分类是指在Word文档中使用不同格式排序的列表,来帮助我们一目了然地表达出一段文字的主要内容.比如,当我们描述了某个主题的若干点,就可以用列表把它们一一表达出来,而不是写成完整的段落形式.同时,列 ...
- 文档在线预览(三)使用js前端实现word、excel、pdf、ppt 在线预览
@ 目录 实现方案 一.docx文件实现前端预览 1.docx-preview 2.Mammoth 二.PDF文件实现前端预览 1.pdf.js 2.pdfobject.js 3.vue-pdf 4. ...
- Kubernetes(k8s)健康性检查:livenessprobe探测和readinessprobe探测
目录 一.系统环境 二.前言 三.Kubernetes健康性检查简介 四.创建没有探测机制的pod 五.添加livenessprobe探测 5.1 使用command的方式进行livenessprob ...
- Java(包机制、doc、Scanner对象)
包机制 本质:文件夹 用于区别类名的命名空间 一般利用公司域名倒置作为包名 import与通配符* 导入包 例: import java.util.Scanner; import com.xxx.xx ...
- ffuf的使用
ffuf:模糊测试 使用 ffuf 进行枚举.模糊测试和目录暴力破解 安装 https://github.com/ffuf/ffuf 建议:https://github.com/danielmiess ...
- 某表格常用api
这是一个神奇的网站,可作为免费的数据存储平台,已白嫖多年 通过调用接口可以方便的实现增删改查.修改www前缀为vip,还能嫖vip服务器 我常常用来写入程序的日志记录,记录/更新一些关键key 不需要 ...
- MySQL中都有哪些锁?
MySQL中都有哪些锁 为什么需要锁 在计算机系统中,锁(Lock)是一种同步机制,用于控制对共享资源的访问.它确保在任何给定时间内只有一个线程能够访问受保护的共享资源,从而避免了由并发访问导致的数据 ...
- 前端下拉框组件CCDropDownFilter下拉框 筛选框 仿美团下拉筛选框
快速实现下拉框 筛选框 仿美团下拉筛选框, 请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12421 效果图如下: # 下拉框使用方法 ...
- TheTransformerPlaybookforNLPandLanguageUnderstanding
目录 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.1.1 准备工作:环境配置与依赖安装 3.1.2 核心模块实现 ...
- 构建高可用性的 SQL Server:Docker 容器下的主从同步实现
摘要:本文将介绍如何在 Docker 环境下搭建 MS SQL Server 的主从同步,帮助读者了解主从同步的原理和实现方式,进而提高数据的可靠性和稳定性. 一.前言 在当今信息化的时代,数据的安全 ...