你的位置:首页 > Java教程

[Java教程]Unity3D 5.x 交互功能


1,给第一人称控制器添加脚本:playercollisions.js 脚本中只定义变量,先不添加方法:

#pragma strictvar door_open_time:float=3.0;var door_open_sound:AudioClip;var door_shut_sound:AudioClip;private var doorisopen:boolean=false;private var doortimer:float=0.0;private var currentdoor:GameObject; 

View Code

2,给playercollisions.js中的变量指定对象:

  

3,然后添加碰撞触发执行的方法:

function OnControllerColliderHit(hit:ControllerColliderHit){   if (hit.gameObject.tag=="playerDoor" && doorisopen==false) {     opendoor(hit.gameObject);   }}   function opendoor(door:GameObject){     doorisopen=true;     door.GetComponent(AudioSource).PlayOneShot(door_open_sound);    door.transform.parent.GetComponent(Animation).Play();  }

View Code

4,确定碰撞对象已经添加Collider碰撞组件,规则物体(Cube)添加Box Collider,不规则物体添加Mesh Collider:

   

5,处理碰撞的时候,可以借助 print((hit.gameObject); 查看当前碰撞的对象是什么

  是 Door 还是 OutPost:

  

6,判断 hit.gameObject.tag=="playerDoor" 的时候,要保证大小写一致

  

7,播放开门动画的时候,注意教程中outPost和自己项目中outPost的Animations的区别:

  教程中的动画进行了分割,而自己项目中的动画没有,所以我们只播放一次:

 door.transform.parent.GetComponent(Animation).Play();

  ------

8,5.x版本中的播放方法:

door.GetComponent(AudioSource).PlayOneShot(door_open_sound);

9,碰撞开门,播放声音的JS代码,添加到第一人称后,即可实现碰撞开门、播放开门声音:

#pragma strictvar door_open_time:float=3.0;var door_open_sound:AudioClip;var door_shut_sound:AudioClip;private var doorisopen:boolean=false;private var doortimer:float=0.0;private var currentdoor:GameObject; function OnControllerColliderHit(hit:ControllerColliderHit){   print(hit.gameObject);  if (hit.gameObject.tag=="playerDoor" && doorisopen==false) {     opendoor(hit.gameObject);   }}   function opendoor(door:GameObject){     doorisopen=true;     door.GetComponent(AudioSource).PlayOneShot(door_open_sound);    door.transform.parent.GetComponent(Animation).Play();  }

View Code