虚拟现实制作技术Unity教案项目十二模型动画交互开发二docxWord格式.docx
《虚拟现实制作技术Unity教案项目十二模型动画交互开发二docxWord格式.docx》由会员分享,可在线阅读,更多相关《虚拟现实制作技术Unity教案项目十二模型动画交互开发二docxWord格式.docx(13页珍藏版)》请在冰豆网上搜索。
打
模具
实地参观
挂图
现场演练
V
多媒体
上机训练
CAI
听力训练
虚拟仿真
其他
教学过程设计(分教学步骤列出内容、时间安排、教学方法、训练项目、素材等)
第二种方法,选择人形动画模型,单击三角按钮,单击生成一个Avatar的文件。
Attets•
图20
要对过渡条件进行控制,就需要设置过渡条件参数,Mecanim动画系统支持的过渡条件参数有Float、Int、Bool和Trigger4种。
Float.Tnt用来控制一个动画状态的参数,比如速度方向等可以用数值量化的东西。
Bool用来控制动画状态的转变,比如从走路转变到跑步。
Trigger木质上也是bool类型,但它默认为false,且当程序设置为true后,它会自动变回falseo
当设置好运动状态机后返回场景,Hierarchy视图中选择Constructor,将Assets中AnimatorController拖入Inspector下的含有Avatar的角色模型Animator组件中,如下图21所示。
▼就Animator&
,
|Controller
dEAnimatorControllerO|
Avatar
iConstructorAvzfSrO
ApplyRootMoton
Y
UpdateMode
CullingMode
[CmUUfdateTransforms
ClipC«
unt:
4
CurvesPos:
0Quat:
0Eultn0Sc«
l•:
0Muscles:
524Genenc:
0PPtn0
3CurvesCount:
524Consent:
41(7.8%)Dense:
483(92.2%)
0(0.0%)
图21
运行测试效果就是人物模型静止不动、跑、跳、走、静止……的状态。
课堂
小结
Unity可以用两种方式控制动画
1.Animation,这种方式简单,直接Play("
Idle"
)或者CorssFade("
)就可以播放动画;
2.Animator,Unity5.x之后推荐使用这种方式,因为里面可以加上混合动画,让动画切换更加平滑。
上机
实训
完成课堂实例。
作业
请参照任务演示及对应文字资料提交本次学习任务“角色动画的应用”的最后运
布置
行截图(要包括关键的Inspector展示)。
InspectorConfigureAvatar
Scene视图中的模型处于T形姿态,表示Avatar映射成功。
新课
一、实践任务一模型动画任务构思
模型动画是一类常见游戏动画,玩家通过特点的操作对模型进行动作指定,从而完成交互功能。
本任务通过模型动画的制作,了解骨骼绑定后的fbx模型动画在Unity3D软件中的使用方法。
1.任务设计
本任务在Unity3D内导入一个绑定好骨骼动画的第三人称人物模型,人物身上绑定了若干个动作,通过代码实现键盘与模型动画的交互功能。
2.实施过程步骤1:
创建项目并保存场景feiRenxingo步骤2:
执行Assets-*ImportPackage-Characters命令载入预先准备好人物资源和纹理,或是选中资源拖动到Assets中,如下图1所示。
Assets♦
■RH«
MittrialsctnttvucterfeiRtnxinf
Censtruct^r
c^nttvvcter.
步骤3:
将模型添加到Scene视图中,使用左手定律,调整模型坐标位置,如下图2所示。
步骤4:
打开Assets中的文件夹Materials,里面有一个材质球,选中材质球,在
Inspector里单击MainMapsT的Albedo,选择纹理,如下图3所示。
给人物贴好纹理,如下图4所示。
SelectTextureAssets
Noneconttn'
ctordittuie
。
Inspector
.con$tructor_don«
SMder
Pendenn^Mode。
—•
MainMaps
oUxulhc
Defau^hedrer
□DefAuttPmm
Bidground
/Chedrmiri
-DropdownArrowInputFieldB^drgroundKnob
UIMAtk
UJSpnte
图4
步骤5:
选中Assets中Constructor,在右侧的Inspector面板中选择Rig,设置动画类型AnimationType为Legacy,单击Apply按钮。
这时再单击Hierarchy中的Constructor,会发现Inspector面板发生变化,出现了Animation组件,如下图5所示。
▼^Animation
AnimationpJDTake001►AnimationsPlayAutomatically《
AnimatePhysicsCullingTypeOnRertdmr,
步骤6:
选中Assets中Constructor,在右侧的Inspector面板中选择Animations,
如下图6所示。
可以看到现在模型是一个完整的动画,给模型做一个动画的切片。
这时在Inspector面板最下方的动画效果图中是看不到人物模型的,为了方便操作(做动画切片时要根据人物动作确定开始帧和结束帧),可以先将设置动画类型AnimationType为Humanoid,以后再修改。
在ClipsT点击+号,生成一个切片TakeOOlO,因为一开始是静止的,改名为idle,如下图7所示。
在Start与End中设置这个动画的开始和结束帧数,在Start中输入1,End中输入62,如下图8所示。
图7
图8
继续生成一个切片TakeOOlO,改名为run,在Start中设置65,End中输入81,是模型跑动的一个过程。
再生成一个切片walk,在Start中设置83,End中输入116,是模型散步的一个过程。
最后生成一个切片jump,在Start中设置120,End中输入140,是模型散步的一个过程。
选择完整的切片TakeOOl,点击-号删除。
切片做好的效果如下图9所示。
单击Hierarchy中的Constructor,弹出如图10所示的对话框,单击Apply按钮。
选中Assets中Constructor,在右侧的Inspector面板中选择Rig,设置动画类型AnimationType为Legacyo
步骤7:
选择Hierarchy中的Constructor,Inspector面板中的组件Animation中默认的动画是静止idle。
动画组Size是4,也就是有4个动画,每个动画元素是idle、run、walk,jump,如下图11所示。
切片动作完成后,一定要将滚动条拖动到最下方,单击apply按钮,如下图12所示。
▼♦Animation
Arwnabon
QidltO
▼An«
m«
tJoni
4
Element0
jO
Element1
OninO
Element2
QwifrO
Element3
DjumpO
PhyAutom«
tic^iy
a
AmmMePhysics
LJ
CuiinflTyp«
►Curves
►Events
►Motion
►ImportMessages
|RevertJAppM1
图11图12
步骤8:
创建C#脚本,命名为control,并将其连接到摄像机上。
//定义一个公共变量,类型是游戏对象,名称是obj,最初是空的,没有游戏对象。
PublicGameObjectobj=null;
voidStart()(
//初始化时,通过Find方法寻找名称是Constructor的对象,赋值给obj。
obj=GameObject.Find("
Constructor"
);
//wrapMode是切片动画运行的模式,表示的是一个动作,以什么样的形式来做。
有四种模式。
//Once模式表示做一次动作后,停留在最后一帧,动作算是结束了。
//ClampForever模式表示这个动作,做到最后一帧的时候,会永远的停留在最后--帧,不算动作结束。
//Loop模式表示的是没有设置的情况下会不停的重复这个动作,当时间播放到末尾的时候重新播放从开始播放。
//单击Play按钮后,如果没有按字母键,人物就一直是idle,在原地静止不动。
obj.GetComponent<
Animation>
().wrapMode=WrapMode.Loop;
)〃设置动画播放类型为循环
voidUpdate()(
//按键后播放不同动画if(Input.GetKeyDown(KeyCode.A))〃按A键后,播放idle的动画,播放的动画名称一定要和前面动画切片的名称一致。
{obj.animation.Play("
idle"
}if(Input.GetKeyDown(KeyCode.B)){obj.animation.Play("
nm"
)if(Input.GetKeyDown(KeyCode.C))(obj.animation.Play("
walk"
}if(Input.GetKeyDown(KeyCode.D))(obj.animation.Play(*jump*);
})〃显示提示信息,为了增强可读性,告诉用户可以按哪些键voidOnGUI()(//GUILayout.LabelC按字母键A、B、C、D切换播放模型骨骼动画〃);
}步骤9:
单击Play按钮测试,可以通过键盘A、B、C、D键控制人物动作。
二、角色动画在游戏中的应用
对人形动画己经有了一定的了解,下面学习在游戏开发中人形角色动画的具体应用步骤。
1.Animator组件
Animator组件是关联角色及其行为的纽带,每一个含有Avatar的角色动画模型都需要一个Animator组件。
Animator组件引用了AnimatorController用于为角色设置行为,如下图12所示。
▼*■n/Animator
Controller
ApplyRootMotionUpdateModeCullingMode
None(RuntimeAnimatorControllerO
ZConstructorAvatar
CullUpdafTransforms
Hot图12
Animator组件具体参数如下表所示:
参数
含义
功能
控制器
关联到伯色的Animator控制器
选择Assets中的人物模型,拖放到场景中,场景中就有一个人形动画模型,Inspector面板上出现了Animation组件,如下图13所示。
骨架结构的映射
定义Mecanim动画系统的简化人形骨
架结构到该角色的骨架结构的映射
ApplyRootMotion
应用RootMotion选项
设置使用动画本身还是使用脚本来控制角色的位置
AnimatePhysics
动画的物理选项
设置动画是否与物理属性交互
动画的裁剪模式
设置动画是否裁剪以及裁剪模式
▼Animator
5
Av«
Ur
«
ConstructorAvAUrO
I8
jCullUpdateTr«
nsf«
rms«
图13AnimatorController
AnimatorController可以从Project视图创建一个动画控制器(执行Create-*AnimatorController命令)。
同时会在Assets文件夹内生成一个后缀名^9.Controller的文件,这就是动画控制器,可以重命名,如下图14所示。
FolderScript
J«
v«
$cnp<
EditorTwtC»
Script
ScenePrefib
AudioMixer
图14
MateriallensRare
RenderTexturelightmapPerimeters
SpritesAnimatorController
AnimationAAnimatorOverrideController
AvatarMaskPhysicMatenal
Phy«
ks2DMmrUIGUISide
CustomFontle9«
cy
参照上文给模型做一个动画的切片,返回动画状态机进行相应设置。
2.Animator动画状态机
一个角色一般会拥有若干不同的状态,需要在不同的条件下播放不同的状态动画(执行动作),还需要控制动画的播放速度、播放时间等。
在Unity中使用动画状态机
(Animator)来将动画状态以流程图的网格化形式可视化,可以通过它来实现角色动画状态的播放以及切换。
动画状态机可以通过动画状态机窗口进行设置,如下图15所示。
图15
1AnyState
动画状态机一旦创建,默认情况下AnyState,AnyState状态的代表各个状态随时都可能会跳转至他所指向的状态,表示任意状态的特殊状态。
例如如果希望角色在任何状态下都有可能切换到死亡状态,那么AnyState就可以做到。
2Entry
绿色的Entry表示状态机的入口状态。
当我们为某个GameObject添加上Animator组件时,这个组件就会开始发挥它的作用。
如果AnimatorController控制多个Animation的播放,那么默认情况下Animator组件会播放哪个动画呢?
是由Entry来决定的。
但是Entry本身并不包含动画,而是指向某个带有动画的状态,并设置其为默认状态。
被设置为默认状态的状态会显示为橘黄色。
在图15中Idle就是默认状态。
可以随时在任意一个状态上通过鼠标右键->
SetasLayerDefaultState更改默认状态,如下图16所示。
CM
3Exit
Exit状态表示状态机的出口状态,以红色标识。
如果动画控制器只有一层,那么这个状态没有作用。
但是如果需要从子状态机中返回到上一层(Layer)时,把状态指向Exit就可以了,如图17所示。
4状态间的过渡关系
直观上说它们就是连接不同状态的有向箭头。
动画状态过渡的搭建可以通过创建空的动画状态,或是直接把创建的动画片段拖动进去,如图18所示。
图18
动画状态机之间的箭头标示两个动画之间的连接,右击一个动画状态单元,在快捷菜单中执行MakeTransition命令创建动画过渡条件,然后并把出现的箭头拖拽到另一个动画状态单元即可,完成动画过渡条件的连接,如图19所示。
图19
过渡条件用于实现各个动画片段之间的逻辑,开发人员通过控制过渡条件可以实现对动画的控制。
图20就显示动画模型先是静止,然后是跑,接下来是跳,最后是走的,又回到静止,形成一个循环。