「Unity/UIImage/Collider2d」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→2dイメージの接触判定) |
(→接触しない場合) |
||
(同じ利用者による、間の16版が非表示) | |||
行1: | 行1: | ||
− | == | + | ==2d画像UIの接触判定== |
#Canvas/Imageを2つ追加 | #Canvas/Imageを2つ追加 | ||
#両方にBoxColliderを追加 | #両方にBoxColliderを追加 | ||
行30: | 行30: | ||
</pre> | </pre> | ||
− | + | OnCollisionExit2Dは、接触したImageのy位置を、手動で、強制的に変更して、接触から、引き離すと発生する。 | |
− | == | + | 参考: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の接触判定
- Canvas/Imageを2つ追加
- 両方にBoxColliderを追加
- 上側のImageにだけ重力としてRigitbody2Dを追加。
- 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と一致か確認。違ったら合わせる。
重力無視&接触判定無視
- Rigitbody2DのBodyTypeをDynamicからKinematicに
重力無視&接触判定あり
- ヒエラルキーに、EventSystemを追加
- Rigitbody2DのBodyTypeをDynamicに
- Rigitbody2DのGravityScaleを1から0に
- Collider2Dのサイズが1とかになってれば、Imageと同じサイズに修正する
回転しないように
Rigitbody2D の ConstraintのFreezeRotationZにチェックを入れる
3Dのとき
Unity/3d/collider [ショートカット]
UniRxで2Dのとき
Unity/UniRx/接触判定/接触2D [ショートカット]
Unity/UniRx/接触判定/侵食2D [ショートカット]