You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.5 KiB
67 lines
2.5 KiB
11 months ago
|
using System; // require keep for Windows Universal App
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace UniRx.Triggers
|
||
|
{
|
||
|
[DisallowMultipleComponent]
|
||
|
public class ObservableCollision2DTrigger : ObservableTriggerBase
|
||
|
{
|
||
|
Subject<Collision2D> onCollisionEnter2D;
|
||
|
|
||
|
/// <summary>Sent when an incoming collider makes contact with this object's collider (2D physics only).</summary>
|
||
|
void OnCollisionEnter2D(Collision2D coll)
|
||
|
{
|
||
|
if (onCollisionEnter2D != null) onCollisionEnter2D.OnNext(coll);
|
||
|
}
|
||
|
|
||
|
/// <summary>Sent when an incoming collider makes contact with this object's collider (2D physics only).</summary>
|
||
|
public IObservable<Collision2D> OnCollisionEnter2DAsObservable()
|
||
|
{
|
||
|
return onCollisionEnter2D ?? (onCollisionEnter2D = new Subject<Collision2D>());
|
||
|
}
|
||
|
|
||
|
Subject<Collision2D> onCollisionExit2D;
|
||
|
|
||
|
/// <summary>Sent when a collider on another object stops touching this object's collider (2D physics only).</summary>
|
||
|
void OnCollisionExit2D(Collision2D coll)
|
||
|
{
|
||
|
if (onCollisionExit2D != null) onCollisionExit2D.OnNext(coll);
|
||
|
}
|
||
|
|
||
|
/// <summary>Sent when a collider on another object stops touching this object's collider (2D physics only).</summary>
|
||
|
public IObservable<Collision2D> OnCollisionExit2DAsObservable()
|
||
|
{
|
||
|
return onCollisionExit2D ?? (onCollisionExit2D = new Subject<Collision2D>());
|
||
|
}
|
||
|
|
||
|
Subject<Collision2D> onCollisionStay2D;
|
||
|
|
||
|
/// <summary>Sent each frame where a collider on another object is touching this object's collider (2D physics only).</summary>
|
||
|
void OnCollisionStay2D(Collision2D coll)
|
||
|
{
|
||
|
if (onCollisionStay2D != null) onCollisionStay2D.OnNext(coll);
|
||
|
}
|
||
|
|
||
|
/// <summary>Sent each frame where a collider on another object is touching this object's collider (2D physics only).</summary>
|
||
|
public IObservable<Collision2D> OnCollisionStay2DAsObservable()
|
||
|
{
|
||
|
return onCollisionStay2D ?? (onCollisionStay2D = new Subject<Collision2D>());
|
||
|
}
|
||
|
|
||
|
protected override void RaiseOnCompletedOnDestroy()
|
||
|
{
|
||
|
if (onCollisionEnter2D != null)
|
||
|
{
|
||
|
onCollisionEnter2D.OnCompleted();
|
||
|
}
|
||
|
if (onCollisionExit2D != null)
|
||
|
{
|
||
|
onCollisionExit2D.OnCompleted();
|
||
|
}
|
||
|
if (onCollisionStay2D != null)
|
||
|
{
|
||
|
onCollisionStay2D.OnCompleted();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|