facebook twitter hatena line email

Unity/UniRx/接触判定/接触2D

提供: 初心者エンジニアの簡易メモ
2023年3月6日 (月) 19:39時点におけるAdmin (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

2dの画像UIの接触判定

  1. Canvas/Imageを2つ追加
  2. 両方にBoxColliderを追加
  3. 上側のImageにだけ重力としてRigitbody2Dを追加。
  4. ImageのInspectorのBoxColliderのxとyが1になってるので、Imageサイズと同じ(デフォルト:100)にする

これで、上側のImageがおりてきて、下のImageと接触して止まるはず。

  1. Imageの下側のObjectのInspectorからAddComponentで、"ObservableCollision2DTrigger"を追加
  2. 適当なObjectにCollider2dSceneを追加し、Imageの下側のObjectを、landTriggerに設定する
using UnityEngine;
using UniRx;
using UniRx.Triggers;
using System;

public class Collider2dScene : MonoBehaviour
{
    [SerializeField]
    ObservableCollision2DTrigger landTrigger;
    void Start()
    {
        IObservable<Collision2D> landOnCollisionEnterAsObservable = landTrigger.OnCollisionEnter2DAsObservable();
        IObservable<Collision2D> landOnCollisionStayAsObservable = landTrigger.OnCollisionStay2DAsObservable();
        IObservable<Collision2D> landOnCollisionExitAsObservable = landTrigger.OnCollisionExit2DAsObservable();

        landOnCollisionEnterAsObservable.Subscribe(collider =>
        {
            Debug.Log("OnCollisionEnter2D collider.gameObject.name=" + collider.gameObject.name); // 接触object名
        });
        landOnCollisionStayAsObservable.Subscribe(collider =>
        {
            Debug.Log("OnCollisionStay2D collider.gameObject.name=" + collider.gameObject.name); // 接触object名
        });
        landOnCollisionExitAsObservable.Subscribe(collider =>
        {
            Debug.Log("OnCollisionExit2D collider.gameObject.name=" + collider.gameObject.name); // 接触object名
        });
    }
}

UniRxを使わない場合

Unity/UIImage/Collider2d [ショートカット]