图1 虚拟校园开发流程图 1.2 开发过程中的关键技术 1.2.1 漫游功能的实现 漫游功能是实现数字化校园的关键, 交互是实现漫游的方式. 基本的人机交互方式,例如人物行走,需要采用鼠标点击前进、后退、左转、右转、跳跃等功能,在Unity3D中可以以WSAD实现,代码在FPScontral.js脚本文件中,其关键代码如下: var Speed=5; var RotateSpeed=20; function Update () { if(Input.GetKey(KeyCode.W)){transform.Translate( Vector3.forward* Time.deltaTime * Speed); if(Input.GetKey(KeyCode.S)){transform.Translate( Vector3.forward* Time.deltaTime * -Speed); if(Input.GetKey(KeyCode.A)){transform.Translate( Vector3.up* Time.deltaTime * RotateSpeed); if(Input.GetKey(KeyCode.D)){transform.Translate( Vector3.up* Time.deltaTime * - RotateSpeed);} } 另一种重要的交互功能是GUI界面设计,在虚拟校园中,需要场景的跳转,如图2所示,根据选择进入场景,实现相应的漫游模式。核心代码如下: function OnGUI(){ GUI.Label(Rect(280,150,400,200),str); if(GUI.Button(Rect(250,320,100,25),"进入校园")) { Application.LoadLevel("xishiyou02"); } if(GUI.Button(Rect(600,320,100,25),"退出系统")){ Application.Quit(); } } 图2 场景切换界面 1.2.2 碰撞检测设计 碰撞检测[11-12]是模拟现实环境中的人物及物体在遇到障碍物时发生的本能反应,例如,当角色遇到墙壁,如果没有设计碰撞检测,则角色会出现穿墙而 过的失真现象,在现实中,应该是当发现墙壁与角色存在一定距离时,则需要停止前进。在这种情况下,设计人员需要添加碰撞检测函数。碰撞检测实现及性能是整 个数字校园漫游的性能指标之一。Unity3d开发平台默认给每个对象(GameObject)添加一个碰撞组件 (ColliderComponent),一些背景对象则可以取消该组件。在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则 是利用触发器。这两种方法应用都非常广泛。 在Unity3d中,主要有以下接口函数来处理这两种碰撞检测: 触发信息检测: 1)MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器 2)MonoBehaviour.OnTriggerExit( Collider other )当退出触发器 3)MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器 |