æè¿åºäŒã£ãçŽ æŽãããéçºããã»ã¹ãå
±æãããã£ãã ç§ã¯ä»¥åã«ãã®ãããªã¢ãããŒããèŠãããšã¯ãªãã人ã
ã¯ã圌ããããã«æ
£ãããšããã«ãé·ãéããã®ã²ãŒã ãæ§ç¯ããæ¹æ³ãçè§£ããåãå
¥ããããšãã§ããŸããã ãããŠãæ£çŽãªãšãããç§èªèº«ã¯æåã®é±ã«ãã¹ãŠãçè§£ããŠããŸããã§ããã ããããããã€ãã®ãã¹ã¿ãªã³ã°ã®åŸãã²ãŒã ãå¥ã®æ¹æ³ã§äœæããæ¹æ³ããã§ã«å¿ããŠããŸããã äžé£ã®èšäºãæžãäºå®ã§ãããå°ããã€å§ããŸããããåŸã
ã«ããããŠäœãäœã§ãäœã§ãããã«ã€ããŠã®çè§£ãæ·±ããŠãããŸãã
äžéšã®äººããã§ã«æšæž¬ããŠããããã«ã仿¥ã¯ãã³ãã³ãããã¿ãŒã³ãšãããã䜿çšããŠUnity 3Dãšã³ãžã³ã䜿çšããŠã²ãŒã ãéçºããæ¹æ³ã«ã€ããŠèª¬æããŸãã ããã¯ããã®ã¢ãããŒãã®éèŠãªãã¿ãŒã³ã®1ã€ã§ãã ã³ãŒãã¯ç°¡çŽ åãããŸãããæ©èœããããã»ã¹ãçè§£ããå¿
èŠããããŸãã
ããããŒã°
éçºè
ãUnityã§ã¢ã¯ã¿ãŒã䜿çšããæ¹æ³ã«ã€ããŠèªãèšäºãèŠãããšãããã§ããããïŒ ããã§ãªãå Žåã¯ãäŸã䜿çšããŠç°¡åã«ãã€ã³ãã説æããŸããã²ãŒã ã«ã¯ãããŸããŸãªæ¹æ³ã§ãžã£ã³ãããªããã°ãªããªãã²ãŒã ãã£ã©ã¯ã¿ãŒãããããããŸãã ãã¡ããã誰ãã奜ããªããªã¢ãŒãã£ãºã ã«ãã£ãŠåé¡ã解決ã§ããŸããããŒã¹ãŠããããäœæããåãŠãããã®ä»®æ³ãžã£ã³ãã¡ãœãããåçŽã«ãªãŒããŒããŒãããŸãã
ãã®ãããªãã®public class UnitController : MonoBehaviour { public Rigidbody AttachedRigidbody;
public class RabitUnitController : UnitController {
ãããããã®å Žåãç°ãªããžã£ã³ããåãæ¹æ³ã§ãžã£ã³ãããããã€ãã®æ¢è£œã®ãŠããããäœæããå¿
èŠãããå Žåãã¯ã©ã¹éå±€ããããã«ä¿®æ£ããããé©åãªã³ãŒãããã¹ãŠã®å¿
èŠãªã¯ã©ã¹ã«ã³ããŒã¢ã³ãããŒã¹ãããå¿
èŠããããŸãïŒæãããã§ãïŒã
ã¢ã¯ã¿ãŒã®å©ããåããŠããã®ã¿ã¹ã¯ã¯ç°ãªãæ¹æ³ã§è§£æ±ºãããŸãã ãã®ã¢ãããŒãã䜿çšãããšãä»®æ³Jumpã¡ãœããã®ä»£ããã«ãŠãããã¯ã©ã¹ãèšè¿°ããäžé£ã®åã
ã®UnitJumperã³ã³ããŒãã³ããèšè¿°ããé©åãªã³ã³ããŒãã³ããæ£ãããŠãããã«åçŽã«ããã¯ããå¿
èŠããããŸãã ãããŠããžã£ã³ãæã«ãæ¥ç¶ãããã³ã³ããŒãã³ãã§Jumpã¡ãœãããåŒã³åºããŸãã
ã¢ã¯ã¿ãŒã³ãŒã public class UnitJumper : MonoBehaviour { public virtual void Jump(Rigidbody rigidbody) {} } public class RegularJumper : UnitJumper { public override void Jump (Rigidbody rigidbody) { base.Jump (rigidbody); rigidbody.velocity = new Vector3 (0, 10, 0); } } public class MajesticAFJumper : UnitJumper { public override void Jump (Rigidbody rigidbody) { base.Jump (rigidbody); rigidbody.velocity = new Vector3 (0, 15, 10); } }
ãããŠãã³ã³ãããŒã©ãŒã¯ public class UnitController : MonoBehaviour { [SerializeField] private UnitJumper _unitJumper; public Rigidbody AttachedRigidbody;
ããã§ãã¹ãŠãã·ã³ãã«ã§çŸãããã®ã«ãªããŸããã éå±€ã®åé¡ãå°ãªãããããžã£ã³ãã³ãŒãã¯å¥ã®å°ããªã¯ã©ã¹ã«ç§»åããã倿Žã容æã«ãªããŸãã åãžã£ã³ãã¡ãœããã«ã¯ãå¿
èŠãªæ°ã®ãã©ã¡ãŒã¿ãŒãå«ããããšãã§ããŸãããã©ã¡ãŒã¿ãŒã倿ŽããŠããå®è¡äžãªã©ãå£ããããšã¯ãããŸããã ãŸãããŠãããã®ãžã£ã³ãæ¹æ³ã®å€æŽãéåžžã«ç°¡åã«ãªããŸããã ããã«ãç°å¢èªäœããã®ãããªã¢ãŒããã¯ãã£ã«åŸãããã«ä¿ãã[RequireComponentïŒïŒ]屿§ã®å©ããåããŠããšãã£ã¿ãŒããããããšãã§ããŸãã ä»ãããªãã¯ãªãç§ãããããã¹ãŠèªã£ãŠããã®ãããããŠäœãé¢ä¿ãªã®ããå°ããªããã°ãªããŸããã ããã§ãã³ãã³ããã¿ãŒã³ãžã®è«ççãªç§»è¡ã®æéã§ãã
è«çé·ç§»
ãã®äŸã®ãã¹ãŠã®ãžã£ã³ãã³ãŒãã1ã€ã®ã¯ã©ã¹ã«æžã蟌ãããšããæ¢ã«ç§»åããŸãããããŠããããåç¬ã§ç°ãªããžã£ã³ããããã ãã§ãªããããšãã°ãç¶æ³ã«å¿ããŠãžã£ã³ãã¡ãœããã倿Žã§ããããã«ãããå Žåã¯ã©ãã§ããããïŒå®è¿ãããããå£ã«æ²¿ã£ãŠèµ°ãïŒïŒ ãããããŒã ãå¿
èŠãšããå Žæã§ãã
æ¬è³ªã¯åããŸãŸã§ã-ãã¹ãŠã®åºæ¬çãªã¢ã¯ã·ã§ã³ãå¥ã
ã®ã¯ã©ã¹ã«åããŸãã 䜿çšããçŽåã«å¿
èŠãªã³ã³ããŒãã³ãããŠãããã«è¿œå ããŸããããã«ããããŠãããã®åäœããã€ã§ã倿Žã§ããããã«ãªããActorã®å Žåã®ãããªåŒ·åãªæ¥ç¶ã¯ãªããªããŸãã ã³ãã³ãã®å°ããªåºæ¬ã¯ã©ã¹ãäœæããŸããããããŸã§ã®ãšãããç¹å®ã®ãªããžã§ã¯ãã§ã³ãã³ããåŒã³åºãã ãã§ãã
ããŒã¹ããŒã public class Command : MonoBehaviour { public static T ExecuteOn<T>(GameObject target) where T : Command { return target.AddComponent <T>(); } private void Start() { OnStart (); } protected virtual void OnStart() {} }
äžèšã®ã³ãŒãã¯ãã³ã³ããŒãã³ãããªããžã§ã¯ãã«ç°¡åã«è¿œå ããããã ãã®ãã®ã§ãããOnStartïŒïŒã¡ãœããã¯ãçŸåšïŒãã ãä»ã®ãšããïŒã€ã³ããªã»ã³ã¹å°çšã§ãã
åºæ¬ã¯ã©ã¹ãã§ããã®ã§ãç°¡åãªãžã£ã³ããå®è£
ã§ããŸãã
ããããã®ãžã£ã³ãã¯ã©ã¹ public class RegularJumpCommand : Command { protected override void OnStart () { base.OnStart (); gameObject.GetComponent <Rigidbody>().velocity = new Vector3(0, 10, 0); } }
ãããŠä»ããŠãããããžã£ã³ããããã«ã¯ãã³ãã³ããå®è¡ããã ãã§ãïŒ
ããŒã ã³ãŒã« public class SomeController : MonoBehaviour {
æåã«ç®ãåŒãã®ã¯ãé床å€ãäžå®ã§ããããšã§ãã ãããã£ãŠããžã£ã³ããããå°ãé«ãããã ãã§ã¯æ©èœããŸããã 以åã¯ãåŒæ°ãjumpã¡ãœããã«æž¡ãããšã§ããã解決ããŠããŸããããããã§ããããããŸãããã çŸããããŒã ãæžãçŽããŸãããïŒ
åŒæ°ãæã€ããŒã public class Command : MonoBehaviour { private object[] _args; public static T ExecuteOn<T>(GameObject target, params object[] args) where T : Command { T result = target.AddComponent <T>(); result._args = args; return result; } private void Start() { OnStart (_args); } protected virtual void OnStart(object[] args) {} }
ã³ãã³ãã«åŒæ°ãæž¡ãããšã§ããžã£ã³ãã®é«ããšæ¹åã倿Žã§ããããã«ãªããŸããïŒåŒçšããããšãå¿ããªãã§ãã ããïŒã StartïŒïŒã¯ãªããžã§ã¯ãã®äœæããå°ãé
ããŠåŒã³åºããããããåŒæ°ã¯OnStartïŒobject [] argsïŒã¡ãœããã«æ£ããæž¡ãããŸãã
ãžã£ã³ãã³ãã³ãã¯ã»ãšãã©å€æŽãããŸããããå€éšããæž¡ãããåŒæ°ã䜿çšã§ããŸãã
ã³ãã³ãã§ã®åŒæ°ã®äœ¿çš public class RegularJumpCommand : Command { protected override void OnStart (object[] args) { base.OnStart (args); gameObject.GetComponent <Rigidbody> ().velocity = (Vector3)args [0]; } }
ã³ãã³ãã®åŒã³åºãã¯ããå°ã倿ŽãããŸãïŒ
åŒæ°ãæå®ããŠã³ãã³ããåŒã³åºã public class SomeController : MonoBehaviour {
æäœåŸãããŒã ã¯æè»ã«ãªããå®è¿ãã®å Žåã«ã®ã¿å¥ã®ã¯ã©ã¹ãå¿
èŠã«ãªããŸãã ãã ãããã©ã¡ãŒã¿ãŒãåæåããã«ã¯ãOnStartã¡ãœããïŒãªããžã§ã¯ã[] argsïŒã䜿çšããã ãã§ãã
2çªç®ã®åé¡ã¯ããžã£ã³ããããã³ã«ãé«äŸ¡ãªGetComponentïŒïŒã¡ãœãããåŒã³åºãããããšã§ãã ããã解決ããããã«ãã¢ã¯ã¿ãŒã«ã¯ãã¹ãŠã®éèŠãªã³ã³ããŒãã³ããžã®ãªã³ã¯ãä¿æããã³ã³ãããŒã©ãŒããããããŒã ã«å¿
èŠãªãã®ãã¹ãŠãèŠæ±ããããšãæãåºããŠãã ããã ã³ã³ãããŒã©ãåŒæ°ã«æž¡ãããšãã§ããŸãããããããå°ã圢åŒåããããšãææ¡ããŸãã ã³ãã³ãã®ã³ã³ãããŒã©ãŒãæã€åã¯ã©ã¹ãäœæããŸãããã
ã³ã³ãããŒã©ãŒä»ãã³ãã³ã public class CommandWithType<T> : Command where T : MonoBehaviour { protected T Controller { get; private set; } protected override void OnStart (object[] args) { base.OnStart (args); Controller = args [0] as T; } }
ãã®åŸã®ããŒã èªäœã§ã¯ã䜿çšããåŒæ°ã®æ°ã®ã¿ã倿ŽãããŠããŸãããããã«ã€ããŠãå¿ããªãã§ãã ããã ããããGetComponentïŒïŒã«é Œããã«ã³ã³ãããŒã©ãŒãååŸãã䟿å©ãªæ¹æ³ããããŸããã ãŸããbase.OnStartïŒargsïŒãåŒã³åºãå¿
èŠããããŸããããããªããšãã³ã³ãããŒã©ãŒã䜿çšã§ããŸããã
ã³ã³ãããŒã©ãŒã®äœ¿çš public class RegularJumpCommand : CommandWithType<UnitController> { protected override void OnStart (object[] args) { base.OnStart (args); Controller.AttachedRigidbody.velocity = (Vector3)args [1]; } }
ã³ãã³ãåŒã³åºããå°ãç°ãªããŸããïŒ public class SomeController : MonoBehaviour {
ããã§ãã¹ãŠãéåžžã«è¯ããªããŸãããã³ã³ãããŒã©ãŒãªãã§å®è¡ã§ããããŒã ïŒåºåã衚瀺ãã©ããã«äœããæçš¿ïŒãšã³ã³ãããŒã©ãŒãå¿
èŠãªããŒã ïŒå®è¡ãå®è¡ãé£è¡ïŒããããŸãã ã³ã³ãããŒã©ã䜿çšããã³ãã³ãã¯ãã¯ã©ã¹ãã¡ããªã§ã®äœæ¥çšã«åŒ·åãããŠãããä»ã®ãã¡ããªã§ã¯äœ¿çšã§ããŸãããããã«ããã远å ã®ç§©åºãå°å
¥ãããŸãã ãŸããã¢ã¯ã¿ãŒã®å©ç¹ããããŸãã ãããŠãããªãã¯åœŒããã©ãã»ã©å°ãããŠãããã§ãããã«æ°ã¥ããã«ã¯ããããŸããã§ããã ã³ã³ãããŒã©ãŒãããã®æ©æµãåããã ãã§ããã³ã³ãããŒã©ãŒã¯ãå¿
èŠãªã³ã³ããŒãã³ããžã®ãªã³ã¯ã®åãç°¡æœãªã³ã³ããã«ãªããŸããïŒãã¡ãããåŸã§ãã£ãšéãããŸãïŒã ããããããã¯ãŸã å§ãŸã£ãã°ããã§ããããã®ãããªæ©èœãåããŠããã®ã§ãç§ãã¡ã¯ããŸãè¡ããŸããã
ãžã£ã³ãããããã»ã©é ãã«è¡ããªãããã«ããŸã èŠéããŠãããã®ãèŠãŠã¿ãŸãããã ãã®åä»ã§ã¯ãããæçšãªäŸããè«ççãªçµè«ã«å°ããŸãããã
æåã«ç®ãåŒãã®ã¯ã10åãžã£ã³ãããåŸãå®å
šã«åœ¹ã«ç«ããªã10åã®ããŒã ããªããžã§ã¯ãã«ã¶ãäžããããšã§ãã 2çªç®ã«æ³šæããããšã¯ãéå§æã«é床ãå€åãããããç©çãšã³ãžã³ã®æ£ããåäœãä¿èšŒããªãããšã§ãã
ãããŸã§ã®ãšãããç§ãã¡ã¯æåã®ãã®ã«éäžããç¶ããŠããããèµ·ããããã«ã2çªç®ã決å®ãããŸãã æãè«ççãªããšã¯ãããŒã ãå°ç¡ãã«ãªã£ããããã«ã¯ãªãŒã³ã¢ããããããšã§ãã ã³ãã³ãå®äºæ©èœãš2ã€ã®ãã©ã°ã远å ããŠãããŒã ãå®è¡ãå®äºãããã©ããã確èªããŸãïŒè©³çްã¯åŸã»ã©ïŒã ãããŠãå°ããªå€é©ã®åŸãããŒã ã¯é²åããŸãïŒããããããã¯æåŸã®åœ¢ã§ãããããŸããïŒã
ããŒã ã®æŽç public class Command : MonoBehaviour { private object[] _args; private bool _started = false; private bool _isReleased = false; public bool IsRunning { get{ return _started && !_isReleased;} } public static T ExecuteOn<T>(GameObject target, params object[] args) where T : Command { T result = target.AddComponent <T>(); result._args = args; return result; } private void Start() { _started = true; OnStart (_args); } protected virtual void OnStart(object[] args) {} private void OnDestroy() { if (!_isReleased) OnReleaseResources (); } protected virtual void OnReleaseResources() { _isReleased = true; } protected void FinishCommand() { OnReleaseResources (); Destroy (this, 1f); } protected virtual void OnFinishCommand(){} }
ããŠãé©åãªã¿ã€ãã³ã°ã§ãããŒã ã¯ãŸãšããªåžæ°ã§ãã瀟äŒã®ã¡ã³ããŒã§ãããããèªæ»
ããŸããå¿
èŠãªæäœããã¹ãŠè¡ã£ãåŸãFinishCommandïŒïŒã¡ãœãããåŒã³åºãã ãã§ãã DestroyïŒïŒã¯å°ãé
ããŠããããå¿
èŠãšãããã¹ãŠã®äººãæ¶ããåã«ã³ãã³ãã䜿çšã§ããããã«ãªããŸãïŒããŒã¿ãååŸããŸãããåŸã§è©³ãã説æããŸãïŒãIsRunningãã©ã°ã¯ãããŒã ãäºåã«éå§ããªãããã«å¿
èŠã§ããå®äºã ã€ãã³ãããã®ãã¹ãŠã®ãµãã¹ã¯ã©ã€ãè§£é€ãšãªãœãŒã¹ã®è§£æŸã¯ãOnReleaseResourcesïŒïŒãŸãã¯OnFinishCommandïŒïŒã§ç°¡åã«å®è¡ã§ããŸãã ãããŠãããªãã誀ã£ãŠOn
Destory ïŒïŒãæžãããšãæããŠã¯ãããŸããã
ããã§ã2çªç®ã®åé¡ã解決ã§ããŸãã
FixedUpdateã§é床ã倿Žãã public class RegularJumpCommand : CommandWithType<UnitController> { private Vector3 _velocity; protected override void OnStart (object[] args) { base.OnStart (args); _velocity = (Vector3)args [1]; } private void FixedUpdate() { if (!IsRunning) return; Controller.AttachedRigidbody.velocity = _velocity; FinishCommand (); } }
é床å€ã¯ãStart-aåŸã®ç©çãšã³ãžã³ã®æåã®å埩ã®ç¬éã«å€åããŸãã éçºã®ãã®æ®µéã«ããããŒã ã¯ãåªæã®runningå±ãã©ã³ãã³ã°ãããŸããŸãªãžã£ã³ããèŠèŠå¹æãªã©ã®ã¿ã¹ã¯ã«çŽ æŽããã察åŠããŸãã
ããããã©ãã§ãããïŒïŒ
ããã¯ããªããæããšããã«ã¯ãŸã 䜿çšããããã«ãªããŸããã æ§æãããŠã³ããŒããããããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãæ€èšŒããå¿
èŠãããå ŽåïŒåäŸã芪ã®ãéã§ãã³ãè²·ããªãããã«ããïŒããŸãã¯ãžã°ã¶ã°å®è¡ã®äžéšãšããŠããŒã ã䜿çšããå Žåã å€ãã®å ŽåãããŒã ãå®äºãããã©ãããæ£åžžã«å®äºãããã©ããã確èªããå¿
èŠãããå Žåããããå®äºããŠããå Žåã¯ãããããå¿
èŠãªããŒã¿ãååŸããŸãïŒç Žå£ãé
å»¶ããŸããïŒã èŠããã«ãã³ãŒã«ããã¯ãªãã§ã¯çè§£ã§ããŸããã å人çã«ãç§ã¯ãããã®ããã«æ°ããUnity UIã·ã¹ãã ã奜ãã§ãããããããã³ãŒãã«è¿œå ãŸãã¯ã³ãŒãããåé€ããããšãã ãã§ãïŒãšãã£ã¿ãŒã§ãããè¡ãããšã¯çœªã§ãããã®ããã«ããªãã§ãã ããïŒã
ã€ãã³ãã§ãã¹ãŠãè¡ãããšãã§ããèããå¿
èŠãããããŸããããå®è¡äžã®ãã¹ãŠã®ã³ãã³ããžã®ãªã³ã¯ãç¶æããããªãã®ã§ãé©åãªã¿ã€ãã³ã°ã§ç»é²ãè§£é€ããŠãã ããã çã¿ã¯èäžã®ããäžã«ãããŸããç»é²ãè§£é€ããã®ãå¿ããå Žåãåã³ããããã人ã¯ã»ãšãã©ããŸããã æåã«ãã³ãã³ããæå€§éã«æŽ»çšãå§ããããã«äœãããå¿
èŠãããããèŠå®ããŸããããããããã°ãåŸã§ç·šéãã§ããªããªããŸãã äž»ãªã¿ã¹ã¯ã¯ãã³ãã³ããæ£åžžã«å®äºããå Žåãšå€±æããå Žåã®ã³ãŒã«ããã¯ãäœæããããšã§ãã ãããã眲åããã®ã«äŸ¿å©ã§ã賌èªè§£é€ã«åŸãå¿
èŠã¯ãããŸããã ãŸããã³ãã³ããæž¡ããšãã«ãã³ãã³ãèªäœãã³ãŒã«ããã¯åŒæ°ã«æž¡ããšãã¯ã©ã¹å
ã«å¥ã®ãã£ãŒã«ããä¿æãããªãããã«ãªããŸãã ããã§ããå€éšããããŒã ã忢ããæ¹æ³ã¯å®è£
ããŠããŸããã
ãŸãããããã®ã³ãŒã«ããã¯çšã®å°ããªã©ãããŒãäœæããŸãã èšããããšããã«ãç§ãã¡ããã°ã©ããŒã¯åçŽãªäººã§ãã æ¬¡ã®ãããªãã®ãåŸãŸããïŒ
ã³ãŒã«ãã㯠public class Callback<T> where T : Command { public readonly Action<T> Succeed; public readonly Action<T> Fault; public Callback (Action<T> succeed) { this.Succeed = succeed; } public Callback (Action<T> succeed, Action<T> fault) { this.Succeed = succeed; this.Fault = fault; } }
ã·ã³ãã«ã§äŸ¿å©ã ããã©ã«ãã§ã¯ãã³ãŒã«ããã¯ã1ã€ãããªãå Žåãã³ãã³ãã®æ£åžžãªå®äºã®ã¿ã«é¢å¿ãããããã®å Žåã«ã®ã¿åŒã³åºããããšèªåçã«ä¿¡ããŠããããšã«æ³šæããŠãã ããã æ¬¡ã®è«çã¹ãããã¯ããããã®éåžžã«ã³ãŒã«ããã¯çšã®ã³ã³ãããäœæããããšã§ããããã¯ã1ã€ã§ååãªããã§ãã ãããŠãç§ãã¡ã¯ãããåŸãŸããïŒ
ã³ãŒã«ããã¯ããŒã¯ã³ public class CallbackToken <T> where T : Command { private List<Callback<T>> _callbacks; private T _command; public CallbackToken (T _command) { this._command = _command; _callbacks = new List<Callback<T>>(); } public void AddCallback(Callback<T> callback) { _callbacks.Add (callback); } public void RemoveCallback(Callback<T> callback) { _callbacks.Remove (callback); } public void FireSucceed() { foreach (Callback<T> calback in _callbacks) { calback.Succeed(_command); } } public void FireFault() { foreach (Callback<T> callback in _callbacks) { if (callback.Fault != null) { callback.Fault (_command); } } } }
CallbackTokenãããŒã ã«è¿œå ããé©åãªã¿ã€ãã³ã°ã§åŒã³åºãã ãã§ãã ãããŠãããŒã ãæåãããããšãå¯èœã«ããããšãå¿ããªãã§ãã ããã ãããŠããã«æçµçãªã³ãŒãïŒ
ã³ãŒã«ããã¯ãšããŒã public class Command : MonoBehaviour { private object[] _args; private bool _started = false; private bool _isReleased = false; public CallbackToken<Command> CallbackToken { get; private set; } public Command () { CallbackToken = new CallbackToken<Command> (this); } public bool IsRunning { get{ return _started && !_isReleased;} } public static T ExecuteOn<T>(GameObject target, params object[] args) where T : Command { T result = target.AddComponent <T>(); result._args = args; return result; } private void Start() { _started = true; OnStart (_args); } protected virtual void OnStart(object[] args) {} private void OnDestroy() { if (!_isReleased) OnReleaseResources (); } protected virtual void OnReleaseResources() { _isReleased = true; } protected void FinishCommand(bool result = true) { if (!IsRuning) return; OnReleaseResources (); OnFinishCommand (); if (result) CallbackToken.FireSucceed (); else CallbackToken.FireFault (); Destroy (this, 1f); } protected virtual void OnFinishCommand(){} public void Terminate(bool result = false) { FinishCommand (result); }
ããã§ãFinishCommandïŒïŒã¡ãœããã¯å®è¡ãåŒæ°ãšããŠåãå
¥ããTerminateïŒïŒã¡ãœããã¯å€éšããã³ãã³ãã®äœæ¥ãäžæããããã«äœ¿çšãããŸãã
次ã«ããµãã¹ã¯ãªãã·ã§ã³ãã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã
ã³ãŒã«ããã¯ãµãã¹ã¯ãªãã·ã§ã³ public class SomeController : MonoBehaviour {
ããã§ã2çªç®ã®ã¿ã¹ã¯ãç°¡åã«è§£æ±ºã§ããŸããã³ãã³ãããããŒã¿ãååŸããïŒçµå±ãã³ãŒã«ããã¯ã¡ãœããã§ååŸããïŒããã«ãå¿
èŠãªæ
å ±ãšåºæ¥äºã®ãããªãã¯geterãäœæããã ãã§ãã
çµããïŒ
çµè«ãšããŠããã®ã¢ãããŒãã¯Unityã§ã²ãŒã ãéçºããã®ã«éåžžã«æåããŠãããšèšãããã§ãã ãã¹ãŠãã·ã³ãã«ã§çŸããã倿Žãç°¡åã§ãå®çšçãªã³ãã³ãïŒããŠã³ããŒããæçš¿ïŒããããžã§ã¯ãã«ç°¡åã«è»¢éã§ããŸãã ãã®èšäºãæ°ã«å
¥ã£ãããå¬ããã ãã§ãªããæéç¶æ
ãã·ã³ãMVCãæŠç¥ã1ã€ã®ãããžã§ã¯ãã§ã®çãæ¹ãšå
±åã«ã€ããŠè©±ãã€ã³ã»ã³ãã£ãããããŸãã
PSïŒããã®ã³ãŒãã¯æ
å ±æäŸã®ã¿ãç®çãšããŠããããšãã£ã¿ãŒã§ã®ã¿ãã¹ããããããšãå¿ããªãã§ãã ããã