您的位置:首页 > 移动开发 > Unity3D

Unity入门 物理系统

2016-11-28 21:02 363 查看
        一      
1、碰撞检测的条件   
     (1)、碰撞的双方都要有碰撞器组件(比如子弹和敌人都要有碰撞组件)。

    (2)、要撞其他游戏对象的游戏对象本身要有刚体组件(子弹必须有刚体组件,把子弹的使用重力去掉,敌人也要有刚体组件)。

     (3)、碰撞的脚本要挂载在运动的物体上(将脚本挂载子弹上)。

 

   2、碰撞检测的方法
       (1)、voidOnCollisionEnter(Collision col)

             参数:col—被碰撞的带有碰撞器的游戏对象

             含义:当碰撞进入时,执行该方法。

       (2)、void OnCollisionStay(Collision col)

               参数:col—被碰撞的带有碰撞器的游戏对象

             含义:当碰撞一直持续时,执行该方法。

        (3)、voidOnCollisionExit(Collision col)

             参数:col—被碰撞的带有碰撞器的游戏对象

             含义:当碰撞退出时,执行该方法。



     1、触发检测的条件
(1)、碰撞的双方都要有碰撞器组件(比如子弹和敌人都要有碰撞组件)。

  (2)、要撞其他游戏对象的游戏对象本身要有刚体组件(子弹必须有刚体组件,把子弹的使用重力去掉,敌人不一定有刚体组件)。

   (3)、碰撞的脚本要挂载在运动的物体上(将脚本挂载子弹上)。

   (4)、必须把运动物体身上的isTrigger属性勾上(将子弹的isTrigger勾上)。

2、触发检测的方法
       (1)、void OnTriggerEnter(Collidercol)

             参数:col—被触发的带有碰撞器的游戏对象

             含义:当触发进入时,执行该方法。

       (2)、void OnTriggerStay(Collider col)

               参数:col—被触发的带有碰撞器的游戏对象

             含义:当触发一直持续时,执行该方法。

        (3)、void OnTriggerExit(Collidercol)

             参数:col—被触发的带有碰撞器的游戏对象

             含义:当触发退出时,执行该方法。

三: 球形检测:

         吃道具,收集金币使用碰撞检测

吸铁石作用效果使用OverLerpSphere方法

using UnityEngine;

using System.Collections;

public class Test1 : MonoBehaviour {

    public bool magnetState = false;

    public float time;

    // Use this for initialization

    void Start () {

    

    }

    

    // Update is called once per frame

    void Update () {

        if(magnetState == true)

        {

            time += Time.deltaTime;

            Collider[] cols = Physics.OverlapSphere(this.transform.position, 5);

            for (int i = 0; i < cols.Length ; i ++)

            {

                Coins temp = cols[i].GetComponent<Coins>();

                if(temp != null)

                {

                    temp.startMoveToPlayer = true;

                }

            }

            if(time > 2f)

            {

                magnetState = false;

                time = 0;

            }

        }

    

    }

    void OnTriggerEnter(Collider col)

    {

        if(col.CompareTag("Magnet"))

        {

            Debug.Log("获得吸铁石道具");

            magnetState = true;

        }

    }

}

四:线性检测:

        线性检测的方法是:Physics.Raycast(ray,out hit) 

                                            Physics.Raycast(起始位置,射线方向,out hit)

           RaycastHit hit;// 获取从Raycast 函数中得到的信息反馈的结构

            //射线碰撞检测 hit为射线检测到的 带有碰撞器的物体

            if(Physics.Raycast(ray,out hit))

            {

                //point就是射线撞到的点的位置信息

                  vector3  pos= hit.point;  //      在世界空间中,射线碰到的碰到碰撞器的碰撞点

            }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: