版本: Unity 6 (6000.0)
语言English
  • C#

MonoBehaviour.OnTriggerEnter2D(Collider2D)

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法采纳所有提交内容,但我们确实会阅读用户提出的每项修改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的修改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

参数

other 参与此碰撞的另一个 Collider2D。

描述

当另一个对象进入附加到此对象的触发碰撞体时发送(仅限 2D 物理)。

有关另一个碰撞体的更多信息在调用期间传递的 Collider2D 参数中报告。

此消息发送到触发 Collider2D 及其所属的 Rigidbody2D(如果有),以及接触触发的 Rigidbody2D(或如果没有 Rigidbody2D 则为 Collider2D)。

注意: 仅当其中一个碰撞体也附加了 Rigidbody2D 时才会发送触发事件。触发事件会发送到禁用的 MonoBehaviour,以允许响应碰撞启用行为。

其他资源:Collider2D 类、OnTriggerExit2DOnTriggerStay2D

以下两个脚本示例创建了一个 OnTriggerEnter2D 演示。示例 1 生成一个 Unity 徽标精灵,GameObject1。此精灵与示例 2 精灵 GameObject2 发生碰撞。示例 1 脚本创建 Rigidbody2D。此脚本使用运动学模式。示例 2 支持 OnCollisionEnter2D 方法。当 GameObject2 与 GameObject1 碰撞时,会调用此方法。GameObject2 的脚本代码控制其与 GameObject1 碰撞所需的时间。GameObject2 反复进行左右动画。当在屏幕左侧时,GameObject2 向右移动,朝向 GameObject1。当它们发生碰撞时,GameObject2 返回左侧。屏幕左侧是 GameObject2 的起点。屏幕右侧是 GameObject1 的固定位置。示例 2 脚本代码使 GameObject2GameObject1 碰撞。GameObject2 碰撞一小段时间。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Example1 : MonoBehaviour { private BoxCollider2D bc; private Rigidbody2D rb;

void Awake() { SpriteRenderer sprRend = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer; sprRend.color = new Color(0.9f, 0.9f, 0.9f, 1.0f);

bc = gameObject.AddComponent<BoxCollider2D>() as BoxCollider2D; bc.size = new Vector2(1.3f, 1.3f); bc.isTrigger = true;

rb = gameObject.AddComponent<Rigidbody2D>() as Rigidbody2D; rb.bodyType = RigidbodyType2D.Kinematic; }

void Start() { gameObject.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("logo"); gameObject.transform.Translate(4.0f, 0.0f, 0.0f); gameObject.transform.localScale = new Vector2(2.0f, 2.0f); } }

示例 2。这是前后移动并触发示例 1 的精灵。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Example2 : MonoBehaviour { private float spriteMove;

void Awake() { SpriteRenderer sprRend; sprRend = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer; sprRend.color = new Color(0.9f, 0.9f, 0.9f, 1.0f);

BoxCollider2D bc; bc = gameObject.AddComponent<BoxCollider2D>() as BoxCollider2D; bc.size = new Vector2(1.3f, 1.3f); bc.isTrigger = true; }

void Start() { gameObject.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("circle"); gameObject.transform.Translate(-4.0f, 0.0f, 0.0f); spriteMove = 0.1f; }

void FixedUpdate() { gameObject.transform.Translate(spriteMove, 0.0f, 0.0f);

if (gameObject.transform.position.x < -4.0f) { // move GameObject2 to the right spriteMove = 0.1f; } }

// when the GameObjects collider arrange for this GameObject to travel to the left of the screen void OnTriggerEnter2D(Collider2D col) { Debug.Log(col.gameObject.name + " : " + gameObject.name + " : " + Time.time); spriteMove = -0.1f; } }