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

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生命周期&#xff08;旧&#xff09;&#xff08;新&#xff09;&#xff08;函数组件&#xff09; &#xff08;旧&#xff09; 在 React 16 版本之前&#xff0c;React 使用了一套不同的生命周期方法。这些生命周期方法在 React 16 中仍然可以使用…...

Flowable的学习一

今日项目用到了Flowable。简单记录下。 学习中 参考了网上资料&#xff1a; 工作流-Activiti7-基础讲解_activity工作流-CSDN博客 https://juejin.cn/post/7158342433615380517 flowable实战&#xff08;九&#xff09;flowable数据库表中流程实例、活动实例、任务实例三者…...

django-vue-admin项目运行

文本主要对django-vue-admin项目进行了简要介绍&#xff0c;并且对前后端进行了源码安装和运行。在此基础上可作为管理系统二次开发的基础框架。 一.django-vue-admin简介和安装 1.简介 django-vue-admin项目是基于RBAC模型权限控制的中小型应用的基础开发平台&#xff0c;采…...

4. docker镜像、Dockerfile

docker镜像、Dockerfile 一、docker镜像1、镜像介绍2、镜像核心技术 二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile1.2、构建镜像1.3 创建容器测试镜像定制操作 2、Dockerfile常用指令 三、部署springcloud微服务架构的商品秒杀项目1、部署项目需要的基础服务…...

智能水果保鲜度检测:基于YOLO和深度学习的完整实现

引言 水果新鲜程度直接影响其口感和营养价值。为了提高水果品质管理的效率和准确性&#xff0c;本文介绍了一种基于深度学习的水果新鲜程度检测系统。该系统包括用户界面&#xff0c;利用YOLO&#xff08;You Only Look Once&#xff09;v8/v7/v6/v5模型进行水果新鲜程度检测&…...

C#中implicit 关键字的使用:隐式转换操作符

在 C# 中,implicit 关键字用于定义隐式转换操作符。隐式转换操作符允许自动将一种数据类型转换为另一种类型,而无需显式地调用转换方法或进行类型转换。下面将详细介绍 implicit 关键字的定义和使用。 1. 隐式转换操作符 定义 隐式转换操作符可以定义在一个类或结构体中,…...

Laravel表单验证:自定义规则的艺术

Laravel表单验证&#xff1a;自定义规则的艺术 在Web应用开发中&#xff0c;表单验证是确保数据完整性和安全性的关键步骤。Laravel提供了一个强大且灵活的验证系统&#xff0c;允许开发者定义自定义验证规则&#xff0c;以满足特定的业务需求。本文将详细介绍如何在Laravel中…...

Linux中的环境变量

一、环境变量定义 一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但 是照样可以链接成功&#xff0c;生成可执行程序&#xff0c…...

关于集成网络变压器的RJ45网口

集成网络变压器的RJ45网口是一种将网络变压器与RJ45接口集成在一起的网络连接解决方案。这种集成设计具有多项优势&#xff0c;使其在现代网络设备中得到广泛应用。 优势与特点 1. **空间节省**&#xff1a;集成设计减少了组件数量和连接线缆长度&#xff0c;有助于节省设备内…...

JMX 反序列化漏洞

前言 前段时间看到普元 EOS Platform 爆了这个洞&#xff0c;Apache James&#xff0c;Kafka-UI 都爆了这几个洞&#xff0c;所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX&#xff08;Java Management Extensions&#xff0c;即 Java 管理扩展&#xff0…...

【Qt】常用控件 Q widget的enabled属性,geometry属性

Qt是一个实现图形化程序的程序。为了便于我们开发&#xff0c;Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件 控件是构成⼀个图形化界⾯的基本要素. 示例一&#xff1a; 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…...

Unity3d开发google chrome的dinosaur游戏

游戏效果 游戏中&#xff1a; 游戏中止&#xff1a; 一、制作参考 如何制作游戏&#xff1f;【15分钟】教会你制作Unity小恐龙游戏&#xff01;新手15分钟内马上学会&#xff01;_ unity教学 _ 制作游戏 _ 游戏开发_哔哩哔哩_bilibili 二、图片资源 https://download.csdn.…...

【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是我国2013——2022年的省…...

【玩转C语言】第五讲--->数组-->一维和多维深度理解

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 引言&#xff1a; 大家好&#xff0c;我是坊钰&#xff0c;为了让大家深入了解C语言&#xff0c;我开创了【玩转C语言系列】&#xff0c;将为大家介绍C语言相关知识…...

Apache Flink 任务提交模式

Flink 任务提交模式 Flink可以基于多种模式部署&#xff1a;基于Standalone 部署模式&#xff0c;基于Yarn部署模式&#xff0c;基于Kubernetes部署模式以上不同集群部署模式下提交Flink任务会涉及申请资源&#xff0c;各角色交互过程&#xff0c;不同模式申请资源涉及到的角色…...

Ubuntu22.04安装OMNeT++

一、官网地址及安装指南 官网地址&#xff1a;OMNeT Discrete Event Simulator 官网安装指南&#xff08;V6.0.3&#xff09;&#xff1a;https://doc.omnetpp.org/omnetpp/InstallGuide.pdf 官网下载地址&#xff1a;OMNeT Downloads 旧版本下载地址&#xff1a;OMNeT Old…...

Matlab课程设计——手指静脉识别项目

手指静脉识别项目 项目方案设计介绍 本项目实现手指图像的处理和匹配算法&#xff0c;需要处理的数据是本人不同手指的图像&#xff0c;首先经过图像处理&#xff0c;使得指静脉的纹理增强凸显处理&#xff0c;然后将所有的这些图像进行相互间的匹配&#xff0c;检验类内和类…...

centos软件安装

安装方式 一、二进制安装 --解压即用&#xff0c;只针对特殊平台 --jdk tomcat 二、RPM&#xff1a;按照一定规范安装软件&#xff0c;无法安装依赖的文件 --mysql 三、yum&#xff1a;远程安装基于RPM&#xff0c;把依赖的文件安装上去&#xff0c;需要联网 四、源码安装 jdk安…...

力扣 217. 存在重复元素,389. 找不同,705. 设计哈希集合,3. 无重复字符的最长子串,139. 单词拆分

217. 存在重复元素 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …...

嵌入式软件工作能力

1. 工作能力 技术能力强&#xff0c;并不代表工作能力 2. 流程把控 3. 项目管理 4. “找茬”能力 5. 文档输出能力...

景区导航导览系统:基于AR技术+VR技术的功能效益全面解析

在数字化时代背景下&#xff0c;游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手&#xff0c;不仅因为它能提供实时、精准的导航服务&#xff0c;更在于其融合AR&#xff08;增强现实&#xff09;、VR&#xff08;虚拟现实&#xff09;等前沿技术&…...

Mybatis-Plus代码生成器配置方法

Mybatis-Plus网址&#xff1a;https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8 第一步&#xff1a;引入依赖 <!-- 代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId>…...

三主机部署HP Anyware Manager服务

一、序言 在部署拓扑和方案方面&#xff0c;HP Anyware Manager 非常灵活&#xff0c;可以部署在单个主机中&#xff0c;也可以部署在多个主机中&#xff0c;具体取决于组织的网络环境和运营要求。 二、单主机部署 2.1 描述 此部署配置是当 Anyware Manager 和 MongoDB 以及…...

Grafana :利用Explore方式实现多条件查询

背景 日志统一推送到Grafana上管理。所以&#xff0c;有了在Grafana上进行日志搜索的需求&#xff0c;而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤&#xff1a; 在主页搜索框中输入“Explore” 进入这个界面…...

腾讯技术创作特训营 -- SUPERWINNIE -- AI重塑社交内容

目录 1 什么是AI社交内容 2 案例拆解 3 用LLM做爆文选题 4 用LLM出爆文脚本提示词 1 什么是AI社交内容 任何一个因素被AI取代都是AI社交内容 2 案例拆解 数字人 资讯素材 录屏产品的素材&#xff08;小红书测试AI产品&#xff09; 脚本 素材 剪辑 3 用LLM做爆文选题 &…...

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中&#xff0c;权重m(x, y) is scaled by 64 以进行整数计算&#xff0c;R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…...

watch监听vue2与vue3的写法

watch的属性值 handler:回调函数, 即监听到变化时应该执行的函数&#xff0c;可以是单独的函数或带有 immediate 和 deep 属性的对象watch: {someProperty: function(newVal, oldVal) {// 处理逻辑}}deep: 其值是true或false, 当属性值是对象或数组时&#xff0c;深度观察会监…...

docker搭建普罗米修斯监控gpu

ip8的服务器监控ip110和ip111的服务器 被监控的服务器110和111只需要安装node-export和nvidia-container-toolkit 下载镜像包 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana新建目录 mkdir /opt/prometheus cd /opt/prometheus/…...

像 MvvmLight 一样使用 CommunityToolkit.Mvvm 工具包

文章目录 简介一、安装工具包二、实现步骤1.按照MvvmLight 的结构创建对应文件夹和文件2.编辑 ViewModelLocator3.引用全局资源二、使用详情1.属性2.命令3. 消息通知4. 完整程序代码展示运行结果简介 CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit…...

做网站基本流程/百度网址入口

在进程一開始执行&#xff0c;就自己主动打开了三个相应设备的文件。它们是标准输入、输出、错误流。分别用全局文件指针stdin、stdout、stderr表示&#xff0c;相应的文件描写叙述符为0。1。2&#xff1b;stdin具有可读属性&#xff0c;缺省情况下是指从键盘的读取输入&#x…...

做游戏ppt下载网站有哪些内容/直销的八大课程

绑定两台路由器之间的多条E1链路的方法有如下几种1.硬件IMUX 2-82.ATM IMA 2-323.Multilink ppp 2-84.Load balancing 2-6其中1、2为硬件解决方式&#xff0c;3、4为软件解决方式 PPP multilink配置方法&#xff1a;interface Mu…...

公司开发个网站/盘多多网盘搜索

www.163.com转载于:https://blog.51cto.com/testice/259978...

天津中小企业网站制作/网页搜索关键字

本文主要介绍Treble架构下的HAL&HIDL&Binder相关技术原理。Treble的详细资料文档&#xff0c;请参考Treble 官方文档。 1. Treble 简介 Android 8.0 版本的一项新元素是 Project Treble。这是 Android 操作系统框架在架构方面的一项重大改变&#xff0c;旨在让制造商…...

dw软件做的东西怎么在网站用/营销网站建设哪家快

2019独角兽企业重金招聘Python工程师标准>>> 队列&#xff1a;先进先出 栈&#xff1a;先进后出; 实现栈&#xff1a;有队列1有队列2。实现原理&#xff0c;始终保持一个队列为空队列。取元素时&#xff0c;将不为空的队列所有元素减一全部放入另外一个队列。将最后…...

新开发网站/网络优化软件有哪些

可以对模型的查询和写入操作进行封装&#xff0c;例如&#xff1a;namespace appindexmodel;use thinkModel;class User extends Model{protected function scopeThinkphp($query){$query->where("name","thinkphp")->field("id,name");}p…...