Unity3D 5.x 交互功能 - 光线投射、碰撞设置
1,光线投射碰撞:第一人称视线在预置范围内(如3米)和看到的物体发生碰撞
① 检测光线投射碰撞的脚本添加在第一人称FPSController上
#pragma strict
private var currentdoor:GameObject;
var hit:RaycastHit;
function Update(){ var fwd = transform.TransformDirection (Vector3.forward);
//当光线投射与任何碰撞器交叉时为真,否则为假
if(Physics.Raycast(transform.position,fwd,hit,18)){
//光线的碰撞物体
currentdoor=hit.collider.gameObject;
print(currentdoor);
if(currentdoor.tag=="playerDoor"){
print("collider");
currentdoor.SendMessage("doorcheck");
}
}
}
②控制Door开启的脚本添加在Door上,第一人称视线和门碰撞的时候通过SendMessage触发碰撞对象(Door)的开门方法:
#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; function Update(){
//如果门打开,开始计时 超过3秒后 再吃执行动画,并把开门时间重置为0
if(doorisopen==true){
doortimer+=Time.deltaTime;
print(doortimer);
if(doortimer>door_open_time){
doortimer=0;
//shutdoor(currentDoor);
door(false,door_shut_sound,"closedoor");
}
}
} function doorcheck(){
if(!doorisopen){
door(true,door_open_sound,"opendoor");
}
}
//执行的对象,门的状态,播放的声音,播放的对象
function door(doorOpenOrClose:boolean,audio_clip:AudioClip,ani_name:String){ doorisopen=doorOpenOrClose;
//thisDoor.GetComponent(AudioSource).PlayOneShot(audio_clip);
this.transform.parent.GetComponent(Animation).Play(); //播放动画 区分开门和关门
}
Tis: 如果光线投射没有发生碰撞,可以调节FPSController的高度或者跳起来试试。
2,transform,代表附加当前脚本的对象
3,给门添加 Box Collider 组件实现前进/后退到门附件的时候触发碰撞,第一人称进入门的Collider范围内即可发生碰撞。
①门上Box Collider的Is Trigger勾选
②适当设置BoxCollider的范围大小
③实时碰撞检测脚本,添加到门上
#pragma strict
function OnTriggerEnter(col:Collider){
if(col.gameObject.tag=="Player"){
transform.SendMessage("doorcheck");
}
}
④当第一人称进入BoxCollider的碰撞范围之内的时候,就可以触发开门脚本:doorcheck
门上的之前的一个脚本实现了开门:
#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; function Update(){
//如果门打开,开始计时 超过3秒后 再次执行动画,并把开门时间重置为0
if(doorisopen==true){
doortimer+=Time.deltaTime;
print(doortimer);
if(doortimer>door_open_time){
doortimer=0;
//shutdoor(currentDoor);
door(false,door_shut_sound,"closedoor");
}
}
} function doorcheck(){
print("doorcheck");
if(!doorisopen){
door(true,door_open_sound,"opendoor");
}
}
//执行的对象,门的状态,播放的声音,播放的对象
function door(doorOpenOrClose:boolean,audio_clip:AudioClip,ani_name:String){ doorisopen=doorOpenOrClose;
//thisDoor.GetComponent(AudioSource).PlayOneShot(audio_clip);
this.transform.parent.GetComponent(Animation).Play(); //播放动画 区分开门和关门
}
4,三种不同碰撞方法的简单应用:
①OnControllerColliderHit ,附加在第一人称控制器上
#pragma strict
import UnityEngine.UI;
//碰撞脚本添加在第一人称,第一人称和对象发射碰撞的时候触发
function OnControllerColliderHit(hit:ControllerColliderHit){
if(hit.gameObject.tag!="Plane"){
print(hit.gameObject.tag);
gameObject.Find("Canvas/Text").GetComponent(Text).text =hit.gameObject.tag;
}
}
②Physics.Raycast ,光线投射碰撞 脚本附加在第一人称控制器上 。当第一人称视线和物体碰撞的时候触发(游戏中瞄准动作):
#pragma strict
import UnityEngine.UI; private var objCollider:GameObject;
var hit:RaycastHit;
function Update(){ var fwd = transform.TransformDirection (Vector3.forward);
//当光线投射与任何碰撞器交叉时为真,否则为假
if(Physics.Raycast(transform.position,fwd,hit,)){
//光线的碰撞物体
objCollider=hit.collider.gameObject;
print(objCollider);
if(objCollider.tag!="Plane"){
gameObject.Find("Canvas/Text").GetComponent(Text).text =objCollider.tag;
}
}
}
③OnTriggerEnter , 加大Box Collider 的大小勾选Is Trigger,给物体添加脚本,实现进入物体碰撞范围即发生触发碰撞脚本(游戏中靠近门,开门效果):
#pragma strict
import UnityEngine.UI; //脚本附加到物体上,进入物体的碰撞范围之内就触发
function OnTriggerEnter(hit:Collider){
gameObject.Find("Canvas/Text").GetComponent(Text).text =hit.gameObject.tag;
}
Unity3D 5.x 交互功能 - 光线投射、碰撞设置的更多相关文章
- Unity3D 5.x 交互功能 - 碰撞检测函数
1,给第一人称控制器添加脚本:playercollisions.js 脚本中只定义变量,先不添加方法: #pragma strict var door_open_time:float=3.0; var ...
- Unity3D事件顺序与功能
Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. Awake 当 ...
- UNITY3D与iOS交互解决方案
原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 “授人以鱼,不如授人以渔”,以UNIT ...
- Windows 10 IoT Serials 5 - 如何为树莓派应用程序添加语音识别与交互功能
都说语音是人机交互的重要手段,虽然个人觉得在大庭广众之下,对着手机发号施令会显得有些尴尬.但是在资源受限的物联网应用场景下(无法外接鼠标键盘显示器),如果能够通过语音来控制设备,与设备进行交互,那还是 ...
- Photon Server与Unity3D客户端的交互
Photon Server与Unity3D的交互分为3篇博文实现 (1)Photon Server的服务器端配置 (2)Photon Server的Unity3D客户端配置 (3)Photon Ser ...
- C# 编写 Windows 动态桌面软件实现(一)之桌面交互功能
DreamScene2 1.3 版本已经发布了,现在支持鼠标和桌面交互功能.这个功能不会影响性能,基本不占用 CPU.这个功能让我对 Windows 消息机制有了更深入的理解,在这篇博客中我会详细介绍 ...
- Linux Shell 自动交互功能
需求背景: 近日,在安装某软件过程,发现在安装过程需要输入一些信息才能继续下一步操作,在机器数量较少情况下,我们可以单台登录上去完成安装操作,但当机器数量超过一定时,如果再手动登录操作,就会产生大 ...
- iOS开发之功能模块--高仿Boss直聘的IM界面交互功能
本人公司项目属于社交类,高仿Boss直聘早期的版本,现在Boss直聘界面风格,交互风格都不如Boss直聘以前版本的好看. 本人通过iPhone模拟器和本人真机对聊,将完成的交互功能通过Mac截屏模拟器 ...
- 打开phpmyadmin显示高级功能尚未完全设置部分功能未激活
问题:老师,打开phpmyadmin显示高级功能尚未完全设置部分功能未激活,应该如何解决? 这是前一阵子学生问过我的一个问题,今天我就在博客里解答你的疑问吧. 总共三步可以搞定 1.导入相关文件到数据 ...
随机推荐
- CI-持续集成(1)-软件工业“流水线”概述
CI-持续集成(1)-软件工业“流水线”概述 1 概述 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次, ...
- ASP.Net开发基础温故知新学习笔记
申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...
- Web Modify The Html Elements According Url Parameters With Jquery
需求说明 根据URL的参数, 来批量的对某些HTML元素做统一的修改. 解决思路 首先, 想办法获得这个URL的参数, 然后遍历对应的HTML元素, 做出对应的修改. 即可. 代码实现 <!DO ...
- Oracle 多行转多列,列值转为列名
前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要导出问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了 ...
- 在Eclipse中对包进行增删改查
package com.hanqi.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.R ...
- CATransition转场动画
背景: 最近在温习动画,分享个简单系统的转场动画 viewcontroller *VC=[self.storyboard instantiateViewControllerWithIdentifier ...
- FontAwesome 4.4.0 中完整的585个图标样式CSS参考
做一记录,免得每次都去网上搜图标对应的class. 在线版本:http://dnt.dkill.net/dnt/font/
- OpenCascade Eigenvalues and Eigenvectors of Square Matrix
OpenCascade Eigenvalues and Eigenvectors of Square Matrix eryar@163.com Abstract. OpenCascade use th ...
- 从零学java--传智播客
java的输入需要引用Scanner包 import java.util.Scanner; class ScannerDemo{ public static void main(String[] ar ...
- Torch学习笔记1--Torch简介
Torch是什么 Torch是一个由Lua语言开发的深度学习框架,目前支持Mac OS X 和Ubuntu 12及以上,官网 ,github地址. 具有如下特点: 交互式开发工具 可视化式的工具 第三 ...