Unity3D入门(二):碰撞检測

摘要:
碰撞器原点1.默认情况下,系统会向每个GameObject添加一个碰撞器组件,一些背景对象可以取消该组件。2.在unity3d中,有两种方法可以检测碰撞的发生,一种是使用对撞机,另一种是利用触发器。这两种方法被广泛使用。为了充分理解这两种方法,我们必须理解以下概念:(1)对撞机是一组组件,其中包括许多种类,例如BoxCollider和Capsule

碰撞器由来

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。
Unity3D入门(二):碰撞检測第1张
2.主角碰到一些物体后会有一系列反应。举例,完雷电游戏时,飞机能够获取一些加速球能量球,碰到这些球体,飞机自身属性会有所提高
下图:蓝色球为“加速球”,红色球为能量球,的当飞机接触球体时,属性就会添加

Unity3D入门(二):碰撞检測第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入门(二):碰撞检測》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇开源项目CIIP(企业信息管理系统框架).2018.0904版更新介绍接口学习心得(Interface)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在SQLSERVER企业管理器中如何创建触发器

下面将分别介绍在MS SQLServer 中如何用SQL Server 管理工具Enterprise Manager 和Transaction_SQL 来创建触发器。在创建触发器以前必须考虑到以下几个方面: CREATE TRIGGER 语句必须是批处理的第一个语句; 表的所有者具有创建触发器的缺省权限,表的所有者不能把该权限传给其它用户; 触发器...

什么是BULK INSERT

BULK INSERT  在SQL Server中,BULK INSERT是用来将外部文件以一种特定的格式加载到数据库表的T-SQL命令。该命令使开发人员能够直接将数据加载到数据库表中,而不需要使用类似于Integration Services这样的外部程序。虽然BULK INSERT不允许包含任何复杂的逻辑或转换,但能够提供与格式化相关的选项,并告诉我...

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现

大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。 我实在不明确有的人为什么不喜欢武侠/仙侠类游戏,也许是因为武侠/仙侠类游戏身上被永远烙上的国产标签吧!博主近期在玩一部叫做《雨血》的游戏,博主不禁感慨:在这样一个流星蝴蝶不再闪烁、网游成风、国产双剑兴许创新不足的后国产时代,竟然还能够有这样一部再次...

mysql开发总结

一、理解MySQL基本概念   1、MySQL软件:MySQL实际上就是一软件,是一工具,是关系型数据库管理系统软件   2、MySQL数据库:就是按照数据结构来组织、存储和管理数据的仓库   3、MySQL数据库实例:     ①MySQL是单进程多线程(而oracle是多进程),也就是说MySQL实例在系统上表现就是一个服务进程,即进程;     ②M...

MYSQL触发器的使用

概念:触发器是一种特殊的储存过程,在满足定义条件操作时触发,并且自动执行触发器中预先设定好的定义的语句集合 触发器是特殊的储存过程 触发器是在对表操作时,满足条件就可以自动调用预先编译的sql语句 安全性可以基于数据库的值使用户具有操作数据库的某种权利 审计可以跟踪用户对数据库的操作 实现复杂的数据完整性规则 创建语法:四要素(操作对像触发时间触发事件触发...

unity3D 重新加载场景时重置时间从0开始

void Update() { //.ToString()以两位数显示累加的时间//此方法可在重新加载场景时,重新计算时间 LastTime.text = Time.timeSinceLevelLoad.ToString("00"); }...