Unity3D入门(二):碰撞检测
来源:互联网 发布:win10wlan未识别的网络 编辑:程序博客网 时间:2024/06/04 18:42
碰撞器由来
1.系统默认会给每个对象(GameObject)添加一个碰撞组件(ColliderComponent),一些背景对象则可以取消该组件。
2.在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我们必须理解以下概念:
(一)碰撞器是一群组件,它包含了很多种类,比如:Box Collider,Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
(二)所谓触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
(三)在Unity3d中,主要有以下接口函数来处理这两种碰撞检测:
触发信息检测:
1.MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器
2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器
3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器
碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay( Collision collisionInfo ) 当逗留碰撞器
碰撞使用场景
1.给主角添加刚体(Rigidbody)组件,并且取消刚体组件的重力选项UseGravity。
2.主角碰到一些物体后会有一系列反应。举例,完雷电游戏时,飞机可以获取一些加速球、能量球,碰到这些球体,飞机自身属性会有所提高
下图:蓝色球为“加速球”,红色球为能量球,的当飞机接触球体时,属性就会增加
主角的脚本代码如下:
using UnityEngine;using System.Collections;public class Hero : MonoBehaviour { private float move_v = 0;//纵向移动距离 private float move_h = 0;//横向移动距离 public float m_speed = 1.5f;//移动速度 public float m_power = 1.0f;//飞机的威力能量 private Transform m_transform;void Start () { m_transform = this.transform;}void Update () { Move();} //飞机与物体发生碰撞,需要判断碰撞体是什么类型 void OnTriggerEnter(Collider e) { if (e.gameObject.tag.CompareTo("tagSpeedBall")==0) { Debug.Log("捡到加速球"); m_speed += 5;//速度+2 Destroy(e.gameObject);//销毁加速球 } if (e.gameObject.tag.CompareTo("tagPowerBall") == 0) { Debug.Log("捡到能量球"); m_power += 2;//威力+2 Destroy(e.gameObject);//销毁能量球 } } //移动方法 void Move() { //向上 if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) { //移动距离 m_transform.Translate(-Vector3.forward * Time.deltaTime * m_speed); } //向下 if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) { m_transform.Translate(Vector3.forward * Time.deltaTime * m_speed); } //向左 if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) { m_transform.Translate(Vector3.right * Time.deltaTime * m_speed); } //向右 if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) { m_transform.Translate(Vector3.left * Time.deltaTime * m_speed); } }}
- Unity3D入门(二):碰撞检测
- Unity3D入门(二):碰撞检测
- Unity3D入门 第壹章 :简单的碰撞检测
- Unity3D入门 简单的碰撞检测
- unity3d碰撞检测
- unitY3D---(2)碰撞检测
- unity3d 碰撞检测
- Unity3d中的碰撞检测
- Unity3d 碰撞检测
- 【Unity3D】碰撞检测方案
- Unity3D碰撞检测
- unity3D 射线碰撞检测
- 【Unity3d】碰撞检测
- unity3d碰撞检测之立方体碰撞算法
- unity3d 简单碰撞检测代码
- Unity3D里的碰撞检测
- Unity3D学习笔记 碰撞检测
- Unity3D检测(碰撞、射线)
- 【Android】控件和基本事件响应的三种方式
- 网站架构
- POJ 1860
- [LeetCode] Gas Station
- 如何防止程序多次运行
- Unity3D入门(二):碰撞检测
- JavaBean构件.
- JavaSwing图形界面编程(一)
- 【leetcode】Word Search
- poj 2960,hdu 1536 S-NIM 博弈
- POJ 2263
- LayoutInflater作用及使用
- LayoutInflater的inflate函数用法详解
- win32API 开发的音乐播放器