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) {// …...
从UHS-II到DDR4:2014年存储技术演进与工程实践启示
1. 项目概述:一次2014年秋的存储技术快照九月的风刚带起一丝凉意,存储半导体领域却热闹非凡。作为一名长期跟踪硬件发展的从业者,我习惯定期梳理行业动态,而2014年9月这份来自EE Times的“Memory Product Round Up”产品汇总&…...
Super IO插件终极指南:5分钟掌握Blender文件处理革命
Super IO插件终极指南:5分钟掌握Blender文件处理革命 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io Super IO是一款彻底改变Blender工作流程的革命性插件,它通…...
Jupyter Notebook插件库装完不显示?手把手教你搞定jupyter_contrib_nbextensions和configurator的正确安装顺序
Jupyter Notebook插件安装全指南:从原理到实战排查 第一次打开Jupyter Notebook的插件管理器,却发现里面空空如也——这种挫败感我太熟悉了。去年刚开始用Jupyter做数据分析时,我花了整整一个下午才搞明白为什么安装的插件就是不显示。后来才…...
AI编程助手色彩科学技能库:从OKLCH到APCA的现代色彩实践
1. 项目概述:一个为AI编程助手打造的“色彩科学专家”技能库如果你和我一样,经常在开发与色彩相关的工具、设计系统,或者需要向团队解释为什么某个颜色方案行不通时,总得反复查阅同一堆资料——那个讲解OKLAB色彩空间的视频、那篇…...
AI编码助手技能开发:基于Agent Skills打造智能命令行速查工具
1. 项目概述:一个能“听懂人话”的开发者命令行技能如果你和我一样,每天在终端和代码编辑器里花费大量时间,那你肯定对“命令遗忘症”深有体会。明明上周才用过git worktree来并行处理两个功能分支,今天突然想不起来具体的参数顺序…...
基于FastAPI与Flutter的LLM全栈聊天应用:私有化部署与架构解析
1. 项目概述与核心价值最近在折腾一个全栈的AI聊天应用,把后端、前端、数据库和缓存都整合到了一起。这个项目叫LLMChat,它不是一个简单的API包装器,而是一个功能完备、可以私有化部署的聊天平台。核心是用Python的FastAPI构建高性能后端&…...
深入u-boot目录结构:以全志V3s的LicheePi Zero为例,理解每个文件夹的作用
深入解析u-boot目录结构:全志V3s平台下的LicheePi Zero实践指南 当你第一次打开u-boot源码仓库时,面对密密麻麻的目录结构可能会感到无从下手。作为嵌入式系统开发中至关重要的启动加载程序,u-boot的架构设计既体现了通用性又兼顾了平台特异…...
ScrollNice:用虚拟滚动区域替代鼠标滚轮的Windows效率工具
1. 项目概述:当鼠标滚轮失灵时,我们如何优雅地“滚动”?作为一名长期与代码和文档打交道的开发者,我深知一个顺手的鼠标滚轮有多重要。但现实往往很骨感——无论是用了多年的老鼠标滚轮开始“打滑”,还是在某些需要单手…...
为什么92%的团队用错Gemini做Slides?——基于17家SaaS公司实测数据的生成效率断层分析
更多请点击: https://intelliparadigm.com 第一章:Gemini生成Slides的底层机制与能力边界 Gemini 生成幻灯片(Slides)并非简单地将文本转为 PPT 页面,而是依托多模态大模型对语义结构、视觉层级与演示逻辑的联合建模。…...
主动学习:让AI主动挑选最有价值的样本进行标注
1. 主动学习:不是AI在“等喂饭”,而是在“主动点菜”你有没有遇到过这种场景:手头有个图像分类项目,标注一张医学影像要花资深放射科医生15分钟,而你手上有5万张未标注CT切片——但预算只够标300张。或者在做客服对话意…...
