other | 该碰撞中涉及的其他 Collider2D。 |
当另一个对象进入附加到该对象的触发碰撞体时发送(仅限 2D 物理)。
在调用期间传入的 Collider2D 参数中报告有关其他碰撞体的进一步信息。
注意:触发器事件将发送到已禁用的 MonoBehaviour,以便允许启用 Behaviour,以响应碰撞。
另请参阅:Collider2D 类、OnTriggerExit2D、OnTriggerStay2D。
以下两个脚本示例创建了一个 OnTriggerEnter2D 演示。
Example1 生成一个 Unity 徽标精灵 GameObject1
。
该精灵与 Example2 精灵 GameObject2
碰撞。Example1 脚本创建 Rigidbody2D。
在该脚本上使用了运动模式。Example2 支持 OnCollisionEnter2D 方法。
当 GameObject2 与 GameObject1
发生碰撞时,
将调用该方法。GameObject2
的脚本代码控制与 GameObject1
碰撞花费的时间。
反复从左到右地对 GameObject2
进行动画处理。
当位于屏幕左侧时,GameObject2
向右移向 GameObject1
。发生碰撞后,GameObject2
回到左侧。
屏幕左侧是 GameObject2
的起点。
屏幕右侧是 GameObject1
的恒定位置。
Example2 脚本代码使 GameObject2
与 GameObject1
发生碰撞。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; } }