位置: 编程技术 - 正文

在Unity3D的Legacy动画系统中应用Root Motion(unity3d all compiler errors)

编辑:rootadmin

推荐整理分享在Unity3D的Legacy动画系统中应用Root Motion(unity3d all compiler errors),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity3d gameobject,unity3d gameobject,unity3d ide,unity3d gameobject,unity3d documentation,unity3d instantiate,unity3d instantiate,unity3d object reference not set to an,内容如对您有帮助,希望把文章链接给更多的朋友!

在Unity3D的Legacy动画系统中应用Root Motion(unity3d all compiler errors)

Motion这个我很需要特性没有支持,本文就探讨一下如何在Legacy动画系统之上附加Root Motion功能,其实很简单。

何谓Root Motion在不使用Root Motion的情况下,类&#;走、跑这样的位移控制是这样的:请美术在导出动画时把位移去掉;在程序代码里控制角色移动的速度,在播放动画的同时,计算其位移。这种做法其实挺不科学的,程序控制的角色,只能当做一个质点来处理,并且大多数时候都是匀速运动,而动画中的角色的移动往往很难跟这个匹配。所以需要比较良好的计算和比较好的美术技巧才能避免角色“滑步”的现象。在“跑”这种快速移动这,滑步还比较好处理,如果是慢速移动。。。。再厉害的美术也爱莫能助了。这种情况下,最好还是使用Root Motion:美术在导出动画的时候是附带位移的;程序把动画的每一帧的位移是从动画中读取出来,再应用到角色上的,这样就能达到动画和位移的完美匹配了。在Legacy中添加Root Motion功能了解了Root Motion的概念之后,在Unity3D引擎中我们很简单就可以实现此功能了。Unity3D有一个统一的对象层次结构设计,这点非常赞,我们可以很简单找到角色的根骨骼,然后把其中的Transform变换读取出来,请见以下示例代码:[csharp] view plaincopy//-- 计算当前帧的Root Motion Vector3 rootPos = m_rootBone.localPosition; m_rootMotion = rootPos - m_lastRootPos; m_lastRootPos = rootPos; rootPos.x = 0; rootPos.z = 0; m_rootMotion.y = 0; m_rootBone.localPosition = rootPos; 请注意,我们在后续的代码中要把m_rootMotion附加的角色对象上,所以m_rootBone的postion被reset了。在读取了此帧的Root Motion,在可以把它应用到当前对象之上了:[csharp] view plaincopy//-- Apply Root Motion Vector3 nextPos = this.transform.position &#; m_rootMotion; this.transform.position = nextPos; 另外,一个细节需要处理一下,在动画循环的那一帧,需要特殊处理一下。好的,看一下完整的源代码吧:[csharp] view plaincopyusing UnityEngine; using System.Collections; public class ApplyRootMotion : MonoBehaviour { public Transform m_flagObject; // 用来测试位置的一个对象 //-- Root Motion 控制变量 Transform m_rootBone; Vector3 m_lastRootPos; Vector3 m_rootMotion; int m_lastAnimTime; void Start () { //-- 从SkinnedMeshRenderer中读取Root Bone SkinnedMeshRenderer skinMesh = this.gameObject.GetComponentInChildren<SkinnedMeshRenderer>(); m_rootBone = skinMesh.rootBone; //-- 变量初始化 m_rootMotion = Vector3.zero; m_lastRootPos = m_rootBone.localPosition; m_lastAnimTime = 0; } void Update () { //-- Apply Root Motion Vector3 nextPos = this.transform.position &#; m_rootMotion; this.transform.position = nextPos; //-- 测试代码:更新测试物体的位置 Vector3 flagPos = m_flagObject.position; flagPos.x = nextPos.x; flagPos.z = nextPos.z; m_flagObject.position = flagPos; //-- 测试代码:更新摄像机 Camera.main.transform.LookAt(this.transform); } void LateUpdate() { AnimationState animState = this.animation["walking"]; if ((int)animState.normalizedTime > m_lastAnimTime) { //-- 动画循环处理 m_lastRootPos = m_rootBone.localPosition; m_rootMotion = Vector3.zero; } else { //-- 计算当前帧的Root Motion Vector3 rootPos = m_rootBone.localPosition; m_rootMotion = rootPos - m_lastRootPos; m_lastRootPos = rootPos; rootPos.x = 0; rootPos.z = 0; m_rootMotion.y = 0; m_rootBone.localPosition = rootPos; } m_lastAnimTime = (int)animState.normalizedTime; } } 最后是截图。。。好吧,静态图片看不出效果,可以下载完整Demo(请使用Unity 4.6版本打开),角色移动非常平滑,毫无滑步。请移步百度网盘: 密码:osoc

Unity3D 官方基础教程 Asset Workflow AssetWorkflow(资源工作流程)Herewe'llexplainthestepstouseasingleassetwithUnity.Thesestepsaregeneralandaremeantonlyasanoverviewforbasicactions.Fortheexample,we'lltalkaboutusinga3Dmesh.这里我们

Unity更改鼠标样式 游戏制作过程中,往往会用到改变鼠标样式的功能,原理很简单,就是隐藏原有光标,再实时得在鼠标位置绘制一张图即可,脚本如下:usingUnityEngine;usi

Unity shader教程-第五课:自定义光照模型之Half Lambert模型 本文首发地址:

标签: unity3d all compiler errors

本文链接地址:https://www.jiuchutong.com/biancheng/381531.html 转载请保留说明!

上一篇:Re: Latest Version: 3.7.9 (January 18th, 2015)

下一篇:Unity3D 官方基础教程 Asset Workflow(unity3d基础操作)

  • 企业所得税申报表
  • 利润税是多少个点
  • 总公司和子公司可以有业务往来吗
  • 收到货款没开票做应收还还应付
  • 盈余公积在现金流量表中哪里体现
  • 所得税费用在利润表中应在税金及附加项目中填列
  • 专门借款资本化时点
  • 二手车销售统一专票图片
  • 抵减的增值税如何记账
  • 欠款还了一部分怎么写起诉书
  • 销货清单和发票金额不一致
  • 滞纳金用留抵增值税交怎么处理
  • 7月1日前购进的农产品如何抵扣
  • 汽车折旧年限与什么有关
  • 分公司注销未分配利润转给总部,总部如何做账
  • 企业出口产品条件和流程
  • 资产负债表中的预付款项目应根据什么填列
  • 工会经费返还账务处理,另记账么
  • 残保金次年申报
  • 收取对方损失赔偿
  • 金税三期核心征管系统行政处罚
  • 实收资本的期初余额在借方还是贷方
  • 工会收到单位拨款怎么办
  • 小规模纳税人销售自己使用过的物品
  • 微软输入法打不出汉字只有拼音
  • 技嘉主板bios更新后无法开机
  • 如何设置老板键
  • 腾讯电脑管家网络修复
  • 门店出纳的工作内容
  • 铡什么意思
  • 关闭系统的命令位于什么菜单中
  • 公司收到款后怎么做账
  • 捐赠支出税前扣除条件
  • 出口退税退的是啥
  • 企业会计核算利润表
  • PHP:imagecreatetruecolor()的用法_GD库图像处理函数
  • framework4.0怎么打开
  • php修改头像
  • 收到的国家电网电话
  • 基于vue的网上商城
  • cnpm安装成功为什么用不了
  • vue的常见面试题
  • 在mysql中子查询是
  • php显示当前时间
  • 社会团体会费票据查询
  • 付款给个人
  • 专项扣除影响实绩吗
  • 公司注销持股1%的股东需要他签字吗
  • 车船税和保险在一张发票怎么做账
  • 购买加油卡走哪个平台好
  • 增值税免征印花税怎么算
  • 营改增对企业有什么弊端
  • 应收账款周转率越大越好还是越小越好
  • 销售退回的账务处理红字
  • 固定资产报废如何记账
  • 企业增资扩股如何办理
  • 新产品的研发费用扣除例题
  • 赠送油卡需要代理吗
  • 企业注销前是不是资产必须处理完
  • 会计忘记申报税款会有什么影响
  • 一次性开票分期确认收入已什么做原始凭证
  • 电子承兑汇票接收不了怎么办
  • 总账的建账过程
  • 输入法是全角在哪里设置
  • freebsd版本选择
  • 电脑界面显示windows
  • 隐藏文件或文件夹
  • win8如何关闭杀毒软件
  • SchSvr.exe - SchSvr是什么进程 有什么作用
  • 如何永久激活win11
  • dos到windows
  • javascript的核心语言对象包括
  • python文本
  • 基于javascript的论文题目
  • nodejs使用视频教程
  • inputchange
  • 山西税务服务热线号码
  • 北京环球影城服装
  • 购车发票购置税是否包含在内
  • 我国税务师事务所有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设