当前位置: 首页 > article >正文

unity学习笔记

一、动画图层

概述:动画图层允许你组织和混合多个动画,使其在不同的层级中进行独立控制。

           Animator Controller中可以包含多个动画图层,每个图层可以独立控制一组动画。

           每个动画图层都有一个权重,用于控制该层对最终混合的动画产生的影响程度。

1.三个默认状态:

Entry(进入状态):

作用:Entry是状态机中的默认起始状态,表示进入状态机时的初始状态。

用途:Entry状态中可以定义一些进入状态机时需要执行的初始化逻辑,例如设置初始参数或播放初始动画。

注意事项:只能有一个Entry状态,状态机进入时会自动转换到该状态。

Any State(任意状态):

作用:Any State是一个特殊的状态,它可以作为过渡条件的来源状态。任何从AnyState发起的过渡都不需要特定的条件,可以在任何时候触发。

用途:主要用于实现一些在任何状态下都需要执行的逻辑,例如全局的输入检测或通用的过渡。

注意事项:在从Any State发起的过渡中,不需要指定具体的条件,它会在任何状态下都触发。

Exit(退出状态):
作用:Exit是状态机中的默认结束状态,表示退出状态机时的状态。

用途:在Exit状态中可以定义一些退出状态机时需要执行的清理逻辑,例如保存状态、停止动画等

注意事项:只能有一个Exit状态,状态机退出时会自动转换到该状态。

2.子状态机

在动画器中可以创建子状态机,可以将类型相同的动画发在一个状态机中,子状态机之前可以相互过渡

3.权重

每个动画图层都有一个权重属性,该属性控制层对最终混合的动画的影响程度。通过脚本或动画状态机中的参数可以调整权重。

示例说明:现在新创建一个图层,为其添加一个手臂挥舞的动画,在旧的图层里面有一个站立的动画。由于新建的图层权重为0,当运行游戏时会只播放旧层的动画。

当把新的图层的权重调节到0.5时,当运行游戏时这两个动画都不会播放完整。

当把新图层的权重调节到1.0时,运行游戏时会完全覆盖旧的动画。

4.遮罩

图层遮罩可以更加精细地控制角色或对象的动画行为,使得在不同的图层上可以有不同的动画效果。比如a图层的中有跑步动画,b图层中挥手动画,现在希望挥手只是作为手臂上的挥手用b图层控制,而跑步动画作用于身体其他地方用a图层控制,要做到这个效果就得使用图层遮罩。

示例:

在项目目录下创建一个骨骼遮罩Avatar,其中绿色表示做动画的区域,默认是所有区域都做动画,点击绿色区域会切换为红色,红色表示该区域不做动画。

为了达到要求只需要将手臂设置为绿色,意思是只做手臂上的动画

使用方式,将这个创建的遮罩文件拖拽到对应图层设置中的遮罩区域。

这样当游戏运行时,手臂上会执行挥手的动画,其他部位执行跑步的动画,效果是一边跑步一边挥手。

二、反向动力学

在Unity中,反向动力学(Inverse Kinematics,简称IK)是一种计算手段,用于逆向求解骨骼系统中末端效应器(End Effector)的位置,以实现更自然、更符合预期的角色动画。反向动力学通常用于处理角色的手、脚、头部等部位的动作,以便它们能够正确地跟随目标位置。

示例说明:想让玩家头部一直看向某一个物体。

想要使用这个反向动力学,就必须在对应的图层中打开IK处理

在线场景中有一个球体,在人物的脚本里面获取这个球体
 public Transform Sphere;

然后使用 OnAnimatorIK (int layerIndex)方法,当要使用IK事件,就要把其相关的写在这个方法里。

 private void OnAnimatorIK(int layerIndex)
    {
        //设置头部
        animator.SetLookAtWeight(1);
        animator.SetLookAtPosition(Sphere.position);
    }

运行游戏后,无论人物如和移动,头部都会看向球体,直到无法看见


http://www.kler.cn/news/160045.html

相关文章:

  • 漏洞扫描服务是什么
  • 【栈】车队
  • Intellij idea 内存不够用了,怎么处理?
  • 【CSP】202305-1_重复局面Python实现
  • Java利用UDP实现简单的双人聊天
  • python实现一个计算器
  • Android的前台服务
  • 【海思SS528 | VDEC】MPP媒体处理软件V5.0 | 视频解码模块——学习笔记
  • Spring-Boot-ReactiveRedisTemplate自动配置定义和序列化方式选择
  • vue2 组件内路由守卫使用
  • oracle java.sql.SQLException: Invalid column type: 1111
  • Wifi adb 操作步骤
  • 《计算机算法设计与分析(第5版)》笔记
  • Linux学习——模拟实现mybash小程序
  • maven生命周期回顾
  • vue中的动画组件使用及如何在vue中使用animate.css
  • 西南科技大学模拟电子技术实验三(BJT单管共射放大电路测试)预习报告
  • 【java】利用日期函数,打印日期表
  • docker快捷控制
  • 一下午终于配好:如何用vs code连接远程主机jupyter server(notebook/lab)
  • HBase整合Phoenix
  • Java异步编程之利器:Guava异步编程实践
  • python中的迭代器、生成器和装饰器(一)
  • Java不可变集合
  • 你敢信!贪吃蛇游戏居然能插入到富文本编辑器里!
  • 查看mysql 或SQL server 的连接数,mysql超时、最大连接数配置
  • 2023亚太地区五岳杯量子计算挑战赛
  • 智能优化算法应用:基于饥饿游戏算法无线传感器网络(WSN)覆盖优化 - 附代码
  • JavaScript中使用JSON的基本操作示例
  • 【C#学习笔记】委托与事件 (从观察者模式看C#的委托与事件)