「Unity/UniRx/接触判定/距離測定」の版間の差分
提供: 初心者エンジニアの簡易メモ
行1: | 行1: | ||
*床としてPlaneを作成して、MeshColliderを追加 | *床としてPlaneを作成して、MeshColliderを追加 | ||
*キャラクタとして、Sphereを作成して、"CharacterSphere"にリネームで、Rigidbodyを追加。 | *キャラクタとして、Sphereを作成して、"CharacterSphere"にリネームで、Rigidbodyを追加。 | ||
− | *接触判定用として、GameObjectを作成して、"SphereTrigger" | + | *接触判定用として、GameObjectを作成して、"SphereTrigger"にリネームして、SphereColliderを追加。Radiusを3へ。AddComponentで、ObservableTriggerTriggerを追加 |
*SerializeFieldのeventTriggerに"SphereTrigger"をドラッグ | *SerializeFieldのeventTriggerに"SphereTrigger"をドラッグ | ||
2022年8月18日 (木) 14:49時点における版
- 床としてPlaneを作成して、MeshColliderを追加
- キャラクタとして、Sphereを作成して、"CharacterSphere"にリネームで、Rigidbodyを追加。
- 接触判定用として、GameObjectを作成して、"SphereTrigger"にリネームして、SphereColliderを追加。Radiusを3へ。AddComponentで、ObservableTriggerTriggerを追加
- SerializeFieldのeventTriggerに"SphereTrigger"をドラッグ
using UnityEngine; using UniRx; using UniRx.Triggers; using System; public class DistanceScene : MonoBehaviour { [SerializeField] ObservableEventTrigger eventTrigger; void Start() { IObservable<Collider> distanceOnTriggerEnterAsObservable = eventTrigger.OnTriggerEnterAsObservable(); IObservable<Collider> distanceOnTriggerStayAsObservable = eventTrigger.OnTriggerStayAsObservable(); IObservable<Collider> distanceOnTriggerExitAsObservable = eventTrigger.OnTriggerExitAsObservable(); distanceOnTriggerEnterAsObservable.Subscribe(collider => { Debug.Log("OnTriggerEnter collider.gameObject.name=" + collider.gameObject.name); // 接触object名 }); distanceOnTriggerStayAsObservable.Subscribe(collider => { Debug.Log("OnTriggerStay collider.gameObject.name=" + collider.gameObject.name); // 接触object名 if (collider.gameObject.name == "CharacterSphere") { float distance = Vector3.Distance(eventTrigger.gameObject.transform.position, collider.gameObject.transform.position); distance -= collider.gameObject.GetComponent<SphereCollider>().radius; if (distance < 0) { distance = 0; } Debug.Log("distance=" + distance); } }); distanceOnTriggerExitAsObservable.Subscribe(collider => { Debug.Log("OnTriggerExit collider.gameObject.name=" + collider.gameObject.name); // 接触object名 }); } }