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) {// …...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...