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

Unity之动画和角色控制

目录

📕 一、动画

1.创建最简单的动画

2.动画控制器 

📕二、把动画和角色控制相结合 

📕三、实现实例

3.1 鼠标控制角色视角旋转

3.2 拖尾效果

📕四、混合动画


最近学到动画了,顺便把之前创建的地形(专栏第一篇文章)用上就形成了下面动图演示的效果,我给它取名为《绿洲大镖客之重生我是闪电侠》😋。


本篇内容讲解小编学到关于Unity动画的基本知识以及演示实例是如何实现的。

 当人物移动速度过快碰撞检测检测不到就会出现穿墙效果,不愧是闪电侠😃


 一、动画

Unity中关于动画的组件有两个,旧版动画组件Animation和新版动画组件Animator,这里我们讲解新版动画组件。

1.创建最简单的动画

新建一个立方体Cube,我们通过动画来让它实现向左和向右移动。给立方体挂载上新版动画组件Animator,然后新建一个动画器控制器,如下图所示:

我给这个动画器控制器命名为CubeController ,然后给它加到动画组件Animator中:


然后我们就可以实现向左向右的动画了,点击选中Cube ——>  窗口 ——> 动画 ——> 动画

这样创建动画的窗口就出来了我们点击创建按钮开始创建动画,小编给它取名为NewRight。

这就是我们创建好的动画文件,循环时间勾选上可以循环播放:


我们对NewRight文件进行编辑

  1. 点击选中Cube
  2. 点击添加属性
  3. 对应位置点击“+”

有了立方体的位置信息我们才能让它实现向左向右的运动:

这个面板就相当于进度条,白色竖线相当于进度条上的进度,竖着排的几个棱形是关键帧,当进度执行到此位置时要做出相应的动作。

 那怎么实现Cube的向右移动呢,我们通过一个动图来演示一下:

  1. 选中Cube方便观察运动
  2. 把白色竖线点到进度条结束
  3. 位置x的数值改为10,然后点击播放按钮

什么原理呢?进度条开始位置为0,结束位置为10,动画就为我们生成了从位置0到10的过程,向右运动的动画就被我们编辑好了。


关键帧我们也可以试一下:也是差不多的操作

  1. 白色竖线点到中间位置
  2. 点击添加关键帧按钮
  3. 修改位置信息数值改为0.09

形成的动画可以看到前半段几乎不动,后边才移动,由此可以看出关键帧的作用。 比如说我要去公司上班,整个动画就是家到公司的过程;但是我还要吃早餐,于是我加了关键帧,等我到达早餐店执行吃早饭的操作。


 向右移动的动画编辑好了向左运动的自然就会了吧,位置x的数值改为-10就实现了

创建新建新剪辑文件NewLeft,小编这里就不说了


2.动画控制器 

动画编辑好后我们来用它,双击我们之前创建好的动画器控制器CubeController,可以看到有很多大方块  ——  大方块叫做动画状态,每一个动画状态包含一个动画文件和其相关的设置。

Entry状态叫做入口状态,默认执行和箭头连接的动画,我们来编写脚本实现向右移动。创建脚本AnimatorTest挂载到Cube上:

public class AnimatorTest : MonoBehaviour
{private Animator animator;// Start is called before the first frame updatevoid Start(){//获取动画器组件animator = GetComponent<Animator>();}// Update is called once per framevoid Update(){//当点击鼠标左键播放  ——  NewRightif (Input.GetMouseButtonDown(0)){animator.Play("NewRight");}}
}

 关于动画的小实例我们就做好了,点击运行:最开始向左移动当点击鼠标左键变为向右移动

二、把动画和角色控制相结合 

角色是资源商店的免费角色,小编还给加了刚体和碰撞组件所以才会下落,先来看一下实现效果:

静止状态和跑步状态可以自由切换

先来导入一下免费资源,名称为Character Pack: Free Sample

 把最基础的人物模型加入场景里。

 同上面一样我们给人物模型挂载动画组件Animator,同时创建动画器控制器NewPlayerController把它挂到动画组件上,双击打开动画器控制器,这里我们用到静止(idle)和跑步(run)两个动作把它们拖到控制器里:

上面小编讲过Entry状态为入口状态,默认执行和箭头连接的动画 ,我们默认执行静止(idle)当人物移动时才会执行跑步(run)动画。

点击选中idle ——  右键  ——  设置为图层默认状态,这样默认执行动作就设置好了

选中idle ——  右键  ——  创建过渡,连接run动画,选中run ——  右键  ——  创建过渡,连接idle动画,这样两个动画就可以双向切换了。那怎么控制它们直接的切换呢?

我们来创建一个Bool类型的参数命名为isRun,通过true和false来控制动作之间的切换。

点击动画之间的过渡线,选中就会变为蓝色,点击添加到列表把创建好的Bool值加进来。

通过窗口面板可以看到当isRuntrue时就会由静止切换到跑步, 同样点击选中另一条过渡线把isRun改为false,表示当isRunfalse时就会由跑步切换到静止。

如果想让动画切换之间更为流畅可以把过渡退出时间取消勾选

 接下来编写脚本控制角色移动和动画之间的切换:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerControl2 : MonoBehaviour
{//获取球体  ——  选中人,把球体拖到”目标“中public Transform target;//定义动画变量private Animator animator;// Start is called before the first frame updatevoid Start(){//获取动画组件animator = GetComponent<Animator>();}// Update is called once per framevoid Update(){//水平轴float horizontal = Input.GetAxis("Horizontal");//垂直轴float vertical = Input.GetAxis("Vertical");//向量Vector3 dir = new Vector3(horizontal, 0, vertical);//如果向量不等于空就证明我们按了方向键了if (dir != Vector3.zero){//面向向量  按哪边朝向哪边,可以旋转transform.rotation = Quaternion.LookRotation(dir);//播放跑步动画animator.SetBool("isRun",true);//朝向前方移动    Time.deltaTime  ——  每帧换成每秒两米transform.Translate(Vector3.forward * 2 * Time.deltaTime);}//没有按方向键else{//播放站立动画animator.SetBool("isRun",false);}//随时获取test参数并打印出来//Debug.Log(animator.GetFloat("Test"));}///下面的代码是小编做的其他练习,与此篇实例无关void leftFoot(){Debug.Log("leftFoot");}void rightFoot(){Debug.Log("rightFoot");}//IK(反向动力学) 写到这个方法内  private void OnAnimatorIK(int layerIndex)  // layerIndex 表示哪一个动画图层{ //设置头部IKanimator.SetLookAtWeight(1);  //权重为1,表示生效//设置头部看向的位置animator.SetLookAtPosition(target.position);   //运行 头 就会看向球体//设置右手IK权重animator.SetIKPositionWeight(AvatarIKGoal.LeftHand,1);  //枚举类型:左手左脚,右手右脚//是否需要影响旋转权重animator.SetIKRotationWeight(AvatarIKGoal.LeftHand,1);//设置右手指向IKanimator.SetIKPosition(AvatarIKGoal.LeftHand,target.position);//设置旋转animator.SetIKRotation(AvatarIKGoal.LeftHand,target.rotation);}
}

另外把摄像机摆好位置直接拖到人物里,这样人物和摄像机形成了一个整体就形成了第三人称操作视角。

把上面内容加入到我们创建好的地形中尽情奔跑吧 

三、实现实例

3.1 鼠标控制角色视角旋转

可以看到演示效果里还可以通过鼠标来控制角色视角的旋转,这是小编在这篇博客中学到的

Unity实现使用鼠标实现旋转Camera的功能_public class camerarot : monobehaviour { float _ro-CSDN博客文章浏览阅读1.1k次,点赞6次,收藏7次。Unity实现使用鼠标实现旋转Camera的功能_public class camerarot : monobehaviour { float _rotationx; float rotationy;https://blog.csdn.net/qq_17367039/article/details/111600909编写脚本CameraMovieManager挂载到人物上:

public class CameraMovieManager : MonoBehaviour
{float _rotationX;float rotationY;public float sensitivityHor = 5.0f;public float sensitivityVert = 5.0f;public float minimumVert = -45.0f;public float maximumVert = 45.0f;//是否可以控制旋转public bool CanControl = false;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){CameraRot();}void CameraRot(){if (CanControl){//点击鼠标右键旋转摄像头if (Input.GetMouseButton(1)){rotationY = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityHor;_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;_rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);}}}
}

勾选脚本上的 Control 就可以通过鼠标右键旋转人物视角了。

3.2 拖尾效果

我们都知道闪电侠奔跑后边会带着闪电,小编通过拖尾组件模仿这个效果(虽然很不像)

给人物添加拖尾组件TrailRenderer,时间表示拖尾形成后多长时间拖尾会消失,小编给拖尾加了一个烟雾的材质,颜色为橙红色,有拖尾开始到结束颜色渐变的作用。

四、混合动画

混合动画直接靠字面意思理解,就是两个或多个动画混在一起。 很多游戏中我们控制的角色都有快跑这一操作,比如操作方式是 W + Shift ,它是由走路变为跑步的过程,这就是通过混合动画来实现的。


在动画器窗口中右键  ——>  创建状态  ——>  从新混合树(翻译怪怪的)来创建混合树。 

双击创建好的混合树我们发现可以点进去,Test这里作为一个参数,意思是这个混合状态目前是以Test这个参数来进行混合的。当然我们也可以自己改其他的参数来用,为了方便演示小编这里新建了一个Blend参数。

我们来给混合树添加动画,添加运动域就是添加动画,下边的NewBlendTree是添加新的混合树,俗称无限套娃(doge.jpg)

我们把走路和跑步的动画添加进来就变成了这样,两个动画连在我们的混合树上。

 拖拽Blend改变其数值,下面动图演示一下混合动画走路到跑步的过渡。

如果我们想自己修改参数可以把AutomateThresholds取消勾选。

比如我们在套一个娃,新建一个状态树,里面在添加其他动作,凭自己的操作可以玩出花来

关于动画其实还有很多内容,小编也在持续学习中,本篇就先讲到这里,拜拜┏(^0^)┛

相关文章:

Unity之动画和角色控制

目录 &#x1f4d5; 一、动画 1.创建最简单的动画 2.动画控制器 &#x1f4d5;二、把动画和角色控制相结合 &#x1f4d5;三、实现实例 3.1 鼠标控制角色视角旋转 3.2 拖尾效果 &#x1f4d5;四、混合动画 最近学到动画了&#xff0c;顺便把之前创建的地形&#xff0…...

C语言库函数实现字符串转大小写

目录 引言 代码 引言 处理字符串时&#xff0c;除了将字符串中的所有大写字母转换为小写字母外&#xff0c;我们还可以利用其他相关函数进行更丰富的文本操作。本文将以一段使用isupper()、tolower()函数实现字符串全转小写的C语言程序为例&#xff0c;详细介绍这两个函数以及…...

hcip----ospf

一&#xff1a;动态路由协议 IGP 协议---RIP OSPF ISIS EIGRP EGP--EGP ---BGP 三个角度的评判一款动态路由协议的优劣 RIP --request response 1.选路--选路依据不好&#xff0c;可能出现环路 2.收敛速度--计时器 3.占用资源-- RIPV1 RIPV2 RIPNG--ipv6 OSPFV1 OSPFV…...

vue中如何写过滤器

全局注册 (可以在main.js中进行全局注册 vue.fifler(test’&#xff0c;function(v){return v0? ‘终止’&#xff1a;v1?进行中:异常 })在组件页面使用 <view>{{state|test}}</view> <script> export default {data(){return {state: 1// state 1 进行中…...

c语言-文件的读写操作(下)

文章目录 前言一、文件的随机读写1.1 fseek()1.2 ftell()1.3 rewind() 总结 前言 本篇文章介绍c语言中文件的随机读写 一、文件的随机读写 1.1 fseek() fseek()函数的作用是根据文件指针的位置和偏移量定位文件指针 int fseek ( FILE * stream, long int offset, int origi…...

android学习笔记----SQLite数据库

用SQLite语句执行&#xff1a; 首先看到界面&#xff1a; 代码如下&#xff1a; MainActivity.java import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditTe…...

开发知识点-Flutter移动应用开发

支持 安卓 IOS Android 鸿蒙 第一章dart基础章节介绍 移动电商——Flutter-广告Banner组件制作 移动电商——Flutter实战课程介绍 Flutter实例——路由跳转的动画效果...

视频尺寸魔方:分层遮掩3D扩散模型在视频尺寸延展的应用

▐ 摘要 视频延展(Video Outpainting)是对视频的边界进行扩展的任务。与图像延展不同&#xff0c;视频延展需要考虑到填充区域的时序一致性&#xff0c;这使得问题更具挑战性。在本文中&#xff0c;我们介绍了一个新颖的基于扩散模型的视频尺寸延展方法——分层遮掩3D扩散模型(…...

openssl3.2/test/certs - 061 - other@good.org not permitted by CA1

文章目录 openssl3.2/test/certs - 061 - othergood.org not permitted by CA1概述笔记END openssl3.2/test/certs - 061 - othergood.org not permitted by CA1 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\openSS…...

如何实现无公网ip远程访问本地websocket服务端【内网穿透】

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…...

pip清华源怎么换回来

怎么临时使用清华源 pip install scrapy -i https://pypi.Python.org/simple/怎么永久换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple修改清华源后怎么换回来 删掉/home/XXX/.config/pip/pip.conf...

[Go]认识Beego框架

对比Gin的简洁&#xff0c;自己之前基于Gin撸了一个架子&#xff0c;确实比beego目录看着舒服多了&#xff0c;不过最近接触到beego的项目&#xff0c;beego的bee工具使用还是很方便&#xff0c;来简单梳理下细节&#xff1b; Beego是一个开源的Go语言Web应用框架&#xff0c;…...

JWT登录

JWT JSON Web Token&#xff08;JSON Web令牌&#xff09; 是一个开放标准(rfc7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任&#xff0c;因为它是数字签名的。jwt可以使用秘密〈使用HNAC算法…...

MySQL和Redis的事务有什么异同?

MySQL和Redis是两种不同类型的数据库管理系统&#xff0c;它们在事务处理方面有一些重要的异同点。 MySQL事务&#xff1a; ACID属性&#xff1a; MySQL是一个关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;支持ACID属性&#xff0c;即原子性&#xff08;Ato…...

【C#】基础巩固

最近写代码的时候各种灵感勃发&#xff0c;有了灵感&#xff0c;就该实现了&#xff0c;可是&#xff0c;实现起来有些不流畅&#xff0c;总是有这样&#xff0c;那样的卡壳&#xff0c;总结下来发现了几个问题。 1、C#基础内容不是特别牢靠&#xff0c;理解的不到位&#xff…...

基于Skywalking开发分布式监控(一)

接手为微服务系统搞链路监控项目一年多&#xff0c;也和skywalking打了一年多的交道&#xff0c;也应该有个总结&#xff0c;主要谈一下搭建监控系统遇到的难点和解决方案。 说明&#xff1a; 本文的代码均由本地演示代码替代&#xff0c;非实际代码 为啥选skywalking&#xf…...

高防服务器什么意思

高防服务器什么意思&#xff0c;为什么要用高防服务器&#xff0c;小编为您整理发布高防服务器什么意思的解读。 高防服务器是指具备较高防御能力的服务器&#xff0c;能够抵御DDoS/CC等网络攻击。 高防服务器通常用于保护游戏、APP、金融、电商等业务&#xff0c;这些领域因为…...

C/C++ - Auto Reference

目录 auto Reference auto 当使用auto​​关键字声明变量时&#xff0c;C编译器会根据变量的初始化表达式推断出变量的类型。 自动类型推断&#xff1a;auto​​关键字用于自动推断变量的类型&#xff0c;使得变量的类型可以根据初始化表达式进行推导。 初始化表达式&#x…...

springboot项目快速引入knife4j

引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version> </dependency>knife4j配置文件 basePackage改为自己存放接口的包名 /*** Kn…...

SpringBlade微服务开发平台

采用前后端分离的模式&#xff0c;前端开源两个框架&#xff1a;Sword (基于 React、Ant Design)、Saber (基于 Vue、Element-UI)后端采用SpringCloud全家桶&#xff0c;并同时对其基础组件做了高度的封装&#xff0c;单独开源出一个框架&#xff1a;BladeToolBladeTool已推送至…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

ubuntu清理垃圾

windows和ubuntu 双系统&#xff0c;ubuntu 150GB&#xff0c;开发用&#xff0c;基本不装太多软件。但是磁盘基本用完。 1、查看home目录 sudo du -h -d 1 $HOME | grep -v K 上面的命令查看$HOME一级目录大小&#xff0c;发现 .cache 有26GB&#xff0c;.local 有几个GB&am…...