MonoBehaviour.OnTriggerEnter2D(Collider2D)

切换到手册

参数

other该碰撞中涉及的其他 Collider2D。

描述

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

在调用期间传入的 Collider2D 参数中报告有关其他碰撞体的进一步信息。

注意:触发器事件将发送到已禁用的 MonoBehaviour,以便允许启用 Behaviour,以响应碰撞。

另请参阅:Collider2D 类、OnTriggerExit2DOnTriggerStay2D

以下两个脚本示例创建了一个 OnTriggerEnter2D 演示。 Example1 生成一个 Unity 徽标精灵 GameObject1。 该精灵与 Example2 精灵 GameObject2 碰撞。Example1 脚本创建 Rigidbody2D。 在该脚本上使用了运动模式。Example2 支持 OnCollisionEnter2D 方法。 当 GameObject2 与 GameObject1 发生碰撞时, 将调用该方法。GameObject2 的脚本代码控制与 GameObject1 碰撞花费的时间。 反复从左到右地对 GameObject2 进行动画处理。 当位于屏幕左侧时,GameObject2 向右移向 GameObject1。发生碰撞后,GameObject2 回到左侧。 屏幕左侧是 GameObject2 的起点。 屏幕右侧是 GameObject1 的恒定位置。 Example2 脚本代码使 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); } }

Example2 是前后移动并由 Example1 触发的精灵。

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; } }