maxmax2018原地复制循环动作怎么让他产生位移?如果一步步移动怎么合理匹配运动速度和路程啊?

3dsMax biped导入bip动作文件后,怎么让它固定动作继续保持但没有位移了?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
3dsMax biped导入bip动作文件后,怎么让它固定动作继续保持但没有位移了?
3dsmax2012
用biped创建骨骼和蒙好皮之后,导入网上找的一些BIP动作后,发现都是有位移的,而动作导入unity他们说需要保持物体只在原处运动,就是不能有水平和垂直方向上的位移,在网上说有原地模式?我找了半天没找到……求救,该怎么弄,才能在不影响导入动...
我有更好的答案
关键帧有位置变化的帧 就没办法改变 除非你改变位置的帧 原地模式也只是显示是原地而已
原地模式导入unity里面之后还是会有位移的吗?0.0
大哥,你先告诉我原地模式在哪里吧,我没找着啊- -而且关键帧如何改呢?曲线编辑器?不会弄T-T
采纳率:44%
为您推荐:
其他类似问题
3dsmax的相关知识
换一换
回答问题,赢新手礼包新的动画系统中适应root motion的那种带位移信息动画该如何做?【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:80,536贴子:
新的动画系统中适应root motion的那种带位移信息动画该如何做?收藏
新的动画系统中适应root motion的那种带位移信息动画应该如何制作?我自己试了一下发现动作循环是没问题的,但是位移也循环了……第一贞X轴是0最后一帧是10,动画播放到最后一帧然后循环回第一贞,但是X轴也回到0的位置了……如何才能做到像官方的动画那样动作循环位移一直前进?QQ上问了很多群,大部分的回答都是:你为什么要用动画控制位移,用脚本不好么?直接就从根本上把我这个问题PASS掉了……各种教程里都是说已经有资源的情况下拿来怎么拿来设置怎么用,没有看到哪个教程教如何制作这种资源,本人工作时又是以建模为主附带绑定,调动画非常少,所以不是很清楚这一块到底应该怎么弄~有哪位动画大触能教教我怎么调这种动画么?拜托了。
VRStar unity3d,名师一对一辅导,带你触碰前沿VR技术.一流的教学环境和VR学习体验,VRStar您正确的选择!
MAX或者MAYA或者U3D内部都可以~或者原地循环调完可以在U3D内加位移信息使它变成带位移动画么?如果可以应该怎么做?谢谢了~
如果是人物模型并且是带骨骼的话,可以将人物模型动画的Animation Type 设置为humanoid ,前提是你的动画已经扣了走动距离,这样就不需要你去管移动了。预览的时候你就会发现,人物在运动的时候,人物脚下的大圈也是随着人物运动的。你之前的动画你也可以再细看看,动画在移动的时候,脚下的大圈是不移动的,随意当你动画播放完毕的时候,人物又回到了大圈的位置。
如果你的动画本身带位移的,在unity里面播放的时候你可能会发现播放完成之后又会回到原来的点,位移不会出现,所以animator有个位移的值,你可以试一下,比如你加了刚体或者其他的组件,可以通过复制来达到位移效果,//刚体组件myRi.position += animator.deltaPosition*1.2f;可以放在OnAnimatorMove函数下,可以加限制条件,这个函数是在animator动画播放的每帧都在调用的
我第一次把max里面的动画导入unity并作游戏,很多都不清楚。max里做动作的时候都是按常理做的,没想到还要遇到自身位移的事情。。。我只想问Unity就没有开发出这个功能么:就算动画目标自带位移,但是可以选择 应用目标位移(即动画结束后目标的位置就更新为动画最后一帧哪里的位置);和忽视目标位移(也就是把自带的位移去掉) 我猜应该是还没有这个选项吧,如果有的话请告诉我在哪里。
我也遇到类似问题了 我想做一个升龙拳的动画 可是用 你说的animator.deltaPosition 获取的值都是0
大哥,我也是同样的问题,我是一个带位移的攻击动画,攻击完就回到原点,脚下的大圈没有跟着移动啊。现在不知道怎么解决。求帮忙!万分感谢!
我也遇到这种问题,比如 跳跃动画带位移,当跳跃动画结束位,变会待命状态,会自已回到原来的位置
带着同样的问题来看了答案,似乎都不是我想要的,自己研究了下,我想我找到了你们的痛点和解决方案,1.首先U3D 5.3.1版本2.你的动画原本是要有位移的,一般指root关节有位移3.导入到unity之后按如下配置,Animation Type不需要选humanoid,指定Root node为你动画骨架的root,点击Apply4.此时,顶部切换到Animations往下拉,会看到Root Transform *****等的配置,如图配置就行5.然后将模型拖入场景中,确保勾选Apply Root Motion,这样就达成了“unity中位移跟随动画root位移”
登录百度帐号推荐应用程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之FBX模型的载入与人物行走动画的播放(十二)
Unity3D研究院之FBX模型的载入与人物行走动画的播放(十二)
围观118693次
编辑日期: 字体:
3D 世界中自定义模型的使用恐怕是重中之重,因为系统自身提供的模型肯定是无法满足GD对游戏的策划,所以为了让游戏更加绚丽,我们须要调用美术制作的精品模型与动画,本章MOMO将带领盆友们学习Unity3D中模型的载入与动画的播放,哇咔咔~~
由于MOMO手头上没有现成的模型,所以我将在Unity3D 官网中下载官方提供的游戏DEMO 中的模型来使用。另外官方提供了很多Unity3D 游戏DEMO,与详细的文档。可以帮助我们学习Unity.有兴趣的盆友可以去看看哈。
下载页面:
本章博文的目的是利用上一章介绍的游戏摇杆来控制人物模型的移动,与行走动画的播放。
如上图所示Create中的文件夹male中存放着模型动画与贴图等,这个应该是美术提供给我们的。然后将整个male用鼠标拖动到左侧3D世界中,通过移动,旋转,缩放将人物模型放置在一个理想的位置。右侧红框内设置模型动画的属性。
该模型默认动画名称为idle1
Animations
该模型动画的数量
Element 该模型的动画名称
Play Automatically 是否自动播放
Animation Physics 是否设置该模型物理碰撞
Animation Only if Visable 是否设置该模型仅自己显示
给该模型绑定一个脚本Controller.cs 用来接收摇杆返回的信息更新模型动画。
Controller.cs
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
using UnityEngine;using System.Collections;&public class Controller : MonoBehaviour {& //人物的行走方向状态 public const int HERO_UP= 0; public const int HERO_RIGHT= 1; public const int HERO_DOWN= 2; public const int HERO_LEFT= 3;& //人物当前行走方向状态 public int state = 0;& //备份上一次人物当前行走方向状态 //这里暂时没有用到 public int backState = 0;& //游戏摇杆对象 public MPJoystick moveJoystick;&&& //这个方法只调用一次,在Start方法之前调用 public void Awake() {& }& //这个方法只调用一次,在Awake方法之后调用 void Start () {
state = HERO_DOWN; }& void Update () {& //获取摇杆控制的方向数据 上一章有详细介绍&&&&float touchKey_x =&&moveJoystick.position.x;&&&&float touchKey_y =&&moveJoystick.position.y;&&&&&&&if(touchKey_x == -1){&&&&&& setHeroState(HERO_LEFT);&&&&&}else if(touchKey_x == 1){&&&&&& setHeroState(HERO_RIGHT);&&&&&}&&&&&&&if(touchKey_y == -1){&&&&&&&&setHeroState(HERO_DOWN);&&&&&}else if(touchKey_y == 1){&&&& setHeroState(HERO_UP);&&&&}&&& if(touchKey_x == 0 && touchKey_y ==0){
//松开摇杆后播放默认动画,
//不穿参数为播放默认动画。
animation.Play(); }& }& public void setHeroState(int newState) {&
//根据当前人物方向 与上一次备份方向计算出模型旋转的角度
int rotateValue = (newState - state) * 90;
Vector3 transformValue = new Vector3();&
//播放行走动画
animation.Play("walk");&
//模型移动的位移的数值
switch(newState){
case HERO_UP:
transformValue = Vector3.forward * Time.deltaTime;
case HERO_DOWN:
transformValue = -Vector3.forward * Time.deltaTime;
case HERO_LEFT:
transformValue = Vector3.left * Time.deltaTime;&
case HERO_RIGHT:
transformValue = -Vector3.left * Time.deltaTime;
}&&&&&&&&&//模型旋转
transform.Rotate(Vector3.up, rotateValue);&
//模型移动
transform.Translate(transformValue, Space.World);&
backState = state;
state = newState;& }&}
上一章介绍了javaScript脚本使用游戏摇杆的方法,本章MOMO告诉大家使用C#脚本来使用游戏摇杆,上面我用 Controller.cs
C#脚本来接收系统提供的Joystick.js是肯定无法使用的,须要修改成.cs文件,我在国外的一个网站上看到了一个老外帮我们已经修改了,那么我将他修改后的代码贴出来方便大家学习,有兴趣的朋友可以研究研究。哇咔咔~
MPJoystick.cs
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
using UnityEngine; &/**& * File: MPJoystick.cs& * Author: Chris Danielson of ()& * &// USED TO BE: Joystick.js taken from Penelope iPhone Tutorial&//&// Joystick creates a movable joystick (via GUITexture) that &// handles touch input, taps, and phases. Dead zones can control&// where the joystick input gets picked up and can be normalized.&//&// Optionally, you can enable the touchPad property from the editor&// to treat this Joystick as a TouchPad. A TouchPad allows the finger&// to touch down at any point and it tracks the movement relatively &// without moving the graphic&*/[RequireComponent(typeof(GUITexture))]&public class MPJoystick : MonoBehaviour&{&class Boundary {&public Vector2 min = Vector2.zero;&public Vector2 max = Vector2.zero;&}private static MPJoystick[] joysticks;
// A static collection of all joysticks&private static bool enumeratedJoysticks = false;&private static float tapTimeDelta = 0.3f;
// Time allowed between tapspublic bool touchPad;&public Vector2 position = Vector2.zero;&public Rect touchZone;&public Vector2 deadZone = Vector2.zero;
// Control when position is output&public bool normalize = false; // Normalize output after the dead-zone?&public int tapCount;
&private int lastFingerId = -1;
// Finger last used for this joystick&private float tapTimeWindow;
// How much time there is left for a tap to occur&private Vector2 fingerDownPos;&//private float fingerDownT&//private float firstDeltaTime = 0.5f;private GUITexture gui;&private Rect defaultRect;
// Default position / extents of the joystick graphic&private Boundary guiBoundary = new Boundary();
// Boundary for joystick graphic&private Vector2 guiTouchOffset;
// Offset to apply to touch input&private Vector2 guiCenter;
// Center of joystickvoid Start() {&gui = (GUITexture)GetComponent(typeof(GUITexture));defaultRect = gui.pixelInset;&defaultRect.x += transform.position.x * Screen.width;// + gui.pixelInset.x; // -&&Screen.width * 0.5;&&&&& defaultRect.y += transform.position.y * Screen.height;// - Screen.height * 0.5;transform.position = Vector3.zero;if (touchPad) {&// If a texture has been assigned, then use the rect ferom the gui as our touchZone&if ( gui.texture )&touchZone = defaultRect;&} else {&guiTouchOffset.x = defaultRect.width * 0.5f;&guiTouchOffset.y = defaultRect.height * 0.5f;// Cache the center of the GUI, since it doesn't change&guiCenter.x = defaultRect.x + guiTouchOffset.x;&guiCenter.y = defaultRect.y + guiTouchOffset.y;// Let's build the GUI boundary, so we can clamp joystick movement&guiBoundary.min.x = defaultRect.x - guiTouchOffset.x;&guiBoundary.max.x = defaultRect.x + guiTouchOffset.x;&guiBoundary.min.y = defaultRect.y - guiTouchOffset.y;&guiBoundary.max.y = defaultRect.y + guiTouchOffset.y;&}&}public Vector2 getGUICenter() {&return guiCenter;&}void Disable() {&gameObject.active = false;&//enumeratedJoysticks =&}private void ResetJoystick() {&gui.pixelInset = defaultRect;&lastFingerId = -1;&position = Vector2.zero;&fingerDownPos = Vector2.zero;&}private bool IsFingerDown() {&return (lastFingerId != -1);&}public void LatchedFinger(int fingerId) {&// If another joystick has latched this finger, then we must release it&if ( lastFingerId == fingerId )&ResetJoystick();&}void Update() {&if (!enumeratedJoysticks) {&// Collect all joysticks in the game, so we can relay finger latching messages&joysticks = (MPJoystick[])FindObjectsOfType(typeof(MPJoystick));&enumeratedJoysticks = true;&}int count = Input.touchCount;if ( tapTimeWindow & 0 )&tapTimeWindow -= Time.deltaTime;&else&tapCount = 0;if ( count == 0 )&ResetJoystick();&else&{&for(int i = 0; i & count; i++) {&Touch touch = Input.GetTouch(i);&Vector2 guiTouchPos = touch.position - guiTouchOffset;bool shouldLatchFinger = false;&if (touchPad) {&if (touchZone.Contains(touch.position))&shouldLatchFinger = true;&}&else if (gui.HitTest(touch.position)) {&shouldLatchFinger = true;&}// Latch the finger if this is a new touch&if (shouldLatchFinger && (lastFingerId == -1 ?? lastFingerId != touch.fingerId )) {if (touchPad) {&//gui.color.a = 0.15;&lastFingerId = touch.fingerId;&//fingerDownPos = touch.&//fingerDownTime = Time.&}lastFingerId = touch.fingerId;&// Accumulate taps if it is within the time window&if ( tapTimeWindow & 0 )&tapCount++;&else {&tapCount = 1;&tapTimeWindow = tapTimeDelta;&}// Tell other joysticks we've latched this finger&//for (&&j : Joystick in joysticks )&foreach (MPJoystick j in joysticks) {&if (j != this) &j.LatchedFinger( touch.fingerId );&}&}if ( lastFingerId == touch.fingerId ) {&// Override the tap count with what the iPhone SDK reports if it is greater&// This is a workaround, since the iPhone SDK does not currently track taps&// for multiple touches&if ( touch.tapCount & tapCount )&tapCount = touch.tapCount;if ( touchPad ) {&// For a touchpad, let's just set the position directly based on distance from initial touchdown&position.x = Mathf.Clamp( ( touch.position.x - fingerDownPos.x ) / ( touchZone.width / 2 ), -1, 1 );&position.y = Mathf.Clamp( ( touch.position.y - fingerDownPos.y ) / ( touchZone.height / 2 ), -1, 1 );&} else {&// Change the location of the joystick graphic to match where the touch is&Rect r = gui.pixelInset;&r.x =&&Mathf.Clamp( guiTouchPos.x, guiBoundary.min.x, guiBoundary.max.x );&r.y =&&Mathf.Clamp( guiTouchPos.y, guiBoundary.min.y, guiBoundary.max.y );&gui.pixelInset = r;&}if (touch.phase == TouchPhase.Ended ?? touch.phase == TouchPhase.Canceled)&ResetJoystick();&}&}&}if (!touchPad) {&// Get a value between -1 and 1 based on the joystick graphic location&position.x = ( gui.pixelInset.x + guiTouchOffset.x - guiCenter.x ) / guiTouchOffset.x;&position.y = ( gui.pixelInset.y + guiTouchOffset.y - guiCenter.y ) / guiTouchOffset.y;&}// Adjust for dead zone&var absoluteX = Mathf.Abs( position.x );&var absoluteY = Mathf.Abs( position.y );&if (absoluteX & deadZone.x) {&// Report the joystick as being at the center if it is within the dead zone&position.x = 0;&}&else if (normalize) {&// Rescale the output after taking the dead zone into account&position.x = Mathf.Sign( position.x ) * ( absoluteX - deadZone.x ) / ( 1 - deadZone.x );&}if (absoluteY & deadZone.y) {&// Report the joystick as being at the center if it is within the dead zone&position.y = 0;&}&else if (normalize) {&// Rescale the output after taking the dead zone into account&position.y = Mathf.Sign( position.y ) * ( absoluteY - deadZone.y ) / ( 1 - deadZone.y );&}}}
导出 build and run
看看在iPhone 上的效果,通过触摸游戏摇杆可以控制人物的上,下,左,右 ,左上,右上,左下,右下 8个方向的移动啦,不错吧,哇咔咔~~
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,本来昨天就想发表这篇文章,结果晚上去打高尔夫球连挥N杆,打的回家后浑身酸痛,回家就睡觉啦~希望大家在学习的同时别忘了多运动。哇咔咔~~~ 附上Unity3D工程的下载地址,Xcode项目我就不上传了,须要的自己导出。
下载地址:
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!
Pingback 引用通告:

我要回帖

更多关于 max模型位移了 的文章

 

随机推荐