Unity动画系统(4)
6.3 动画系统高级1-1_哔哩哔哩_bilibili
p333-




声音组件添加

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RobotAnimationController : MonoBehaviour
{
[Header("平滑过渡时间")]
[Range(0,3)]
public float dampTime = 3f;
[Header("移动速度")]
public float speed = 3f;[Header("转身速度")]
public float turnSpeed = 10f;
//虚拟轴
private float hor, ver;
//动画组件
private Animator ani;
//声音组件
private AudioSource aud;//虚拟按键
private bool sneak;private void Awake()
{
ani = GetComponent<Animator>();
aud = GetComponent<AudioSource>();
}
private void Update()
{
hor = Input.GetAxis("Horizontal");
ver = Input.GetAxis("Vertical");
//获取虚拟按键
sneak = Input.GetButton("Sneak");//if (sneak) {
// ani.SetBool("Sneak", sneak);
//}
//设置动画参数
ani.SetBool("Sneak", sneak);
//只要按下一个方向键,就走
if (hor != 0 || ver != 0)
{
//设置Speed,角色动起来
ani.SetFloat("Speed", 5.6f, dampTime, Time.deltaTime);
//将向量转换成四元数
Quaternion targetQua = Quaternion.LookRotation(new Vector3(hor, 0, ver));//lerp过去
transform.rotation = Quaternion.Lerp(transform.rotation, targetQua, Time.deltaTime * turnSpeed);
}
else {
//停下来
ani.SetFloat("Speed", 0f);
}
//判断当前是否是Locomotion状态
bool isLocomotion=ani.GetCurrentAnimatorStateInfo(0).IsName("Locomotion");
if (isLocomotion)
{
//判断脚步声音是不是已经开始播放了
if (!aud.isPlaying) {
//播放声音
aud.Play();
}
}
else {
//停止声音
aud.Stop();
}
}
}

边走路边喊叫 动画分层的应用

Mask


模型正对我们

非人型遮罩------手动勾选




override覆盖上一层的动画



using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RobotController : MonoBehaviour
{
[Header("平滑过渡时间")]
[Range(0, 3)]
public float dampTime = 3f;
[Header("移动速度")]
public float speed = 3f;[Header("转身速度")]
public float turnSpeed = 10f;
//虚拟轴
private float hor, ver;
//动画组件
private Animator ani;
//声音组件
private AudioSource aud;[Header("喊叫声音片段")]
public AudioClip shoutClip;//虚拟按键
private bool sneak,shout;private void Awake()
{
ani = GetComponent<Animator>();
aud = GetComponent<AudioSource>();
}
private void Update()
{
hor = Input.GetAxis("Horizontal");
ver = Input.GetAxis("Vertical");
//获取虚拟按键
sneak = Input.GetButton("Sneak");
shout = Input.GetButtonDown("Shout");
//if (sneak) {
// ani.SetBool("Sneak", sneak);
//}
//设置动画参数
ani.SetBool("Sneak", sneak);
if (shout) {
//触发参数shout
ani.SetTrigger("Shout");
//播放喊叫声音
AudioSource.PlayClipAtPoint(shoutClip,transform.position);
}//只要按下一个方向键,就走
if (hor != 0 || ver != 0)
{
//设置Speed,角色动起来
ani.SetFloat("Speed", 5.6f, dampTime, Time.deltaTime);
//将向量转换成四元数
Quaternion targetQua = Quaternion.LookRotation(new Vector3(hor, 0, ver));//lerp过去
transform.rotation = Quaternion.Lerp(transform.rotation, targetQua, Time.deltaTime * turnSpeed);
}
else
{
//停下来
ani.SetFloat("Speed", 0f);
}
//判断当前是否是Locomotion状态
bool isLocomotion = ani.GetCurrentAnimatorStateInfo(0).IsName("Locomotion");
if (isLocomotion)
{
//判断脚步声音是不是已经开始播放了
if (!aud.isPlaying)
{
//播放声音
aud.Play();
}
}
else
{
//停止声音
aud.Stop();
}
}
}
AudioListener挂载在角色身上




参数不能超过1个
IK方向动力学
Inverse kinematics
反应的是一种由手部带到肩部的运动形式,在这个运动中,运动以手部这个自由端为起始,当手部进行运动时会自然的带动固定端肩部的运动。

比如别人拉起你的手
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RobotController : MonoBehaviour
{
[Header("平滑过渡时间")]
[Range(0, 3)]
public float dampTime = 3f;
[Header("移动速度")]
public float speed = 3f;[Header("转身速度")]
public float turnSpeed = 10f;
//虚拟轴
private float hor, ver;
//动画组件
private Animator ani;
//声音组件
private AudioSource aud;[Header("喊叫声音片段")]
public AudioClip shoutClip;//虚拟按键
private bool sneak,shout;private void Awake()
{
ani = GetComponent<Animator>();
aud = GetComponent<AudioSource>();
}
private void Update()
{
hor = Input.GetAxis("Horizontal");
ver = Input.GetAxis("Vertical");
//获取虚拟按键
sneak = Input.GetButton("Sneak");
shout = Input.GetButtonDown("Shout");
//if (sneak) {
// ani.SetBool("Sneak", sneak);
//}
//设置动画参数
ani.SetBool("Sneak", sneak);
if (shout) {
//触发参数shout
ani.SetTrigger("Shout");
}//只要按下一个方向键,就走
if (hor != 0 || ver != 0)
{
//设置Speed,角色动起来
ani.SetFloat("Speed", 5.6f, dampTime, Time.deltaTime);
//将向量转换成四元数
Quaternion targetQua = Quaternion.LookRotation(new Vector3(hor, 0, ver));//lerp过去
transform.rotation = Quaternion.Lerp(transform.rotation, targetQua, Time.deltaTime * turnSpeed);
}
else
{
//停下来
ani.SetFloat("Speed", 0f);
}
//判断当前是否是Locomotion状态
bool isLocomotion = ani.GetCurrentAnimatorStateInfo(0).IsName("Locomotion");
if (isLocomotion)
{
//判断脚步声音是不是已经开始播放了
if (!aud.isPlaying)
{
//播放声音
aud.Play();
}
}
else
{
//停止声音
aud.Stop();
}
}/// <summary>
/// 播放喊叫声音
/// </summary>
public void PlayShoutAudio(float a) {
Debug.Log(a);
//播放喊叫声音
AudioSource.PlayClipAtPoint(shoutClip, transform.position);
}
}

找到关节









using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class EthanIKController : MonoBehaviour
{
private Animator ani;
[Header("IK动画的开关")]
public bool ikActive = false;[Header("射击敌人的最大角度")]
public float fireMaxAngle = 100;
[Header("IK指向的目标")]
public Transform target;[Header("IK指向的目标身高")]
public float targetHeight = 1.8f;
private void Awake()
{
ani = GetComponent<Animator>();
}
private void OnAnimatorIK(int layerIndex)
{
//获取玩家指向敌人的方向向量
Vector3 dir=target.position - transform.position;
//计算夹角
float angle=Vector3.Angle(dir, transform.forward);if (angle < fireMaxAngle / 2)
{
ikActive = true;
}
else {
ikActive = false;
}if (ikActive)
{
//设置IK权重
ani.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
//设置IK位置
ani.SetIKPosition(AvatarIKGoal.RightHand, target.position+Vector3.up*targetHeight);//设置眼睛的IK权重
ani.SetLookAtWeight(1);
//设置眼睛的IK位置
ani.SetLookAtPosition(target.position+Vector3.up * targetHeight);}
else {
//设置IK权重为0
ani.SetIKPositionWeight(AvatarIKGoal.RightHand, 0);
//设置眼睛权重为0
ani.SetLookAtWeight(0);
}
}
}
Curve
p341






绑定到一起只需要名称一致
p342










开始慢后期快

相关文章:
Unity动画系统(4)
6.3 动画系统高级1-1_哔哩哔哩_bilibili p333- 声音组件添加 using System.Collections; using System.Collections.Generic; using UnityEngine; public class RobotAnimationController : MonoBehaviour { [Header("平滑过渡时间")] [Range(0,3)] publ…...
React基础学习-Day08
React基础学习-Day08 React生命周期(旧)(新)(函数组件) (旧) 在 React 16 版本之前,React 使用了一套不同的生命周期方法。这些生命周期方法在 React 16 中仍然可以使用…...
Flowable的学习一
今日项目用到了Flowable。简单记录下。 学习中 参考了网上资料: 工作流-Activiti7-基础讲解_activity工作流-CSDN博客 https://juejin.cn/post/7158342433615380517 flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者…...
django-vue-admin项目运行
文本主要对django-vue-admin项目进行了简要介绍,并且对前后端进行了源码安装和运行。在此基础上可作为管理系统二次开发的基础框架。 一.django-vue-admin简介和安装 1.简介 django-vue-admin项目是基于RBAC模型权限控制的中小型应用的基础开发平台,采…...
4. docker镜像、Dockerfile
docker镜像、Dockerfile 一、docker镜像1、镜像介绍2、镜像核心技术 二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile1.2、构建镜像1.3 创建容器测试镜像定制操作 2、Dockerfile常用指令 三、部署springcloud微服务架构的商品秒杀项目1、部署项目需要的基础服务…...
智能水果保鲜度检测:基于YOLO和深度学习的完整实现
引言 水果新鲜程度直接影响其口感和营养价值。为了提高水果品质管理的效率和准确性,本文介绍了一种基于深度学习的水果新鲜程度检测系统。该系统包括用户界面,利用YOLO(You Only Look Once)v8/v7/v6/v5模型进行水果新鲜程度检测&…...
C#中implicit 关键字的使用:隐式转换操作符
在 C# 中,implicit 关键字用于定义隐式转换操作符。隐式转换操作符允许自动将一种数据类型转换为另一种类型,而无需显式地调用转换方法或进行类型转换。下面将详细介绍 implicit 关键字的定义和使用。 1. 隐式转换操作符 定义 隐式转换操作符可以定义在一个类或结构体中,…...
Laravel表单验证:自定义规则的艺术
Laravel表单验证:自定义规则的艺术 在Web应用开发中,表单验证是确保数据完整性和安全性的关键步骤。Laravel提供了一个强大且灵活的验证系统,允许开发者定义自定义验证规则,以满足特定的业务需求。本文将详细介绍如何在Laravel中…...
Linux中的环境变量
一、环境变量定义 一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,…...
关于集成网络变压器的RJ45网口
集成网络变压器的RJ45网口是一种将网络变压器与RJ45接口集成在一起的网络连接解决方案。这种集成设计具有多项优势,使其在现代网络设备中得到广泛应用。 优势与特点 1. **空间节省**:集成设计减少了组件数量和连接线缆长度,有助于节省设备内…...
JMX 反序列化漏洞
前言 前段时间看到普元 EOS Platform 爆了这个洞,Apache James,Kafka-UI 都爆了这几个洞,所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX(Java Management Extensions,即 Java 管理扩展࿰…...
【Qt】常用控件 Q widget的enabled属性,geometry属性
Qt是一个实现图形化程序的程序。为了便于我们开发,Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件 控件是构成⼀个图形化界⾯的基本要素. 示例一: 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…...
Unity3d开发google chrome的dinosaur游戏
游戏效果 游戏中: 游戏中止: 一、制作参考 如何制作游戏?【15分钟】教会你制作Unity小恐龙游戏!新手15分钟内马上学会!_ unity教学 _ 制作游戏 _ 游戏开发_哔哩哔哩_bilibili 二、图片资源 https://download.csdn.…...
【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)
空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据(均可查看之前的文章获悉详情)! 本次我们分享的是我国2013——2022年的省…...
【玩转C语言】第五讲--->数组-->一维和多维深度理解
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 引言: 大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识…...
Apache Flink 任务提交模式
Flink 任务提交模式 Flink可以基于多种模式部署:基于Standalone 部署模式,基于Yarn部署模式,基于Kubernetes部署模式以上不同集群部署模式下提交Flink任务会涉及申请资源,各角色交互过程,不同模式申请资源涉及到的角色…...
Ubuntu22.04安装OMNeT++
一、官网地址及安装指南 官网地址:OMNeT Discrete Event Simulator 官网安装指南(V6.0.3):https://doc.omnetpp.org/omnetpp/InstallGuide.pdf 官网下载地址:OMNeT Downloads 旧版本下载地址:OMNeT Old…...
Matlab课程设计——手指静脉识别项目
手指静脉识别项目 项目方案设计介绍 本项目实现手指图像的处理和匹配算法,需要处理的数据是本人不同手指的图像,首先经过图像处理,使得指静脉的纹理增强凸显处理,然后将所有的这些图像进行相互间的匹配,检验类内和类…...
centos软件安装
安装方式 一、二进制安装 --解压即用,只针对特殊平台 --jdk tomcat 二、RPM:按照一定规范安装软件,无法安装依赖的文件 --mysql 三、yum:远程安装基于RPM,把依赖的文件安装上去,需要联网 四、源码安装 jdk安…...
力扣 217. 存在重复元素,389. 找不同,705. 设计哈希集合,3. 无重复字符的最长子串,139. 单词拆分
217. 存在重复元素 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
