Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机

这篇具有很好参考价值的文章主要介绍了Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前置笔记(由浅入深)

Unity 游戏开发、01 基础篇


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 组件,适合角色动画

旧版

  1. 创建 Animation | 检查器选项 | Debug模式 | 勾选 Legac

  2. 拖动至物体节点,添加 Animation 组件

  3. 选中动画物体节点,在 Animation 窗口(Window | Animation | Animation )添加属性

    可以添加子节点的属性

  4. 进入录制模式,插入关键帧,调整节点属性

细节

  • 非关键帧部分属性是插值计算出来的
  • Animation 窗口每 60 帧相当于 1 秒
  • 动画播放时间长度与游戏帧率无关

动画曲线

默认插值计算的动画曲线不是直线(匀速运动),Animation | Curves 看到各属性字段对应的曲线变化

  • F键完全显示所有曲线
  • CTRL + 滚轮(横轴缩放)
  • SHIFT + 滚轮(纵轴缩放)

修改曲线过渡

  1. 进入 Recording Mode

  2. 左侧选中 Position.x,仅显示 x 属性的曲线

  3. 编辑关键帧,右键 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,不同的状态有不同的动作

  1. 创建 Animator Controller 文件,拖动至物体节点,创建 Animator 组件
  2. 双击动画状态机文件,打开编辑窗口
  3. F键完全显示所有状态

状态过渡

Entry是状态的起点,默认状态显示为橙色

  1. 选择节点,右键添加过渡
  2. 将动画(不是Legacy) 绑定到各节点上的 Motion

利用 状态参数 控制状态机的运行

  1. 添加状态参数(左侧面板)
  2. 修改路径触发条件(检查器窗口)

路径属性 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 触发 OnStateExitOnStateExit 先于条件检测发生

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);
}

控制物体移动

  1. 可以通过获取状态机的变量值进行判断
  2. 访问状态机当前层次正在播放的状态节点
  3. 添加一个新的状态变量,在关键节点利用状态机行为修改
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 地形

地表

  1. Create | Terrain Layer

  2. 指定 Diffuse 主帖图;Normal 法线贴图

  3. Terrain 组件 | Paint Terrain | Edit Terrain Layers

    第一个表面是默认表面


花草

Grass Texture 自动扭转对准摄像机,远了不渲染

  • Terrain 组件 | Paint Details | Edit Details
  • SHIFT 消除;CTRL 消除当前类型花草

植树同理(预制体,3D物体)


造山


挖坑

地表最低海拔为0,要挖坑必须先抬高地势文章来源地址https://www.toymoban.com/news/detail-708026.html


到了这里,关于Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 02py游戏开发基础

    版本 pygame 2.4.0 (SDL 2.26.4, Python 3.8.2) Hello from the pygame community. https://www.pygame.org/contribute.html set_mode() set_mode()方法用于创建一个窗口或全屏幕显示,它的函数签名为: 其中,set_mode()方法有三个参数,分别为: resolution:表示窗口的分辨率,它是一个二元组,包含了窗口的宽度和

    2024年02月09日
    浏览(45)
  • unity开发知识点小结02

    虚拟轴就是一个数值在-1 1内的轴,这个数轴上重要的数值就是-1,0和1。当使用按键模拟一个完整的虚拟轴时需要用到两个按键,即将按键1设置为负轴按键,按键2设置为正轴按键。在没有按下任何按键的时候,虚拟轴的数值为0;在按下按键1的时候,虚拟轴的数值会从0 -1进行

    2024年02月07日
    浏览(47)
  • 【Unity】Unity开发学习和项目实践02——创建第一个Unity项目和游戏物体

    创建第1个Unity项目 打开Unity hub,点击新项目 以下有四处地方需要注意选择: 1.Unity编辑器版本 2.项目模板 3.项目名称 4.项目保存位置 点击创建项目 ok,进入编辑器了 把编辑器界面布局稍微改一下,改成2by3 点击Edit 点击 project settings,这是对我们所创建工程的设置 此外还有对

    2024年01月25日
    浏览(55)
  • 《游戏-02_3D-开发》之—基础框架与摄像机跟随

    导入Xml文档, ?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"? Root   TalkInfo     Item Idx=\\\"0\\\" Title=\\\"见到公子\\\" Msg=\\\"我叫粘贴,我们村叫粘家村,是这个村子的护卫,最近村子附近有倭寇出没,请勇士出手相助!_驱逐倭寇,责无旁贷!他们的位置在哪?_他们在城堡南面_等我的好消息吧!\\\" FHead=\\\"2\\\" SH

    2024年01月25日
    浏览(44)
  • 19. Unity - 2D游戏开发小记02 --- 伪透视图、2D物体碰撞、瓦片地图碰撞、素材缩放平铺

    1. 伪视图 在2D游戏开发当中,当角色移动时,会发生物体与物体之间的前后遮挡。2D视图中的前后关系是由 Y 轴决定,y 值越小物体越靠前。unity的渲染应开启根据 y 值的大小进行渲染才能保证正确的遮挡效果,在菜单栏 Editor–project setting -- Graphic 中按照下图方式进行设置:

    2024年02月02日
    浏览(93)
  • 23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理、场景搭建插件(ProGrids,ProBuilder,Polybrush)

    1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在 层级窗口 添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的

    2024年02月05日
    浏览(57)
  • Unity 讯飞 之 讯飞星火大模型的简单封装和使用(补充讯飞大模型识图功能)

    目录 Unity 讯飞 之 讯飞星火大模型的简单封装和使用(补充讯飞大模型识图功能) 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、案例简单实现步骤 六、关键代码 七、案例下载地址 补充、讯飞大模型-图像识别 Unity 工具类,自己整理的一些游戏开发可能用到的

    2024年02月04日
    浏览(59)
  • Unity 简单联网游戏(双人五子棋)开发(二)

    前言:之前我们尝试开发了一个两个比拼分数的不像游戏的超简单的弱数据联网游戏,主要是想让一些没开发过联网游戏的人了解一下最基础的流程;不过有人仍然有人私信我表示看不懂,所以这次我们再开发一个类似的游戏,为了这个项目更像是一个游戏,而不是不像游戏

    2024年02月08日
    浏览(40)
  • Pygame 游戏开发 基础知识

    Pygame 是一个跨平台的 Python 模块, 专为电子游戏设计. Pygame 在已经非常优秀的 SDL 库的基础上增加了许多功能. 安装命令: 导入 Pygame 包: pygame.locals 模块包括了 pygame 中定义的各种常量. 导入所有常量 pygame.init() 是启动 pygame 并初始化的命令, 类似 python 中的 __init__ . 例子: pygame.

    2023年04月25日
    浏览(50)
  • 神经网络基础-神经网络补充概念-02-逻辑回归

    逻辑回归是一种用于二分分类问题的统计学习方法,尽管名字中带有\\\"回归\\\"一词,但实际上它用于分类任务。逻辑回归的目标是根据输入特征来预测数据点属于某个类别的概率,然后将概率映射到一个离散的类别标签。 逻辑回归模型的核心思想是将线性回归模型的输出通过一

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包