Unity/UniRx/接触判定/距離測定
提供: 初心者エンジニアの簡易メモ
2022年8月18日 (木) 09:53時点におけるAdmin (トーク | 投稿記録)による版 (ページの作成:「*床としてPlaneを作成して、MeshColliderを追加 *キャラクタとして、Sphereを作成して、"CharacterSphere"にリネームで、Rigidbodyを追加。S...」)
- 床としてPlaneを作成して、MeshColliderを追加
- キャラクタとして、Sphereを作成して、"CharacterSphere"にリネームで、Rigidbodyを追加。SphereColliderを追加
- 接触判定用として、Sphereを作成して、"SphereTrigger"にリネームして、SphereColliderを追加。Radiusを3へ。AddComponentで、ObservableEventTriggerを追加
- 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名 }); } }