「Unity/UniRx/接触判定/距離測定」の版間の差分
提供: 初心者エンジニアの簡易メモ
行36: | 行36: | ||
Debug.Log("distance=" + distance); | Debug.Log("distance=" + distance); | ||
} | } | ||
− | |||
}); | }); | ||
distanceOnTriggerExitAsObservable.Subscribe(collider => | distanceOnTriggerExitAsObservable.Subscribe(collider => |
2022年8月18日 (木) 09:59時点における版
- 床としてPlaneを作成して、MeshColliderを追加
- キャラクタとして、Sphereを作成して、"CharacterSphere"にリネームで、Rigidbodyを追加。
- 接触判定用として、GameObjectを作成して、"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名 }); } }