首页 > 其他分享 >四、人物动画代码控制

四、人物动画代码控制

时间:2024-09-29 16:47:47浏览次数:3  
标签:动画 人物 代码 else ComboNum CrossFade 播放 Animator1

一、连接动画控制器

1、人物基本状态


待机;奔跑

二者之间切换需要一个Bool值(run)

当run为真时,进入奔跑状态;当run为假时,退回待机状态

2、使用代码控制

1、原理

在人物移动代码上,按下一个移动按键,则进行移动动画播放
松开移动按键,取消动画播放。

2、代码

public void Move()
{
	//获取水平和垂直
	InputH = Input.GetAxis("Horizontal");
	InputV = Input.GetAxis("Vertical");
	Direction = new Vector3(InputH, 0, InputV);

	if (Direction.magnitude>=0.1f)//检测是否有玩家输入
	{
		//动画
		Animator1.SetBool("Run",true);


		移动
		//Controller1.Move(Direction*MoveSpeed*Time.deltaTime);

		//计算目标角度
		float TargetAngle = Mathf.Atan2(Direction.x, Direction.z) * Mathf.Rad2Deg
			+ Camera1.transform.eulerAngles.y;//弧度值转为角度值
											  //平滑角度过渡
		float Angle = Mathf.SmoothDampAngle(this.transform.eulerAngles.y, TargetAngle,
			ref TurnSmooth, TurnTime);
		//设置角色旋转
		this.transform.rotation = Quaternion.Euler(0, Angle, 0);
		//计算新的移动方向
		
		Vector3 MoveDirection = Quaternion.Euler(0, TargetAngle, 0) * Vector3.forward;
		
		//移动角色
		Controller1.Move(MoveDirection * MoveSpeed * Time.deltaTime);
	}
	else
	{
		//动画部分
		Animator1.SetBool("Run", false);
	}
	
}

3、动画根运动

使用动画根运动,会导致人物在位移时出现闪现情况
取消勾选根运动,使用代码控制移动

注:使用动画根运动会平滑的进行过渡;但并不是所有的动画都支持根运动;

如果支持,动画在预览时,会出现一定的位移;

如果不支持,动画在预览时,会在原地进行动画播放

解决方法:

将人物身上的动画控制器移至人物的父物体上;

使Ucc和动画控制器和人物脚本在同一物体上挂载;

即可实现使用根运动进行动画播放;

注:如果Ucc和动画控制器不在一个物体上,动画在根运动时会出现UCC与人物模型脱离

二、人物连招

1、实现连招

原理:设置一个计数器,由0~3,一共四个动画,依次计数器加一,进行连招动画播放

瑕疵:播放完一个动画后,下一次进行攻击播放的动画是依然是原来的下一个

解决:计数器清零一下‘

public void DoAttack()
{
	if (Input.GetKeyDown(KeyCode.Mouse0))
	{
		//普通攻击播放动画
		if (ComboNum == 0)
		{
			Animator1.CrossFade("combo1", 0.1f);//跳转CrossFade
			
		}
		else if (ComboNum==1)
        {
			Animator1.CrossFade("combo2", 0.1f);//跳转CrossFade
			
		}
		else if (ComboNum == 2)
		{
			Animator1.CrossFade("combo3", 0.1f);//跳转CrossFade
			
		}
		else
		{
			Animator1.CrossFade("combo4", 0.1f);//跳转CrossFade
			
		}
		//普通攻击连段
		if (ComboNum < 3)
		{
			ComboNum = ComboNum + 1;
		}
		else
		{
			ComboNum = 0;
		}
		
	}
}

将计数器自增放置在if循环外面;

如果每一次都增加一次自增,会使时间复杂度提高

三、断点调试

在VS中下一个断点,选择附加到Unity中

unity中会弹出Debug页面,选择调试Debug,unity页面右下角标志会改变

执行至此页面,会抛出这行

并且显示在哪里调用

四、switch代码替换if else代码

五、普通攻击间隔

如果连点过快会导致人物攻击动画鬼畜

解决方法:

设置一个Bool值,写一个方法,将Bool设置为false;并且延迟执行此方法,实现攻击连贯

初始设置为:未处于攻击间隔

在一个if循环结束后,将状态设置为处于攻击状态;此时无法进入下一个if循环

写一个方法(攻击结束)

在循环中,延迟执行此方法

注:Invoke中第一个参数为name类型,第二个是赋值后的延迟时间

public void AttackEnd()
{
	ISAttacking = false;
}

六、终止攻击动画

1、问题

此时攻击效果为:播放第一第二段动画后,隔一段时间,应该为重新播放第一段动画

但此时为继续播放第三个动画,需要对代码进行修改

2、解决

设置一个攻击的连段时间=》3秒后归为第一个动画

写一个延迟清空攻击的方法

/// <summary>
/// 延迟清空攻击连段
/// </summary>
public void DelayAttackNum()
{
	ComboNum = 0;
}

在循环中进行调用Invoke;但此时会导致一个线程的等待时间未结束,另一个延迟开始

因此需要使用延迟清空方法

标签:动画,人物,代码,else,ComboNum,CrossFade,播放,Animator1
From: https://blog.csdn.net/akjhgi/article/details/142578188

相关文章

  • 代码随想录一刷day2
    T27移除元素   注意复习思路快慢指针:快指针:指向遍历的元素慢指针:指向需要替换的元素实现:slowIndex=0;通过遍历fastIndex,当target!=nums【fastIndex】,nums【slowIndex++】=nums【fastIndex】; T26理解快慢指针 nums[fast]!=nums[slow]时,交换两个的值且slow++;其他就f......
  • vscode监听代码变动重启node
    在VisualStudioCode(VSCode)中,可以使用nodemon来监听代码的变动并自动重启Node.js服务器。nodemon是一个工具,它可以监控文件的变化并在检测到变化时自动重启Node.js应用程序。安装nodemon你需要在项目中安装nodemon,可以使用npm全局安装或者将其作为开发依赖安装......
  • Adobe Animate AN2024电脑动画程序下载安装(附百度链接)
    目录简介软件特点下载推荐硬件配置简介AdobeAnimate,是Adobe公司开发的一款专业多媒体创作和电脑动画程序。它的前身是AdobeFlashProfessionalCC,自1996年首次发布以来,经历了多次更名和升级,现已成为动画制作、交互式内容设计等领域的重要工具。AdobeAnimate不仅支持......
  • Java毕业设计:基于Springboo咖啡厅座位预约网站毕业设计源代码作品和开题报告怎么写
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 代码审计 | phpcmsV9.6超详细RCE代审流程
    《网安面试指南》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect《Java代码审计》htt......
  • .NET高级调试 - 代码审查以及杂项命令
    简介代码审查就是观察代码,代码形态分为三种C#代码>IL代码》汇编代码。通过代码审查,可以从原始代码的字节流中推测出逻辑详情高级调试本质上属于逆向分析,更多的是以汇编为主。反汇编代码u(unassemble)命令u把字节流反汇编为汇编指令还有一个变种ub,uf。u是向下反汇编,ub是向......
  • C语言课程设计:基于C语言的银行管理系统【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:C开发工具:VScode二、系统功能1.客户管理:包括客户信息的增删改查、客户身份验证、客户分组等功能。2.账户管理:包括账户的开户、销户、冻结、解冻、查询、......
  • 喜报!得帆荣获信通院“鼎新杯”和《低代码发展研究报告》参编认证
    2024年9月24日-25日,由中国通信标准化协会主办、中国信息通信研究院(简称“中国信通院”)承办、中国通信企业协会支持的“2024数字化转型发展大会”在北京召开。得帆荣获第三届“鼎新杯”数字化转型应用征集活动三等奖与《低代码发展研究报告》参编企业认证。“鼎新杯”数字......
  • 【代码笔记】
    1级第一课/*陈袁鑫2023.9.239.23做*///调用头文件#include<iostream>usingnamespacestd;//代码主题intmain(){//数字cout<<25<<endl;//算式cout<<10+130<<endl;//程序运行时,会自动计算得数并将得数输出,所以运行结果是94//输出字......
  • 【代码笔记】
    1级第一课——cout/*C01.L01.程序的基本结构、cout语句杨彦彬2024.9.23日作业(2024.9.23做)*///调用头文件#include<bits/stdc++.h>//使用标准名字空间usingnamespacestd;//代码主体intmain(){//输出数字cout<<25;cout<<endl;//输出算式cou......