logo资料库

unity3d的模型导入与脚本练习.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
附件 2: 实验题目 模型导入与脚本练习 一、【实验名称】 模型导入与脚本练习 二、【实验目的】 掌握使用三维建模软件进行三维模型的优化与导出,及在 Unity3D 中模型导 入方法与设置;掌握 Javascript 脚本在 Unity3D 中的基本应用。 三、【实验原理】 三维模型的优化方法和技巧,模型的导出与导入,Javascript 脚本的基本语 法及使用技巧。 四、【具体操作内容及要求】 1.创建工程机工程文件,在 Unity3D 中导入资源及模型,如下图所示: 2. 熟悉 Javascript 脚本语法,并实现对场景中对象的交互控制,具体要求: (1)实现第一人称控制,手榴弹的投掷效果。 点击 GameObject->CreateEmpty,创建空对象,命名为 GameObject2,定义 该对象的位置为第一人称的手臂位置,在 script 文件夹中创建 javascript 文件, 命名为 grenadescript,并在该文件中添加如下代码:
var grenadePerfab:GameObject;//手榴弹 var grenadespeed=50; private var nextFire = 0.0; //手榴弹销毁 var lifttime = 2; var creationTime = Time.time; unction Update () { if(Input.GetButtonDown("Fire2")||Input.GetKeyDown(KeyCode.C)) { var cloneGrenade :GameObject= Instantiate(grenadePerfab,this.transform.position,transform.rotation); var focre:Vector3 = pos.transform.position-cloneGrenade.transform.position; cloneGrenade.rigidbody.AddForceAtPosition(focre,pos.transform.position,F orceMode.Impulse);//设置目标力 } var grenade:GameObject = GameObject.FindWithTag("grenade"); if(grenade && (Time.time >(creationTime+lifttime))) { lifttime=Time.time+1; Destroy(grenade); } } 把代码拖拽给第一人称,把 GameObject2 拖拽进第一人称里,并把 prefab 文件夹中的 grenade1 模型拖拽给变量 Grenade Perfab 和为手榴弹模型添加 “grenade”标签,把 GrameObject2 拖拽给变量 Pos,如下图所示:
(2)在地形中添加墙和门的元素,布置完整的行走场景,效果如下图所 示: (3)实现门的动画及脚本控制 Ctrl+6 打开动画的编辑面板,把动画保存在 animation 文件夹中,然后右键 门的 x 坐标,点击 Addkey,设置门的开始与结束的位置(如下图),在 door1 的 Inspector 面板把 playAutomatically 选项的勾去掉,并给门添加 door1 的标签, 然后在 grenadescript.java 文件中添加如下代码:
function OnControllerColliderHit(hit:ControllerColliderHit) { if(hit.gameObject.name == "door1")//门的碰撞检测 { hit.gameObject.animation.Play("opendoor1"); } } (4)碰撞盒的添加及碰撞检测的应用。 给 box 盒子添加 box 标签,并在 OnControllerColliderHit 函数中添加如下 代码: if(hit.gameObject.tag == "grenadebox")//盒子的碰撞检测 { } Destroy(hit.gameObject); (5)Trigger 触发器的应用 创建一个 cube,命名为 forwardbox,并给该模型添加 forwardbox 标签,调整 位置(如下图),在 inspector 面板把 BoxCollider 里的 Is Trigger 选项的勾勾上, 把 MeshRenderer 的勾去掉,在 grenadescript,java 文件中添加如下函数:
function OnTriggerEnter (other : Collider) { if(other.gameObject.name == "forwardbox") { var animObj:GameObject = GameObject.FindWithTag("door1"); animObj.gameObject.animation.Play("opendoor1"); } }
分享到:
收藏