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

#pragma strict

var 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;

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();
}

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

   

  我们给Door添加Box Collider并增大Size Y ,方便碰撞操作:

  

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 strict

var 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();
}

10,加入关门方法,3秒后再次播放动画:

#pragma strict

var 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;
private var currentDoor:GameObject; function Start(){
} function Update(){
//如果门打开,开始计时 超过3秒后 再吃执行动画,并把开门时间重置为0
if(doorisopen==true){
doortimer+=Time.deltaTime;
print(doortimer);
if(doortimer>door_open_time){
doortimer=;
shutdoor(currentDoor);
}
}
} //检测碰撞
function OnControllerColliderHit(hit:ControllerColliderHit){
print(hit.gameObject);
if (hit.gameObject.tag=="playerDoor" && doorisopen==false) {
currentDoor=hit.gameObject;
opendoor(hit.gameObject);
}
} // //开门
function opendoor(door:GameObject){
doorisopen=true;
door.GetComponent(AudioSource).PlayOneShot(door_open_sound);
door.transform.parent.GetComponent(Animation).Play();
}
// 关门
function shutdoor(door:GameObject){
doorisopen=false;
door.GetComponent(AudioSource).PlayOneShot(door_shut_sound);
door.transform.parent.GetComponent(Animation).Play();
}

11,整合开门、关门方法:

#pragma strict

var 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;
private var currentDoor:GameObject; function Start(){
} function Update(){
//如果门打开,开始计时 超过3秒后 再吃执行动画,并把开门时间重置为0
if(doorisopen==true){
doortimer+=Time.deltaTime;
print(doortimer);
if(doortimer>door_open_time){
doortimer=;
//shutdoor(currentDoor);
door(currentDoor,false,door_shut_sound,"closedoor");
}
}
} //检测碰撞
function OnControllerColliderHit(hit:ControllerColliderHit){
print(hit.gameObject);
if (hit.gameObject.tag=="playerDoor" && doorisopen==false) {
currentDoor=hit.gameObject;
//opendoor(hit.gameObject);
door(currentDoor,true,door_open_sound,"opendoor");
}
} //对象,门的状态,播放的声音,播放的对象
function door(thisDoor:GameObject,doorOpenOrClose:boolean,audio_clip:AudioClip,ani_name:String){
doorisopen=doorOpenOrClose;
thisDoor.GetComponent(AudioSource).PlayOneShot(audio_clip);
thisDoor.transform.parent.GetComponent(Animation).Play(); //播放动画 区分开门和关门
}

  

Unity3D 5.x 交互功能 - 碰撞检测函数的更多相关文章

  1. Unity3D 5.x 交互功能 - 光线投射、碰撞设置

    1,光线投射碰撞:第一人称视线在预置范围内(如3米)和看到的物体发生碰撞 ① 检测光线投射碰撞的脚本添加在第一人称FPSController上 #pragma strict private var c ...

  2. Unity3D事件顺序与功能

    Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. Awake 当 ...

  3. Unity3d与iOS交互开发——接入平台SDK必备技能

    原地址:http://www.2cto.com/kf/201401/273337.html# 前言废话:开发手机游戏都知道,你要接入各种平台的SDK.那就需要Unity3d与iOS中Objective ...

  4. Windows 10 IoT Serials 5 - 如何为树莓派应用程序添加语音识别与交互功能

    都说语音是人机交互的重要手段,虽然个人觉得在大庭广众之下,对着手机发号施令会显得有些尴尬.但是在资源受限的物联网应用场景下(无法外接鼠标键盘显示器),如果能够通过语音来控制设备,与设备进行交互,那还是 ...

  5. PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功能

    在之前的学习过程中我们接触过前后台数据请求交互的方法有表单提交.AJAX请求以及Angularjs中的$http,今天我们尝试在PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功 ...

  6. 为HTML表格添加交互功能------DataTables

    DataTables是一个功能强大的Javascript库,用于为HTML表格添加交互功能,虽然简单性是整个项目的核心设计原则,但入门看起来相当艰巨.但是,采取这些第一步并在您的网站上运行DataTa ...

  7. js用button激活 Alert 元素关闭按钮的交互功能

    js用button激活 Alert 元素关闭按钮的交互功能 一.总结 1.点(.)对应class,井号(#)对应id  2.jquery:amaze里面用的jquery,jquery熟悉之后,这些东西 ...

  8. C# 编写 Windows 动态桌面软件实现(一)之桌面交互功能

    DreamScene2 1.3 版本已经发布了,现在支持鼠标和桌面交互功能.这个功能不会影响性能,基本不占用 CPU.这个功能让我对 Windows 消息机制有了更深入的理解,在这篇博客中我会详细介绍 ...

  9. iOS开发之功能模块--高仿Boss直聘的IM界面交互功能

    本人公司项目属于社交类,高仿Boss直聘早期的版本,现在Boss直聘界面风格,交互风格都不如Boss直聘以前版本的好看. 本人通过iPhone模拟器和本人真机对聊,将完成的交互功能通过Mac截屏模拟器 ...

随机推荐

  1. 【java并发编程实战】-----线程基本概念

    学习Java并发已经有一个多月了,感觉有些东西学习一会儿了就会忘记,做了一些笔记但是不系统,对于Java并发这么大的"系统",需要自己好好总结.整理才能征服它.希望同仁们一起来学习 ...

  2. [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI

    前一篇分析了前十个基础实验的代码,从这里开始分析后十个~ 一.PPI原理: PPI(Programmable Peripheral Interconnect),中文翻译为可编程外设互连. 在nRF51 ...

  3. Appium的安装-MAC平台

    其实Appium的安装方式主要有两种: 1)自己安装配置nodejs的环境,然后通过npm进行appium的安装 2)直接下载官网提供的dmg进行安装,dmg里面已经有nodejs的环境和appium ...

  4. Sharing A Powerful Tool For Calculate Code Lines

    最近正好需要统计下某项目代码行数,然后就找代码行数统计工具.以前找到过一个正则表达式,但是只有在VS2010下有用,VS2012和VS2013下的统计就不好使了. 接着搜索了一下代码行数统计绿色工具免 ...

  5. vSphere Client 编辑虚拟机属性的问题

    编辑虚拟机属性的时候, 出现: vpxclient.vmconfig.cpuid 初始值设置异常之类的,重置了, 并将注册表中的所有vmvare 相关键值删除了, 还是一样的.. 后面参照https: ...

  6. Uiautomator 2.0之UiDevice新增API学习小记

    1. InstrumentationRegistry类 1.1. 类说明: 一个暴露的注册实例,持有instrumentation运行的进程和参数,还提供了一种简便的方法调用instrumentati ...

  7. Trace1:Default Trace

    sql server trace 是一个轻量级的追踪工具,对追踪数据库的行为很有用,因此,sql server内置一个trace(default trace). 1,sql server 内置Defa ...

  8. SSIS Parameter用法

    今天学习SSISParameter的用法,记录学习的过程. Parameters能够在Project Deployment Model下使用,不能在Package Deployment Model使用 ...

  9. 数据库的Disk Space usage

    SQL Server占用的存储空间,包含数据库file占用的存储空间,数据库对象占用的存储空间. 一,数据库file占用的存储空间 1,使用 sys.master_files 查看数据库中各个file ...

  10. SVM算法

    本文主要介绍支持向量机理论推导及其工程应用. 1 基本介绍 支持向量机算法是一个有效的分类算法,可用于分类.回归等任务,在传统的机器学习任务中,通过人工构造.选择特征,然后使用支持向量机作为训练器,可 ...