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

开始慢后期快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫瑞数5案例:某大学总医院

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、瑞数简介 瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,…

LLM(大语言模型)解码时是怎么生成文本的?

Part1配置及参数 transformers4.28.1 源码地址&#xff1a;transformers/configuration_utils.py at v4.28.1 huggingface/transformers (github.com) 文档地址&#xff1a;Generation (huggingface.co) 对于生成任务而言&#xff1a;text-decoder, text-to-text, speech-…

vue使用x6画流程图,简单使用

官网 https://x6.antv.antgroup.com/tutorial/getting-started 安装 npm install antv/x6 --save 使用 <template><div>3333<div id"container" style"width: 800px;height: 800px;"></div></div> </template> <…

网络安全----防御----防火墙双机热备

实验要求&#xff1a; 1&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW4&#xff0c;生产区和办公区的流量走FW1 2&#xff0c;办公区上网用户限制流量不超过100M&#xff0…

WPF/C#:实现导航功能

前言 在WPF中使用导航功能可以使用Frame控件&#xff0c;这是比较基础的一种方法。前几天分享了wpfui中NavigationView的基本用法&#xff0c;但是如果真正在项目中使用起来&#xff0c;基础的用法是无法满足的。今天通过wpfui中的mvvm例子来说明在wpfui中如何通过依赖注入与M…

第三篇 Vue项目目录结构介绍

1、最外层目录结构 passagerFrontPage ├── .vscode //vscode配置&#xff0c;不用理会 ├── node_modules //项目依赖&#xff0c;npm install命令执行后自动生成 ├── public //公共资源存放 ├── src //源码 ├── tests //选装&#xff1a;测试模块 ├── .git…

最新开源的PDF版面分析工具 PDF-Extract-Kit

最近有一个新开源的版面分析的模型&#xff0c;做PDF版面分析效果非常好。而且对公式的解析效果比较好。虽然现在star数量不高&#xff0c;但是绝对会涨起来的。我们调研对比过很多开源的工具&#xff0c;效果都强差人意&#xff0c;这个是我看到的最满意的一个。甚至要比我们生…

使用 XPath 定位 HTML 中的 img 标签

引言 随着互联网内容的日益丰富&#xff0c;网页数据的自动化处理变得愈发重要。图片作为网页中的重要组成部分&#xff0c;其获取和处理在许多应用场景中都显得至关重要。例如&#xff0c;在社交媒体分析、内容聚合平台、数据抓取工具等领域&#xff0c;图片的自动下载和处理…

Springboot 启动时Bean的创建与注入-面试热点-springboot源码解读-xunznux

Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读构建Web项目流程图&#xff1a;堆栈信息&#xff1a;堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…

【开发踩坑】使用PageHelper工具正常sql后面多无关语句

背景 SQL日志打印出现了脏东西&#xff1a; 本来结束的 where muc.code ?;后面凭空多出了一个 LIMIT语句 ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your …

2024辽宁省数学建模B题【钢铁产品质量优化】原创论文分享

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024 年辽宁省大学数学建模竞赛B题钢铁产品质量优化完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B题论文…

解决element-ui e-table表格中使用多选,当翻页时已选中的数据丢失

用element-ui中的table时&#xff0c;当有多选又有翻页功能时&#xff0c;点击翻页后之前选中的数据会丢失&#xff0c;怎么使表格具有记忆功能呢 element-ui API中有几个属性可以供我们完美解决这个问题 1.单元格的属性和方法&#xff1a; 2.表格的方法&#xff1a; <el-…

Linux部署Prometheus+Grafana

【Linux】PrometheusGrafana 一、Prometheus&#xff08;普罗米修斯&#xff09;1、Prometheus简述2、Prometheus特点3、Prometheus生态组件4、Prometheus工作原理 二、部署Prometheus1、系统架构2、部署Prometheus3、修改配置文件4、配置系统启动文件 三、部署 Node Exporter …

DevExpress WPF中文教程 - 为项目添加GridControl并将其绑定到数据

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

[开源]语雀+Vercel:打造免费个人博客网站

大家好,我是白露。 今天我想和大家分享我的今年的第一个开源项目 —— 基于语雀+Nextjs+Vercel实现免费的博客系统。 简单来说,你在语雀写博客,然后直接一键同步到个人网站上,网站自动部署! 而且,整个过程几乎不需要额外的成本,也不用充值语雀超级会员,hh。这个项目…

阿里云 申请免费ssl 证书

1控制台--数字证书管理服务 2 创建所需域名证书

PyTorch张量索引

文章目录 1、简介1.1、基本概念1.2、索引类型1.3、数据准备1.4、技术摘要⭐ 2、简单行、列索引3、列表索引4、范围索引5、布尔索引6、多维索引 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#…

Vue3 + uni-app 微信小程序:仿知乎日报详情页设计及实现

引言 在移动互联网时代&#xff0c;信息的获取变得越来越便捷&#xff0c;而知乎日报作为一款高质量内容聚合平台&#xff0c;深受广大用户喜爱。本文将详细介绍如何利用Vue 3框架结合微信小程序的特性&#xff0c;设计并实现一个功能完备、界面美观的知乎日报详情页。我们将从…

1. 个人谈心 ——【如何学习编程及合理安排休息时间】

&#x1f4d6; 声明 ! ! ! 此文章仅仅属于个人思想&#xff0c;如有不满或者意见不相同&#xff0c;可以在评论区讨论留言&#xff0c;非常感谢支持&#xff01;&#xff01;&#xff01; &#x1f495;个人主页&#xff1a;三亿老奶奶心中的梦 &#x1f4d8;收录专栏&#xff…

github上的工程如何下载子模块.gitmodules如何下载指定的模块download submodules开源项目子模块下载externals

github上的工程如何下载子模块.gitmodules如何下载指定的模块download submodules 说明(废话)解决方案无法执行下载子模块无法下载子项目 说明(废话) 今天在编译一个开源库时&#xff0c;该开源库依赖其他项目&#xff0c;并且项目还挺多的&#xff0c;所以有此解决方案 在编…