Unity3.X 笔记01
2016-05-11 10:28
573 查看
碰撞检测的三种方法:
碰撞器检测
在门和玩家分别设置碰撞器
使用角色控制器碰撞器 函数: OnControllerColliderHit()
这个碰撞检测函数包含角色控制器组件,它的唯一参数hit是一个ControllerColliderHit类型变量,通过使用hit包含的信息,来获知玩家和哪一个物体发生了碰撞。
步骤:
1.给门添加box_collider, 设置门的tag为 playerDoor
2.角色控制器上增加脚本,在脚本中添加变量
3.检测hit里的碰撞信息 和 门的开关状态, 执行方法OpenDoor()
4.定义OpenDoor方法: 更改门的状态,播放开门动画,播放开门声音
5.在update方法中设置门自动关闭
6.定义ShutDoor方法
*Audio Source组件的引用
4个函数:Play() Stop() Pause() PlayOneShot()
音频文件的类: AudioClip
音频文件的赋值:将音频文件拖动到公有变量DoorOpenSound上*
光线投射
将门的动画管理,声音管理脚本放在门上 DoorManager
将光线投射检测脚本放在角色上 PlayerCollisions
一旦角色检测到约定范围内的光线碰撞,通过SendMessage函数直接调用门脚本中的doorcheck函数
Physics.Raycast()函数
触发器
在门的父物体上添加碰撞器,设置成trigger(触发模式)检测玩家是否进入触发区域。TriggerZone脚本设置在door的父物体上。
碰撞器检测
在门和玩家分别设置碰撞器
使用角色控制器碰撞器 函数: OnControllerColliderHit()
这个碰撞检测函数包含角色控制器组件,它的唯一参数hit是一个ControllerColliderHit类型变量,通过使用hit包含的信息,来获知玩家和哪一个物体发生了碰撞。
步骤:
1.给门添加box_collider, 设置门的tag为 playerDoor
2.角色控制器上增加脚本,在脚本中添加变量
private bool doorIsOpen; private float doorTimer=0.0f; public float door openTime = 3.0f; public AudioClip doorOpenSound, doorShutSound;
3.检测hit里的碰撞信息 和 门的开关状态, 执行方法OpenDoor()
void OnControllerColliderHit(ControllerColliderHit hit) { if(hit.gameObject.tag == "playerDoor" && doorIsOpen == false) { currentDoor = hit.gameObject; OpenDoor(currentDoor); } }
4.定义OpenDoor方法: 更改门的状态,播放开门动画,播放开门声音
void OpenDoor(GameObject door) { doorIsOpen = true; door.GetComponent<AudioSource>().PlayOneShot(doorOpenSound); door.transform.parent.GetComponent<Animation>().Play("doorOpen"); }
5.在update方法中设置门自动关闭
void Update() { if(doorIsOpen) { doorTimer += Time.deltaTime; if(doorTimer > doorOpenTime) { ShutDoor(currentDoor); } } }
6.定义ShutDoor方法
void ShutDoor(GameObject door) { doorIsOpen = false; door.GetComponent<AudioSource>().PlayOneShot(doorShutSound); door.transform.parent.GetComponent<Animation>().Play("doorShut"); }
*Audio Source组件的引用
4个函数:Play() Stop() Pause() PlayOneShot()
音频文件的类: AudioClip
AudioClip doorOpenSound; door.GetComponent<AudioSource>().PlayOneShot(doorOpenSound);
音频文件的赋值:将音频文件拖动到公有变量DoorOpenSound上*
光线投射
将门的动画管理,声音管理脚本放在门上 DoorManager
将光线投射检测脚本放在角色上 PlayerCollisions
一旦角色检测到约定范围内的光线碰撞,通过SendMessage函数直接调用门脚本中的doorcheck函数
Physics.Raycast()函数
void Update() { RaycastHit hit; if(Physics.Raycast(transform.postion, transform.forward, out hit, 3)) { if(hit.collider.gameObject.tag == "playerDoor") { currentDoor = hit.collider.gameObject; currentDoor.SendMessage("DoorCheck"); } } }
触发器
在门的父物体上添加碰撞器,设置成trigger(触发模式)检测玩家是否进入触发区域。TriggerZone脚本设置在door的父物体上。
void OnTriggerEnter(Collider col) { if(col.gameObject.tag== "Player") { transform.FindChild("door").SendMessage("DoorCheck"); } }
相关文章推荐
- 旋转角色
- Unity3d Realtime Dynamic Clouds Rendering
- Unity Shaders and Effects Cookbook (7-1) 在Surface Shader 中 访问 顶点颜色
- unity 的内存管理
- unity+Cardboard SDK VR开发Cardboard Unity SDK讲解
- unity+Cardboard SDK VR开发教程
- 一个unity 牛的博客网址
- Unity打包Android备忘
- <Unity-UGUI>使用Mask, 正确的裁减非默认材质UI对象
- Unity Shader学习1——简述
- Unity 关于unity中的update、Lateupdate和FixedUpdate。
- Unity Raycast 光线投射
- Unity3D射线检测控制转向
- WMware 10 Ubuntu 12.04 进入Unity模式
- Unity3D寻路导航NavMesh——自动寻路过吊桥
- Part2:Unity学习笔记十一 - Space Shooter
- Unity 不受光照影响shader 仿Unlit/Texture
- Unity3D 摄像机(Camera)属性详解
- 利用MVC、Unity将Service实现Restful
- Unity 内置Shader变量、辅助函数等