Unity Collision教程 之 碰撞接触点的快速获取

 时间:2026-02-14 17:33:41

1、MonoBehaviour.OnCollisionEnter(Collision):

1)功能简述

otherThe Collision data associated with this collision.

OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.

In contrast to OnTriggerEnter, OnCollisionEnter is passed the Collision class and not a Collider. The Collision class contains information about contact points, impact velocity etc. If you don't use collisionInfo in the function, leave out the collisionInfo parameter as this avoids unneccessary calculations. Notes: Collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached. Collision events will be sent to disabled MonoBehaviours, to allow enabling Behaviours in response to collisions.

2)使用举例

 using UnityEngine;

 using System.Collections;public class ExampleClass : MonoBehaviour{

    AudioSource audioSource;    void Start()    {

        audioSource = GetComponent<AudioSource>();

    }    void OnCollisionEnter(Collision collision)    {

        foreach (ContactPoint contact in collision.contacts)        {

            Debug.DrawRay(contact.point, contact.normal, Color.white);

        }        if (collision.relativeVelocity.magnitude > 2)

            audioSource.Play();

    }

 }

2、Collision.contacts:

1)功能简述

public ContactPoint[] contacts;

The contact points generated by the physics engine.

Every contact contains a contact point, normal and the two colliders that collided (see ContactPoint). From inside OnCollisionStay or OnCollisionEnter you can always be sure that contacts has at least one element.

2)使用举例

 using UnityEngine;

 using System.Collections;public class ExampleClass : MonoBehaviour {

    void OnCollisionStay(Collision collision) {

        foreach (ContactPoint contact in collision.contacts) {

            print(contact.thisCollider.name + " hit " + contact.otherCollider.name);

            Debug.DrawRay(contact.point, contact.normal, Color.white);

        }

    }

 }

1、打开Unity,新建一个空工程,具体如下图

Unity Collision教程 之 碰撞接触点的快速获取

2、在场景中,新建一个“Plane”、“Cube”和“Sphere”,调整好他们间的布局,具体如下图

Unity Collision教程 之 碰撞接触点的快速获取

3、在场景中,新建一个粒子系统,调整好参数,并把它作为预制体,具体如下图

Unity Collision教程 之 碰撞接触点的快速获取

4、在工程中,新建一个脚本“CollisionTest”,双击脚本或者右键“Open C# Project”打开脚本,具体如下图

Unity Collision教程 之 碰撞接触点的快速获取

5、“CollisionTest”脚本上编写代码,首先设置变量,然后实现碰撞进入后在接触点生成物体,具体代码和代码说明如下图

Unity Collision教程 之 碰撞接触点的快速获取

6、“CollisionTest”脚本具体内容如下

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class CollisionTest : MonoBehaviour {

    public GameObject go;

    // Use this for initialization

    void Start () {

            }

        // Update is called once per frame

    void Update () {

            }

    void OnCollisionEnter(Collision collision)

    {

        Debug.Log ("Enter");

        Instantiate (go, collision.contacts[0].point, go.transform.rotation);

    }

}

7、脚本编辑正确,回到Unity界面,把脚本“CollisionTest”赋给“Cube”,并把粒子预制体赋给脚本,在“Sphere”添加“Rigidbody”组件,具体如下图

Unity Collision教程 之 碰撞接触点的快速获取

Unity Collision教程 之 碰撞接触点的快速获取

8、运行场景,移动“Sphere”接触“Cube”,既可以看到接触点生成粒子,具体如下图

Unity Collision教程 之 碰撞接触点的快速获取

  • Unity3d中物体怎么向前方发射一条射线
  • 乱世三国志怎么获得武将
  • 登泰山看日出的一些经验
  • SQL查询:[4]分组查询
  • 怎样做茄子菜
  • 热门搜索
    清明手抄报图片大全 五一手抄报大全 金秋十月手抄报 关于科普知识的手抄报 民族团结手抄报花边 爱护眼睛手抄报 我爱红领巾手抄报 缅怀先烈手抄报资料 数学手抄报四年级下册 喜迎国庆手抄报图片