Unity3D 5.x 交互功能 - 碰撞检测函数
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 交互功能 - 碰撞检测函数的更多相关文章
- Unity3D 5.x 交互功能 - 光线投射、碰撞设置
1,光线投射碰撞:第一人称视线在预置范围内(如3米)和看到的物体发生碰撞 ① 检测光线投射碰撞的脚本添加在第一人称FPSController上 #pragma strict private var c ...
- Unity3D事件顺序与功能
Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. Awake 当 ...
- Unity3d与iOS交互开发——接入平台SDK必备技能
原地址:http://www.2cto.com/kf/201401/273337.html# 前言废话:开发手机游戏都知道,你要接入各种平台的SDK.那就需要Unity3d与iOS中Objective ...
- Windows 10 IoT Serials 5 - 如何为树莓派应用程序添加语音识别与交互功能
都说语音是人机交互的重要手段,虽然个人觉得在大庭广众之下,对着手机发号施令会显得有些尴尬.但是在资源受限的物联网应用场景下(无法外接鼠标键盘显示器),如果能够通过语音来控制设备,与设备进行交互,那还是 ...
- PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功能
在之前的学习过程中我们接触过前后台数据请求交互的方法有表单提交.AJAX请求以及Angularjs中的$http,今天我们尝试在PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功 ...
- 为HTML表格添加交互功能------DataTables
DataTables是一个功能强大的Javascript库,用于为HTML表格添加交互功能,虽然简单性是整个项目的核心设计原则,但入门看起来相当艰巨.但是,采取这些第一步并在您的网站上运行DataTa ...
- js用button激活 Alert 元素关闭按钮的交互功能
js用button激活 Alert 元素关闭按钮的交互功能 一.总结 1.点(.)对应class,井号(#)对应id 2.jquery:amaze里面用的jquery,jquery熟悉之后,这些东西 ...
- C# 编写 Windows 动态桌面软件实现(一)之桌面交互功能
DreamScene2 1.3 版本已经发布了,现在支持鼠标和桌面交互功能.这个功能不会影响性能,基本不占用 CPU.这个功能让我对 Windows 消息机制有了更深入的理解,在这篇博客中我会详细介绍 ...
- iOS开发之功能模块--高仿Boss直聘的IM界面交互功能
本人公司项目属于社交类,高仿Boss直聘早期的版本,现在Boss直聘界面风格,交互风格都不如Boss直聘以前版本的好看. 本人通过iPhone模拟器和本人真机对聊,将完成的交互功能通过Mac截屏模拟器 ...
随机推荐
- 探索C#之虚拟桶分片
阅读目录 背景 虚拟桶(virtual buckets) 实现 总结 背景 关于数据分片讨论最多的是一致性hash,然而它并不是分布式设计中的银弹百试百灵. 在数据稳定性要求比较高的场景下它的缺点是不 ...
- [.net 面向对象程序设计进阶] (28) 结束语——告别2015
[.net 面向对象程序设计进阶] (28) 结束语——告别2015 <.net面向对象程序设计进阶>这一系列文章写了太长的时间了,大概有半年没写,在年底又一口气写了好几篇.在整个过程中目 ...
- Unit Testing with NSubstitute
These are the contents of my training session about unit testing, and also have some introductions a ...
- 共享文件夹:The user has not been granted the requested logon type at this computer
场景重现 今天做一个项目测试,要用到虚拟机,于是在虚拟机(XP 32)上新建了一个共享的文件夹.然后我在Win7 机器上访问它得到如下的error 消息:
- 现代程序设计 网页前端开发作业(to 邹欣老师)
在一些著名的网站的搜索框上,会有一种“自动完成”功能. 比如google.百度和淘宝: 现在,我们来考虑如何实现这个功能. 第一步:模仿任意一个网站,编写一个类似的网页效果原型. 在这一步,不要估计开 ...
- 【Paddy】如何将物理表分割成动态数据表与静态数据表
前言 一般来说,物理表的增.删.改.查都受到数据量的制约,进而影响了性能. 很多情况下,你所负责的业务关键表中,每日变动的数据库与不变动的数据量比较,相差非常大. 这里我们将变动的数据称为动态数据,不 ...
- C语言 · 最小公倍数
问题描述 编写一函数lcm,求两个正整数的最小公倍数. 样例输入 一个满足题目要求的输入范例.例:3 5 样例输出 与上面的样例输入对应的输出.例: 数据规模和约定 输入数据中每一个数的范围. 例:两 ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- [Linux] linux下安装配置 zookeeper/redis/solr/tomcat/IK分词器 详细实例.
今天 不知自己装的centos 出现了什么问题, 一直卡在 启动界面, 找了半天没找见原因(最后时刻还是发现原因, 只因自己手欠一怒之下将centos删除了, 而且选择的是在本地磁盘也删除. ..让我 ...
- Spring学习记录(十)---使用FactoryBean配置Bean
之前学了,配置bean可以用普通全类名配置.用工厂方法配置,FactoryBean又是什么呢 有时候配置bean要用到,IOC其他Bean,这时,用FactoryBean配置最合适. FactoryB ...