facebook twitter hatena line email

「Unity/UIImage/Collider2d」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(2dイメージの接触判定)
(接触しない場合)
 
(同じ利用者による、間の16版が非表示)
行1: 行1:
==2dイメージの接触判定==
+
==2d画像UIの接触判定==
 
#Canvas/Imageを2つ追加
 
#Canvas/Imageを2つ追加
 
#両方にBoxColliderを追加
 
#両方にBoxColliderを追加
行30: 行30:
 
</pre>
 
</pre>
  
OnCollisionExit2Dは、接触したImageのy位置を強制的に動かして、接触から、引き離すと発生する。
+
OnCollisionExit2Dは、接触したImageのy位置を、手動で、強制的に変更して、接触から、引き離すと発生する。
  
==3dのとき参照==
+
参考:https://mogi0506.com/unity-2d-collition/
 +
 
 +
==2d画像UIの侵食判定==
 +
<pre>
 +
using UnityEngine;
 +
 
 +
public class ColliderTrigger2d : MonoBehaviour
 +
{
 +
    void OnTriggerEnter2D(Collider2D collider)
 +
    {
 +
        Debug.Log("enter name=" + collider.gameObject.name);
 +
    }
 +
    void OnTriggerStay2D(Collider2D collider)
 +
    {
 +
        Debug.Log("stay name=" + collider.gameObject.name);
 +
    }
 +
    void OnTriggerExit2D(Collider2D collider)
 +
    {
 +
        Debug.Log("exit name=" + collider.gameObject.name);
 +
    }
 +
}
 +
</pre>
 +
 
 +
==接触しない場合==
 +
BoxCollider2Dのサイズが間違ってないか確認。BoxCollider2Dのsizeは、2DオブジェクトのWidth,Heightと一致か確認。違ったら合わせる。
 +
 
 +
==重力無視&接触判定無視==
 +
#Rigitbody2DのBodyTypeをDynamicからKinematicに
 +
 
 +
==重力無視&接触判定あり==
 +
#ヒエラルキーに、EventSystemを追加
 +
#Rigitbody2DのBodyTypeをDynamicに
 +
#Rigitbody2DのGravityScaleを1から0に
 +
#Collider2Dのサイズが1とかになってれば、Imageと同じサイズに修正する
 +
 
 +
==回転しないように==
 +
Rigitbody2D の ConstraintのFreezeRotationZにチェックを入れる
 +
 
 +
==3Dのとき==
 
[[Unity/3d/collider]] [ショートカット]
 
[[Unity/3d/collider]] [ショートカット]
 +
 +
==UniRxで2Dのとき==
 +
[[Unity/UniRx/接触判定/接触2D]] [ショートカット]
 +
 +
[[Unity/UniRx/接触判定/侵食2D]] [ショートカット]

2024年8月23日 (金) 05:14時点における最新版

2d画像UIの接触判定

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

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

スクリプトで接触判定

using UnityEngine;

public class Collider2d : MonoBehaviour
{
    // 接触開始
    void OnCollisionEnter2D(Collision2D collision)
    {
        Debug.Log("enter name=" + collision.gameObject.name);
    }
    // 接触中
    void OnCollisionStay2D(Collision2D collision)
    {
        Debug.Log("stay name=" + collision.gameObject.name);
    }
    // 接触終了
    void OnCollisionExit2D(Collision2D collision)
    {
        Debug.Log("exit name=" + collision.gameObject.name);
    }
}

OnCollisionExit2Dは、接触したImageのy位置を、手動で、強制的に変更して、接触から、引き離すと発生する。

参考:https://mogi0506.com/unity-2d-collition/

2d画像UIの侵食判定

using UnityEngine;

public class ColliderTrigger2d : MonoBehaviour
{
    void OnTriggerEnter2D(Collider2D collider)
    {
        Debug.Log("enter name=" + collider.gameObject.name);
    }
    void OnTriggerStay2D(Collider2D collider)
    {
        Debug.Log("stay name=" + collider.gameObject.name);
    }
    void OnTriggerExit2D(Collider2D collider)
    {
        Debug.Log("exit name=" + collider.gameObject.name);
    }
}

接触しない場合

BoxCollider2Dのサイズが間違ってないか確認。BoxCollider2Dのsizeは、2DオブジェクトのWidth,Heightと一致か確認。違ったら合わせる。

重力無視&接触判定無視

  1. Rigitbody2DのBodyTypeをDynamicからKinematicに

重力無視&接触判定あり

  1. ヒエラルキーに、EventSystemを追加
  2. Rigitbody2DのBodyTypeをDynamicに
  3. Rigitbody2DのGravityScaleを1から0に
  4. Collider2Dのサイズが1とかになってれば、Imageと同じサイズに修正する

回転しないように

Rigitbody2D の ConstraintのFreezeRotationZにチェックを入れる

3Dのとき

Unity/3d/collider [ショートカット]

UniRxで2Dのとき

Unity/UniRx/接触判定/接触2D [ショートカット]

Unity/UniRx/接触判定/侵食2D [ショートカット]