




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章模型与动画
1第八章模型与动画1
8.13D模型背景知识8.1.1主流3D建模软件的介绍Autodesk3DStudioMaxAutodeskMayaCinema4D28.13D模型背景知识8.1.1主流3D建模软件的介绍2
8.13D模型背景知识8.1.1主流3D建模软件的介绍Autodesk3DStudioMaxAutodeskMayaCinema4D38.13D模型背景知识8.1.1主流3D建模软件的介绍3
8.13D模型背景知识8.1.2 Unity与建模软件单位的比例关系为了让模型在导入Unity后能够保持其本来的尺寸,就需要调整建模软件的系统单位或者尺寸。在3D建模软件中,应尽量使用“米”制单位。表8-1中展示了建模软件的系统单位在设置成“米”制单位后,与Unity系统单位的对应比例。建模软件建模软件内部米制尺寸/m导入Unity中的尺寸/m与Unity单位的比例关系3dsMax10.01100:1Maya11001:100Cinema4D11001:10048.13D模型背景知识8.1.2 Unity与建模软件单
8.13D模型背景知识8.1.2 Unity与建模软件单位的比例关系下面将以3dsMax为例,介绍一下参数设置调整的过程(1)打开3dsMax软件后,打开“自定义”菜单下的“单位设置”选项,如图8-1所示。(2)在弹出的“单位设置”对话框中,将“显示单位比例”下的“公制”选项修改为“厘米”。如图8-2所示。(3)点击对话框顶部的“系统单位设置”按钮,在弹出的“系统单位设置”对话框中将单位修改为“厘米”,如图8-3所示。修改完成后单击确定完成参数设置调整。
图8-1自定义菜单 图8-2单位设置菜单 图8-3系统单位设置菜单58.13D模型背景知识8.1.2 Unity与建模软件单
8.13D模型背景知识8.1.3 将3D模型导入Unity下面以3dsMax为例,为读者演示一遍从建模到将模型导入Unity的过程。具体步骤如下。(1)首先打开3dsMax,点击右侧“AECExtended”(AEC扩展)中“Foliage”(树)按钮,在下方的列表中的模型中任意选择一种,创建一个树模型。如图8-4所示,这时就完成了一个最基本的建模工作。68.13D模型背景知识8.1.3 将3D模型导入Unit
8.13D模型背景知识8.1.3 将3D模型导入Unity(2)点击窗口左上角的3dsMax标志,打开下拉菜单。单击导出选项,如图8-5所示。然后会弹出对话框,选择导出的路径并且为导出的文件命名(注意保存类型选择.FBX),点击保存按钮即可导出。(3)将模型导入Unity中,点击Unity中菜单栏单击“Assets”→“ImportNewAssets...”,会弹出导入资源对话框,按照模型的路径找到并选中模型,点击导入按钮,完成导入。导入的模型会保存在Assets文件夹中,开发者可以在Assets面板中查看以及使用。78.13D模型背景知识8.1.3 将3D模型导入Unit
8.2网格—Mesh8.2.1 网格过滤器(MeshFilter)网格过滤器中有一个重要的属性——“Mesh”,用于储存物体的网格数据,它可以从资源中拿出网格并将网格传递给网格渲染器(MeshRenderer)
,并在屏幕上渲染。在导入模型资源时,Unity会自动创建一个网格过滤器,如图8-6所示。图8-6网格过滤器组件88.2网格—Mesh8.2.1 网格过滤器(MeshF
8.2网格—Mesh8.2.2 Mesh属性和方法介绍(1)Mesh中有一些用于储存物体的网格数据的属性,这些属性主要用于储存网格中各种数据,并且均以数组的形式出现,详细说明如表8-2所示。属性说明属性说明vertices网格的顶点数组normals网格的法线数组tangents网格的切线数组uv网格的基础纹理坐标uv2如果存在,这是为网格设定的第二个纹理坐标subMeshCount子网格的数量。每种材质都有一个独立的网格列表bounds网格的包围体colors网格的顶点颜色数组triangles包含所有三角形顶点索引的数组vertexCount网格中顶点的数量(只读)boneWeights每个顶点的骨骼权重bindposes绑定的姿势。每个索引绑定的姿势使用具有相同索引的骨骼98.2网格—Mesh8.2.2 Mesh属性和方法介绍属性
8.2网格—Mesh8.2.2 Mesh属性和方法介绍(2)Mesh中有生成或修改物体网格的方法,这些方法主要用于设置储存网格各种数据,并且均以数组的形式出现,详细说明如表8-3所示。方法说明方法说明Clear清空所有顶点数据和所有三角形索引RecalculateBounds重新计算从网格包围体的顶点RecalculateNormals重新计算网格的法线Optimize显示优化的网格GetTriangles返回网格的三角形列表SetTriangles为网格设定三角形列表CombineMeshes组合多个网格到同一个网格108.2网格—Mesh8.2.2 Mesh属性和方法介绍方法
8.2网格—Mesh8.2.3 Mesh的使用(1)首先创建一个工程项目,并命名为“BNUMeshes”。然后创建地形。(2)创建水。选中“Assets”文件夹,右键选择ImportPackage→Water(ProOnly)导入标准水资源包,如图8-7所示。然后拖拽DaylightWater到场景中,并调整水和地形的位置参数,如图8-9和图8-10所示,最终实现如图8-8的位置效果。
图8-9水位置参数 图8-10地形位置参数118.2网格—Mesh8.2.3 Mesh的使用 图8-9
8.2网格—Mesh8.2.3 Mesh的使用
图8-7导入标准水资源包 图8-8地形与水面的位置128.2网格—Mesh8.2.3 Mesh的使用图8-
8.2网格—Mesh8.2.3 Mesh的使用(3)创建两个空对象,分别命名为“Expansion”和“Triangle”,具体步骤为“GameObject”→“CreateEmpty”,如图8-11所示。然后两个空对象添加网格过滤器,先选中对象然后单击菜单“Component”→“Mesh”→“MeshFilter”为对象添加网格过滤器,如图8-12所示。
图8-11创建空对象图8-12添加网格过滤器138.2网格—Mesh8.2.3 Mesh的使用图8-1
8.2网格—Mesh8.2.3 Mesh的使用(4)下面向两个空对象的网格过滤器组件中添加网格属性。将“Assets\Meshes”文件夹下的“Triangle.FBX”和“Expansion.FBX”模型文件中的网格“Box01”,如图8-13,分别拖拽到“Expansion”和“Triangle”对象的网格过滤器组件的“Mesh”属性中,如图8-14所示。
图8-13模型文件中的网格“Box01” 图8-14网格过滤器组件148.2网格—Mesh8.2.3 Mesh的使用图8-13
8.2网格—Mesh8.2.3 Mesh的使用(5)创建一个空对象,并且命名为“Obj1”,调整该对象的位置和大小,具体参数如图8-15所示。然后为“Obj1”对象添加网格过滤器和网格渲染器,具体步骤为选中对象然后单击菜单“Component”→“Mesh”→“MeshRenderer”为对象添加网格渲染器,如图8-16所示。
图8-15“Obj1”对象的位置和大小 图8-16添加网格渲染器158.2网格—Mesh8.2.3 Mesh的使用图
8.2网格—Mesh8.2.3 Mesh的使用(6)然后“Obj1”对象添加纹理。将“Assets\Textures”文件夹下的“wenli.tga”纹理文件拖拽到“Obj1”对象上,然后按照相同的方法再创建4个对象,并分别命名为“Obj2”、“Obj3”、“Obj4”、“Obj5”,拖拽后的五个对象的网格渲染器的“material”属性就均被设置为“wenli”材质,如图8-17所示。图8-17“Obj1”对象的网格渲染器组件168.2网格—Mesh8.2.3 Mesh的使用图8-17
8.2网格—Mesh8.2.3 Mesh的使用(7)单击鼠标右键,在弹出的菜单中选择“Create”→“C#Script”创建脚本。命名为“BNUMesh.cs”,然后双击打开脚本,开始“BNUMesh.cs”脚本的编写,本脚本主要用于通过控制网格属性来实现物体变形的效果
4 publicclassBNUMesh:MonoBehaviour{5 Meshmesh; //物体的网格对象6 inttime; //用于记录时间7 publicGameObject[]g; //包含网格的对象数组8 Mesh[]m; //网格对象数组9 publicList<Vector3>vertice; //网格的顶点数组10 publicList<int>triangle; //包含所有三角形顶点索引的数组11 publicList<Vector2>uv; //网格的基础纹理坐标12 publicList<Vector3>normal; //网格的法线数组13 publicList<Vector4>tangent; //网格的切线数组14 boolbian=true; //物体一次变形是否完成15 ints=0; //物体变形形状标志位178.2网格—Mesh8.2.3 Mesh的使用17
8.2网格—Mesh8.2.3 Mesh的使用(8)在“BNUMesh.cs”脚本中Start方法的主要功能是系统通过在场景加载时调用此方法来实现物体网格的细化,Start方法的具体代码如下。详见课本(9)在“BNUMesh.cs”脚本中Update方法的主要功能是系统通过调用此方法来不断改变网格数据使物体不断变形。188.2网格—Mesh8.2.3 Mesh的使用18
8.2网格—Mesh8.2.3 Mesh的使用(10)将脚本“BNUMesh.cs”分别拖拽到上面创建的六个游戏对象上。然后单击游戏对象,在属性查看器中可看到脚本组件的内容,然后设置参数,如图8-18所示。图8-18脚本参数设置198.2网格—Mesh8.2.3 Mesh的使用图8-18
8.2网格—Mesh8.2.3 Mesh的使用(11)单击游戏运行按钮,观察效果。在Game窗口中可以看到地形和不断变形的六个物体。如图8-19和图8-20所示。
图8-19案例运行效果图1 图8-20案例运行效果图2208.2网格—Mesh8.2.3 Mesh的使用 图8
8.3骨骼结构映射——AvatarAvatar是Mecanim动画系统中自带的人形骨骼结构与模型文件中的骨骼结构之间的映射,将带有动画的模型文件资源导入Unity3D后,系统会自动为模型文件生成一个Avatar文件作为其子对象,如图8-21所示。
图8-21Avatar文件图 218.3骨骼结构映射——AvatarAvatar是Mecan
8.3骨骼结构映射——Avatar8.3.1 Avatar的创建单击刚刚的人形角色模型文件,在Inspector视口中选择Rig选项,如图8-22所示。单击AimationType下拉按钮,选择Humanoid选项,然后点击Apply按钮,视口变成如图8-23所示。完成后该模型文件已经被设置为人形角色模型,并且系统会为其创建Avatar文件。
8-22Rig选项图 8-23Humanoid模式228.3骨骼结构映射——Avatar8.3.1 Avatar
8.3骨骼结构映射——Avatar8.3.2 Avatar的配置(1)在Assets面板中单击模型文件下子对象Avatar文件,然后单击Inspector面板中的“ConfigureAvatar”按钮,如图8-24所示。此时系统会关闭原场景窗口,进入Avatar的配置窗口。配置窗口是系统开启的一个临时Scene视口,并且配置结束后该临时窗口会自动关闭。
图8-24 图8-25 238.3骨骼结构映射——Avatar8.3.2 Avatar
8.3骨骼结构映射——Avatar8.3.2 Avatar的配置(2)配置窗口的Scene窗口中会出现导入人物模型的骨骼,如图8-26所示。右侧为Avatar的Inspector面板,配置窗口与平时开发用的Scene窗口相同,更改Inspector中的参数后也会改变显示在Scene视口中的模型。图8-26Scene视口248.3骨骼结构映射——Avatar8.3.2 Avatar
8.3骨骼结构映射——Avatar8.3.2 Avatar的配置(3)在配置窗口右侧的Avatar配置面板中可以按部位对人形角色模型进行配置,此面板中共分为“Body”、“Head”、“LeftHand”和“RightHand”四个方面,分别对应四个按钮,如图8-25所示。点击不同的按钮会出现不同部位的骨骼配置窗口,并且各个部位的配置互不影响,如图8-27和图8-28所示。
图8-27头部骨骼配置窗口 图8-28手部骨骼配置窗口258.3骨骼结构映射——Avatar8.3.2 Avatar
8.3骨骼结构映射——Avatar8.3.2 Avatar的配置(4)一般情况下开发者创建了Avatar后Uniy3D都会对其正确的初始化,但有时候如果出于模型文件本身的问题,Unity3D无法识别到每个部位相应的骨骼,此时错误部位就会呈现红色,如图8-29所示。
图8-29错误部位呈红色
268.3骨骼结构映射——Avatar8.3.2 Avatar
8.3骨骼结构映射——Avatar8.3.2 Avatar的配置(5)开发者此时需要手动更改错误部位的骨骼。首先在Hierarchy窗口的骨骼列表中找到正确的骨骼,如图8-30所示。然后将正确的骨骼拖拽到Inspector视口中该骨骼相对应的位置上,若拖拽到正确位置后,错误的部位会变回绿色,Avatar的也就配置完成了。图8-30Hierarchy窗口中的骨骼列表278.3骨骼结构映射——Avatar8.3.2 Avatar
8.3骨骼结构映射——Avatar8.3.3 Muscle的配置(1)点击Avatar视口中的Muscles按钮进入Muscle的配置窗口。该窗口和刚刚的骨骼配置窗口类似,由预览窗口、设置窗口及附加配置窗口三部分组成。(2)下面以左胳膊的骨骼为例对参数调节进行讲解,首先选中设置窗口中LeftArm参数,其附带的子参数也会随之展开,包括肩部的上下和前后移动,胳膊的上下、前后移动和转动等等,如图8-31所示。
图8-31Muscle配置窗口
288.3骨骼结构映射——Avatar8.3.3 Muscle
8.3骨骼结构映射——Avatar8.3.3 Muscle的配置(3)读者可以通过拖动参数对应的拖拉条,调节相对应部位骨骼的运动范围,同时在Scene窗口中对应的骨骼上会出现一个扇形区域,表示骨骼旋转过的范围,如图8-32所示,能够帮助开发者调节骨骼的动作范围。
图8-32Scene视图298.3骨骼结构映射——Avatar8.3.3 Muscle
8.3骨骼结构映射——Avatar8.3.3 Muscle的配置(4)在下方AdditionalSetting窗口中还可以进行其它的设置,比如UpperArmTwist参数,如图8-33所示。读者可通过拖动其拖拉条该骨骼的运动范围进行调整。设置完毕之后点击配置窗口右下角的“Done”按钮结束Muscle的配置。
图8-33其它设置窗口
308.3骨骼结构映射——Avatar8.3.3 Muscle
8.3骨骼结构映射——Avatar8.3.3 Muscle的配置(5)返回播放任务模型的动画,在Assets面板中找到导入的模型资源,点击其中的动画文件,如图8-34所示。在动画的Inspetor面板下方会播放该动画,点击上方的进度条可以按时间查看动画每帧的动作,如图8-35所示。
8-34模型文件下的动画文件318.3骨骼结构映射——Avatar8.3.3 Muscle
8.3骨骼结构映射——Avatar8.3.3 Muscle的配置
8-35播放动画文件328.3骨骼结构映射——Avatar8.3.3 Muscle8.4动画控制器8.4.1 创建动画控制器在Assets面板中单击鼠标右键“Create”→“AnimatorController”,创建一个动画控制器,如图8-36所示。动画控制器的显示和修改在独立的动画编辑界面,双击该动画控制器,进入动画控制器编辑窗口,如图8-37所示
图8-36创建动画控制器 图8-37动画控制器编辑窗口338.4动画控制器8.4.1 创建动画控制器 图8-38.4动画控制器8.4.2 动画控制器的配置1、动画状态机和过渡条件动画状态机:一个角色在游戏中的不同状态下可以作出不同的动作,状态机来更为方便地控制角色动画。每一个动画控制器中的状态机会有不同的颜色,每一个动画状态机都对应一个动作。动画状态机的参数含义如表8-4所示
348.4动画控制器8.4.2 动画控制器的配置 348.4动画控制器8.4.2 动画控制器的配置动画状态机之间的箭头表示两个动画之间的连接,将鼠标箭头放在动画状态单元上,右键点击“MakeTransition”创建动画过渡条件,并再次点击另一个动画状态单元上,完成动画过渡条件的连接
名称说明StateMachine动画状态机,可包含若干个动画状态单元State动画状态单元,动画状态机机制中的最小单元Sub-StateMachine子动画状态机,可包含若干个动画状态单元或子动画状态机BlendTree动画混合树,一种特殊的动画状态单元AnyState特殊的状态单元,表示任意动画状态Entry本动画状态机的入口Exit本动画状态机的出口358.4动画控制器8.4.2 动画控制器的配置 名称说明S8.4动画控制器8.4.2 动画控制器的配置2、过渡条件的参数设置创建过渡条件的参数的方法,在动画状态机窗口左侧中的Parameters视口,点击右上角的“+”号可选择想要添加的参数类型,如图8-39所示。然后可以为参数命名,并为其设置初始值,如图8-40所示。
图8-39新建参数 图8-40参数设置368.4动画控制器8.4.2 动画控制器的配置 图8-8.4动画控制器8.4.2 动画控制器的配置单击想要添加参数的过渡条件,然后在Inspector视口中的Conditions列表中单击“+”号创建参数,选择所需的参数,如图8-41。然后为参数添加对比条件,不同类型的参数对比条件也不同,比如Float类型参数的对比条件有“Greater”和“Less”,如图8-42所示。
图8-41为过渡条件创建参数 图8-42为参数添加对比条件378.4动画控制器8.4.2 动画控制器的配置图8-48.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(1)首先创建一个工程项目,并命名为“BNUAnimator”。然后将随书光盘的资源目录下第8章的“BNUAnimator”工程文件下的“Animations”、“Models”、“Textures”等文件夹依次拷备进项目中的“Assets”资源文件夹下。然后创建一个名为“AniControllers”的空文件夹,用于存放项目所需的动画控制器文件。(2)在AniControllers文件夹下单击鼠标右键“Create”→“AnimatorController”创建一个动画控制器,并命名为“AnimatorController”。双击该动画控制器,进入动画控制器编辑窗口。(3)向编辑窗口拖拽进“Boy@ForwardKick”、“Boy@KickBack”和“Boy@Idle”三个动画文件
388.4动画控制器8.4.2 动画控制器的配置 388.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(4)将Idle动画状态单元设置为默认动画单元。右键点击Idle动画状态单元,在菜单中选择“SetasLayerDefultState”,如图8-43所示。修改完成后Idle动画状态单元会变为黄色,然后为各个动画状态单元添加过渡条件,如图8-44所示。
图8-43添加动画单元 8-44为动画单元添加过渡398.4动画控制器8.4.2 动画控制器的配置 图8-48.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(5)动画单元和过渡添加完毕后,下面向游戏控制器中添加实现过渡条件所需的参数。单击Parameters视口上的“+”号,添加一个Float类型的参数,并命名为“AniFlag”,设置其初始值为-1.0,如图8-45所示。
图8-45创建参数
408.4动画控制器8.4.2 动画控制器的配置 图8-8.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(6)然后选中任意一个过渡条件,在Inspector视口中的Conditions列表中点击“+”号创建参数并进行参数的设置(7)在Assets面板下新建一个场景,双击打开场景。在场景中创建一个地形,给地形添加绿色草地纹理,然后为其添加天空盒,并调整光照方向至合适角度,如图8-46所示。
418.4动画控制器8.4.2 动画控制器的配置 418.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(8)向场景中添加人物模型,将Models文件夹下的fighter模型文件拖拽到场景中,然后为其添加贴图,如图8-47所示。
图8-47添加人物模型
428.4动画控制器8.4.2 动画控制器的配置 图88.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(9)接下来需要创建UI界面,点击“GameObject”→“UI”→“Button”创建两个按钮,并分别命名为“Button1”和“Button2”按钮。这两个按钮分别用于对两个动画的控制,当按下任意一个按钮时,系统将启动对应的动画过渡。(10)下面为人物模型添加动画组件。选中“fighter”游戏对象,将之前创建的“AnimatorController”动画控制器拖拽到Animator组件下的“Controller”框中,如图8-48所示。
代码见课本
438.4动画控制器8.4.2 动画控制器的配置 438.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(10)代码编写完成后将其挂载到fighter游戏对象上,然后点击Button1和Button2两个按钮对象,将fighter对象拖拽到Inspector面板下方的OnClick方法的目标对象上,然后选择相应的方法,如图8-49所示。
图8-49挂载脚本和方法448.4动画控制器8.4.2 动画控制器的配置 图8-498.4动画控制器8.4.2 动画控制器的配置3、通过代码对动画控制器进行操控(11)点击运行按钮之后,案例的运行效果会显示在Game窗口中,点击屏幕上的两个按钮,可以使场景中的小男孩做出不同的动作,如图8-50和8-51所示。
图8-50案例运行效果一 图8-51案例运行效果二458.4动画控制器8.4.2 动画控制器的配置 图8.5角色动画的重定向Unity3D提供了一套用于人形角色动画的重定向机制。游戏美工开发人员可以独立地制作好所有角色模型,游戏动画开发人员也可独立地进行动画的制作,两者不互干涉,
8.5.1 重定向的原理Mecanim动画系统提供了一套简化过的人形角色骨骼架构。简单来说,Avatar文件就是模型骨骼架构与系统自带骨骼架构间的桥梁,重定向的模型骨骼架构都要通过Avatar与自带骨骼架构搭建映射。映射后的模型骨骼可能通过Avatar驱动系统自带骨骼运动,这样就会产生一套通用的骨骼动画,其他角色模型只需借助这套通用的骨骼动画,就可以做出与原模型相同的动作,即实现角色动画的重定向。
468.5角色动画的重定向Unity3D提供了一套用于人形角8.5角色动画的重定向8.5.2 重定向的应用(1)首先创建一个工程项目,并命名为“BNUAiControl”,然后将随书光盘的资源目录下第8章的“BNUAnimator”工程文件下的“Animations”、“Models”、“Textures”等文件夹依次拷备进项目中的“Assets”资源文件夹下。然后创建一个名为“AniControllers”的空文件夹,用于存放项目所需的动画控制器文件。(2)在AniControllers文件夹下单击鼠标右键“Create”→“AnimatorController”创建一个动画控制器,并命名为“AnimatorController”。双击该动画控制器,然后将“Boy@JumpTurnKick”和“Boy@RaceSideKick”两个动画文件拖拽进窗口,创建两个动画状态单元,如图8-52所示。
图8-52创建动画控制器
478.5角色动画的重定向8.5.2 重定向的应用 图8.5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生外出旅游安全协议书5篇
- 新解读《GB-T 32622-2016社会保险征缴稽核业务规范》
- 2025防盗门工程承包合同2篇
- 高级房屋售卖合同范本
- 赠予车位合同范本
- 河南高层工程施工方案
- 简易办公租房合同范本
- 石材购销合同范本
- 的消防合同范本
- 承建喷泉工程合同范本
- YD-T 2664-2024 公用电信设施保护安全等级要求
- DL-T5002-2021地区电网调度自动化设计规程
- 2024年个人信用报告(个人简版)样本(带水印-可编辑)
- 个人替公司代付协议
- 20CS03-1一体化预制泵站选用与安装一
- 一例CAG循证护理查房
- 安全生产投入台账(模板)
- 委托书办理压力容器使用登记证
- 关于房产权属的案外人执行异议申请书
- 举升机检查表
- 高中创作性戏剧课程设计
评论
0/150
提交评论