ãšã³ããªãŒ
å¹³åçãªUnity3Dãããžã§ã¯ãã§ãããéåžžã«è¿ éã«å€çš®å€æ§ãªã¹ã¯ãªããã§æºãããããããã®ã¹ã¯ãªãããçžäºã«ã©ã®ããã«çžäºäœçšããããšããçåãçããŸãã
ãã®èšäºã§ã¯ããã®ãããªçžäºäœçšãåçŽãªãã®ããé«åºŠãªãã®ãŸã§äœç³»åããããã®ããã€ãã®ç°ãªãã¢ãããŒããæäŸããåã¢ãããŒããããããåé¡ã説æãããããã®åé¡ã解決ããæ¹æ³ãææ¡ããŸãã
ã¢ãããŒã1. Unity3Dãšãã£ã¿ãŒã«ããå²ãåœãŠ
ãããžã§ã¯ãã«2ã€ã®ã¹ã¯ãªããããããšããŸãã æåã®ããã¿ã¯ã²ãŒã å ã®ãã€ã³ãã®ã¹ã³ã¢ãªã³ã°ãæ åœãã2çªç®ã®ããã¿ã¯ã²ãŒã ç»é¢ã§åŸç¹ãããã€ã³ãã®æ°ã衚瀺ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãæ åœããŸãã
äž¡æ¹ã®ã¹ã¯ãªãããããŒãžã£ãŒãScoresManagerãšHUDManagerãåŒã³åºããŸãã
ããã§ã¯ãã¹ã¯ãªãŒã³ã¡ãã¥ãŒãæ åœãããããŒãžã£ãŒã¯ããã€ã³ãã®ç²åŸãæ åœãããããŒãžã£ãŒããçŸåšã®ãã€ã³ãæ°ãã©ã®ããã«åãåãããšãã§ããŸããïŒ
ã·ãŒã³ã®ãªããžã§ã¯ãã®éå±€ïŒéå±€ïŒã«ã¯2ã€ã®ãªããžã§ã¯ããããã1ã€ã«ScoresManagerã¹ã¯ãªãããå²ãåœãŠããããã1ã€ã«HUDManagerã¹ã¯ãªãããå²ãåœãŠãããŠãããšæ³å®ãããŠããŸãã
1ã€ã®ã¢ãããŒãã«ã¯ã次ã®ååãå«ãŸããŸãã
UIManagerã¹ã¯ãªããã§ãScoresManagerã¿ã€ãã®å€æ°ãå®çŸ©ããŸãã
public class HUDManager : MonoBehaviour { public ScoresManager ScoresManager; }
ãã ããScoresManagerå€æ°ã¯ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§åæåããå¿ èŠããããŸãã ãããè¡ãã«ã¯ããªããžã§ã¯ãéå±€ã§HUDManagerã¹ã¯ãªãããå²ãåœãŠãããŠãããªããžã§ã¯ããéžæããŸãããªããžã§ã¯ãèšå®ã§ã¯ãå€Noneã®ScoresManagerå€æ°ã衚瀺ãããŸãã
次ã«ãéå±€ãŠã£ã³ããŠãããScoresManagerã¹ã¯ãªãããå«ããªããžã§ã¯ããNoneãæžã蟌ãŸããŠããé åã«ãã©ãã°ãã宣èšãããå€æ°ã«å²ãåœãŠãŸãã
ãã®åŸãHUDManagerã³ãŒãããScoresManagerã¹ã¯ãªããã«ã¢ã¯ã»ã¹ããæ©äŒããããŸãã
public class HUDManager : MonoBehaviour { public ScoresManager ScoresManager; public void Update () { ShowScores(ScoresManager.Scores); } }
ã·ã³ãã«ã§ãããã²ãŒã ã¯ãã€ã³ããç²åŸããã ãã§ãªããHUDã¯ãã¬ãŒã€ãŒã®çŸåšã®ç掻ãå©çšå¯èœãªãã¬ãŒã€ãŒã¢ã¯ã·ã§ã³ã®ã¡ãã¥ãŒãã¬ãã«æ å ±ãªã©ã衚瀺ã§ããŸãã ã²ãŒã ã«ã¯ãäºãã«æ å ±ãåä¿¡ããå¿ èŠã®ããæ°åããæ°çŸã®ç°ãªãã¹ã¯ãªãããå«ããããšãã§ããŸãã
1ã€ã®ã¹ã¯ãªããã§å¥ã®ã¹ã¯ãªããããããŒã¿ãååŸããã«ã¯ã1ã€ã®ã¹ã¯ãªããã§å€æ°ãèšè¿°ãããšãã£ã¿ãŒã䜿çšããŠå€æ°ãæåã§å²ãåœãŠïŒãã©ãã°ã¢ã³ãããããïŒããå¿ èŠããããŸãã ã
äœãããªãã¡ã¯ã¿ãªã³ã°ãããå Žåã¯ãã¹ã¯ãªããã®ååãå€æŽãããšãååãå€æŽãããã¹ã¯ãªããã«é¢é£ä»ãããããªããžã§ã¯ãã®éå±€å ã®ãã¹ãŠã®å€ãåæåããªã»ãããããå床å²ãåœãŠãå¿ èŠããããŸãã
åæã«ããã®ãããªã¡ã«ããºã ã¯ããã¬ããïŒãã³ãã¬ãŒãããã®ãªããžã§ã¯ãã®åçäœæïŒã§ã¯æ©èœããŸããã ãã¬ããããªããžã§ã¯ãã®éå±€ã«ãããããŒãžã£ãŒã«ã¢ã¯ã»ã¹ããå¿ èŠãããå Žåãéå±€ãããã¬ããèªäœã«èŠçŽ ãå²ãåœãŠãããšã¯ã§ããŸããããæåã«ãã¬ãããããªããžã§ã¯ããäœæããŠãããããã°ã©ã ã§ãããŒãžã£ãŒã€ã³ã¹ã¿ã³ã¹ãæ°ããäœæããããªããžã§ã¯ãã®å€æ°ã«å²ãåœãŠãå¿ èŠããããŸãã äžèŠãªäœæ¥ãäžèŠãªã³ãŒããè¿œå ã®æ¥ç¶æ§ã
次ã®ã¢ãããŒãã¯ãããããã¹ãŠã®åé¡ã解決ããŸãã
ã¢ãããŒã2.ã·ã³ã°ã«ãã³
ã²ãŒã ã®äœæã«äœ¿çšãããå¯èœæ§ã®ããã¹ã¯ãªããã®ç°¡ç¥åãããåé¡ãé©çšããŸãã æåã®ã¿ã€ãã®ã¹ã¯ãªããïŒãscripts-managersãã2çªç®ã®ã¿ã€ãïŒãscripts-game-objectsãã
ä»ã®ããã€ãã®äž»ãªéãã¯ããã¹ã¯ãªãããããŒãžã£ãŒãã¯åžžã«ã²ãŒã å ã§åäžã®ã€ã³ã¹ã¿ã³ã¹ãæã¡ãŸããããã¹ã¯ãªããã²ãŒã ãªããžã§ã¯ããã¯è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãæã€ããšãã§ããããšã§ãã
äŸ
ååãšããŠãåäžã®ã³ããŒã«ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®äžè¬çãªããžãã¯ãé³æ¥œã®åçãã¬ãã«å®äºæ¡ä»¶ã®ç£èŠãã¿ã¹ã¯ã·ã¹ãã ã®ç®¡çãç¹æ®å¹æã®è¡šç€ºãªã©ãæ åœããã¹ã¯ãªããããããŸãã
åæã«ãã²ãŒã ãªããžã§ã¯ãã®ã¹ã¯ãªããã¯å€æ°ã®ã€ã³ã¹ã¿ã³ã¹ã«ååšããŸãããAngry Birdsãã®åé³¥ã¯ãåºæã®ç¶æ ãæã€é³¥ã¹ã¯ãªããã®ã€ã³ã¹ã¿ã³ã¹ã«ãã£ãŠå¶åŸ¡ãããŸãã æŠç¥ã®ã©ã®ãŠãããã«ã€ããŠãããŠãããã¹ã¯ãªããã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã®äžã«ã¯çŸåšã®ã©ã€ãæ°ããã£ãŒã«ãäžã®äœçœ®ãå人çãªç®æšãå«ãŸããŸãã 5ã€ã®ç°ãªãã¢ã€ã³ã³ã®åäœã¯ããã®åäœãæ åœããåãã¹ã¯ãªããã®ç°ãªãã€ã³ã¹ã¿ã³ã¹ã«ãã£ãŠæäŸãããŸãã
åã®ã¹ãããã®äŸã§ã¯ãHUDManagerããã³ScoresManagerã¹ã¯ãªããã¯åžžã«åäžã®ã€ã³ã¹ã¿ã³ã¹ã«ååšããŸãã çžäºäœçšã®ããã«ããã·ã³ã°ã«ãã³ããã¿ãŒã³ïŒã·ã³ã°ã«ãã³ãå¥åããŒã³ïŒãé©çšããŸãã
ScoresManagerã¯ã©ã¹ã§ã¯ãScoresManageråã®éçããããã£ãèšè¿°ããŸãããã®ããããã£ã«ã¯ããã€ã³ããããŒãžã£ãŒã®åäžã®ã€ã³ã¹ã¿ã³ã¹ãæ ŒçŽãããŸãã
public class ScoresManager : MonoBehaviour { public static ScoresManager Instance { get; private set; } public int Scores; }
Unity3Dç°å¢ãäœæããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§Instanceããããã£ãåæåããããšã¯æ®ããŸãã ScoresManagerã¯MonoBehaviourã®ç¶æ¿è ã§ãããããã·ãŒã³å ã®ãã¹ãŠã®ã¢ã¯ãã£ããªã¹ã¯ãªããã®ã©ã€ããµã€ã¯ã«ã«åå ããã¹ã¯ãªããã®åæåäžã«Awakeã¡ãœãããåŒã³åºãããŸãã ãã®ã¡ãœããã§ã¯ãInstanceããããã£ã®åæåã³ãŒããé 眮ããŸãã
public class ScoresManager : MonoBehaviour { public static ScoresManager Instance { get; private set; } public int Scores; public void Awake() { Instance = this; } }
ãã®åŸã次ã®ããã«ä»ã®ã¹ã¯ãªããããScoresManagerã䜿çšã§ããŸãã
public class HUDManager : MonoBehaviour { public void Update () { ShowScores(ScoresManager.Instance.Scores); } }
ããã§ãHUDManagerãScoresManagerã¿ã€ãã®ãã£ãŒã«ããèšè¿°ããŠUnity3Dãšãã£ã¿ãŒã§å²ãåœãŠãå¿ èŠããªããªãããã¹ã¯ãªãããããŒãžã£ãŒãã¯ãAwakeé¢æ°ã§åæåãããéçã€ã³ã¹ã¿ã³ã¹ããããã£ãä»ããŠèªèº«ãžã®ã¢ã¯ã»ã¹ãæäŸã§ããŸãã
é·æ
-ã¹ã¯ãªãããã£ãŒã«ãã説æããUnity3Dãšãã£ã¿ãŒã§å²ãåœãŠãå¿ èŠã¯ãããŸããã
-ã³ãŒããå®å šã«ãªãã¡ã¯ã¿ãªã³ã°ã§ããŸããäœããèœã¡ãå Žåã¯ãã³ã³ãã€ã©ãéç¥ããŸãã
-Instanceããããã£ãä»ããŠããã¬ããããä»ã®ãã¹ã¯ãªãããããŒãžã£ãŒãã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããã
çæ
-ãã®ã¢ãããŒãã§ã¯ãåäžã®ã³ããŒã«ååšãããã¹ã¯ãªãããããŒãžã£ãŒãã®ã¿ã«ã¢ã¯ã»ã¹ã§ããŸãã
-匷ãã€ãªããã
æåŸã®ããã€ãã¹ãã§ãã詳现ã«èª¬æããŸãã
ãã£ã©ã¯ã¿ãŒïŒãŠãããïŒãããŠããããã®ãã£ã©ã¯ã¿ãŒãæ»ã¬ïŒãã€ïŒããšãã§ããã²ãŒã ãéçºããŸãããã
ã©ããã«ããã£ã©ã¯ã¿ãŒãæ»ãã§ãããã©ããã確èªããã³ãŒãã®äžéšããããŸãã
public class Unit : MonoBehaviour { public int LifePoints; public void TakeDamage(int damage) { LifePoints -= damage; if (LifePoints <= 0) Die(); } }
ã²ãŒã ã¯ãã£ã©ã¯ã¿ãŒã®æ»ã«ã©ã®ããã«å¯Ÿå¿ã§ããŸããïŒ å€ãã®ç°ãªãåå¿ïŒ ããã€ãã®ãªãã·ã§ã³ã玹ä»ããŸãã
-ãã£ã©ã¯ã¿ãŒãã²ãŒã ã·ãŒã³ããåé€ããŠããã£ã©ã¯ã¿ãŒãç»å Žããªãããã«ããå¿ èŠããããŸãã
-ã²ãŒã ã§ã¯ãæ»ãã ãã£ã©ã¯ã¿ãŒããšã«ãã€ã³ããä»äžãããŸããããããç²åŸããç»é¢äžã®å€ãæŽæ°ããå¿ èŠããããŸãã
-ç¹å¥ãªããã«ã«ã¯ãã²ãŒã å ã®ãã¹ãŠã®ãã£ã©ã¯ã¿ãŒã衚瀺ãããç¹å®ã®ãã£ã©ã¯ã¿ãŒãéžæã§ããŸãã ãã£ã©ã¯ã¿ãŒãæ»ãã ãšããããã«ãæŽæ°ããããããã«ãããã£ã©ã¯ã¿ãŒãåé€ããããããã«ãæ»ãã§ããããšã衚瀺ããå¿ èŠããããŸãã
-ãã£ã©ã¯ã¿ãŒã®æ»ã®å¹æé³ãåçããå¿ èŠããããŸãã
-ãã£ã©ã¯ã¿ãŒã®æ»ã®èŠèŠå¹æïŒççºãè¡ãã¶ãïŒãåçããå¿ èŠããããŸãã
-ã²ãŒã ã®ã¢ããŒãã¡ã³ãã·ã¹ãã ã«ã¯ãåžžã«ãã«ããããã£ã©ã¯ã¿ãŒã®ç·æ°ãã«ãŠã³ãããã¢ããŒãã¡ã³ãããããŸãã æ»ãã ã°ããã®ãã£ã©ã¯ã¿ãŒãã«ãŠã³ã¿ãŒã«è¿œå ããå¿ èŠããããŸãã
-ã²ãŒã åæã·ã¹ãã ã¯ããã£ã©ã¯ã¿ãŒã®æ»ã®äºå®ãå€éšãµãŒããŒã«éä¿¡ããŸãããã®äºå®ã¯ããã¬ã€ã€ãŒã®é²è¡ç¶æ³ã远跡ããããã«éèŠã§ãã
äžèšã®ãã¹ãŠãèæ ®ãããšãDieé¢æ°ã¯æ¬¡ã®ããã«ãªããŸãã
private void Die() { DeleteFromScene(); ScoresManager.Instance.OnUnitDied(this); LevelConditionManager.Instance.OnUnitDied(this); UnitsPanel.Instance.RemoveUnit(this); SoundsManager.Instance.PlayUnitDieSound(); EffectsManager.Instance.PlaySmallExplosion(); AchivementsManager.Instance.OnUnitDied(this); AnaliticsManager.Instance.SendUnitDiedEvent(this); }
圌ã®æ»åŸã®ãã£ã©ã¯ã¿ãŒã¯ããã®æ²ããäºå®ã«èå³ãæã£ãŠãããã¹ãŠã®ã³ã³ããŒãã³ãã«éä¿¡ããå¿ èŠãããããããã®ã³ã³ããŒãã³ãã®ååšãç¥ãã圌ãã圌ã«èå³ãæã£ãŠããããšãç¥ã£ãŠããå¿ èŠããããŸãã å°ããªãŠãããã«ã¯ç¥èãå€ãããŸããïŒ
ã²ãŒã ã¯è«ççã«éåžžã«é¢é£æ§ã®é«ãæ§é ã§ãããããä»ã®ã³ã³ããŒãã³ãã§çºçããã€ãã³ãã¯3çªç®ã®é¢å¿äºã§ããããã®ãŠãããã¯ç¹å¥ãªãã®ã§ã¯ãããŸããã
ãã®ãããªã€ãã³ãã®äŸïŒæ±ºããŠãã¹ãŠã§ã¯ãªãïŒïŒ
-ã¬ãã«ãæž¡ãããã®æ¡ä»¶ã¯ãåŸç¹ã1000ãã€ã³ããç²åŸãããã€ã³ãã®æ°ã«äŸåããŸã-ã¬ãã«ãæž¡ããŸããïŒLevelConditionManagerã¯ScoresManagerã«é¢é£ä»ããããŠããŸãïŒã
-500ãã€ã³ããéãããšãã¬ãã«ãæž¡ãéèŠãªæ®µéã«å°éããŸãã楜ããã¡ããã£ãšèŠèŠå¹æãåçããå¿ èŠããããŸãïŒScoresManagerã¯EffectsManagerãšSoundsManagerã«é¢é£ä»ããããŠããŸãïŒã
-ãã£ã©ã¯ã¿ãŒãå¥åº·ãå埩ãããããã£ã©ã¯ã¿ãŒã®ããã«ã§ãã£ã©ã¯ã¿ãŒã®åçã«çãå¹æããããå¿ èŠããããŸãïŒUnitsPanelã¯EffectsManagerã«é¢é£ä»ããããŠããŸãïŒã
-ãªã©ã
ãã®ãããªæ¥ç¶ã®çµæã次ã®ãããªåçã«ãªããŸãã誰ãããã¹ãŠã®ããšãç¥ã£ãŠããŸãã
ãã£ã©ã¯ã¿ãŒã®æ»ã䌎ãäŸã¯å°ãèªåŒµãããŠãããæ»ïŒãŸãã¯ä»ã®ã€ãã³ãïŒã6ã€ã®ç°ãªãã³ã³ããŒãã³ãã«å ±åããå¿ èŠã¯ããŸããããŸããã ãããããªãã·ã§ã³ã¯ãã²ãŒã å ã®ããã€ãã³ãã§ãã€ãã³ããçºçããæ©èœããã®2ã3åã®ã³ã³ããŒãã³ãã«ã€ããŠéç¥ãããšãã«ãã³ãŒãå šäœã«æž¡ã£ãŠèŠã€ããããšã§ãã
次ã®ã¢ãããŒãã¯ããã®åé¡ã解決ããããšããŸãã
ã¢ãããŒã3. World AetherïŒã€ãã³ãã¢ã°ãªã²ãŒã¿ãŒïŒ
ç¹å¥ãªã³ã³ããŒãã³ããEventAggregatorããå°å ¥ããŸãããã®äž»ãªæ©èœã¯ãã²ãŒã ã§çºçããã€ãã³ãã®ãªã¹ããä¿åããããšã§ãã
ã²ãŒã å ã®ã€ãã³ãã¯ãä»ã®ã³ã³ããŒãã³ãã«èªåèªèº«ã«ãµãã¹ã¯ã©ã€ããããã®ã€ãã³ãã®çºçã®äºå®ãå ¬éããæ©äŒãæäŸããæ©èœã§ãã ã€ãã³ãæ©èœã®å®è£ ã¯ãéçºè ã«ãšã£ãŠå¥œã¿ã«å¿ããŠè¡ãããšãã§ããŸããæšæºèšèªãœãªã¥ãŒã·ã§ã³ã䜿çšããããç¬èªã®å®è£ ãäœæã§ããŸãã
éå»ã®äŸã®ã€ãã³ãã®åçŽãªå®è£ äŸïŒãŠãããã®æ»ã«ã€ããŠïŒïŒ
public class UnitDiedEvent { private readonly List<Action<Unit>> _callbacks = new List<Action<Unit>>(); public void Subscribe(Action<Unit> callback) { _callbacks.Add(callback); } public void Publish(Unit unit) { foreach (Action<Unit> callback in _callbacks) callback(unit); } }
ãã®ã€ãã³ãããEventAggregatorãã«è¿œå ããŸãã
public class EventAggregator { public static UnitDiedEvent UnitDied; }
ããã§ãåã®8è¡ã®äŸã®Dieé¢æ°ãåäžè¡é¢æ°ã«å€æãããŸãã é¢å¿ã®ãããã¹ãŠã®ã³ã³ããŒãã³ãã«å¯ŸããŠãŠããããæ»äº¡ããããšãå ±åããå¿ èŠã¯ãããŸããã ã€ãã³ãã®äºå®ãå ¬éããã ãã§ãã
private void Die() { EventAggregator.UnitDied.Publish(this); }
ãŸãããã®ã€ãã³ãã«é¢å¿ã®ããã³ã³ããŒãã³ãã¯ã次ã®ããã«å¿çã§ããŸãïŒããšãã°ãåŸç¹ã®æ°ãæ åœãããããŒãžã£ãŒïŒã
public class ScoresManager : MonoBehaviour { public int Scores; public void Awake() { EventAggregator.UnitDied.Subscribe(OnUnitDied); } private void OnUnitDied(Unit unit) { Scores += CalculateScores(unit); } }
Awakeé¢æ°ã§ã¯ããããŒãžã£ãŒã¯ã€ãã³ãã«ãµãã¹ã¯ã©ã€ããããã®ã€ãã³ãã®åŠçãæ åœããããªã²ãŒããæž¡ããŸãã ã€ãã³ããã³ãã©ãŒèªäœã¯ãæ»äº¡ãããŠãããã®ã€ã³ã¹ã¿ã³ã¹ããã©ã¡ãŒã¿ãŒãšããŠåãåãããã®ãŠãããã®ã¿ã€ãã«å¿ããŠãã€ã³ãæ°ãè¿œå ããŸãã
åæ§ã«ããŠãããã®æ»äº¡ã€ãã³ãã«é¢å¿ãããä»ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã¯ãã€ãã³ããçºçãããšãã«ãµãã¹ã¯ã©ã€ãããŠåŠçã§ããŸãã
ãã®çµæãåã³ã³ããŒãã³ããäºããç¥ã£ãŠããå Žåãã³ã³ããŒãã³ãéã®æ¥ç¶ã®å³ã¯ãã³ã³ããŒãã³ããã²ãŒã ã§çºçããã€ãã³ãïŒããããé¢å¿ã®ããã€ãã³ãã«ã€ããŠã®ã¿ïŒãç¥ã£ãŠãããšãã«å³ã«å€ãããŸããããããã®ã€ãã³ããã©ãããæ¥ããã¯æ°ã«ããŸããã æ°ããã°ã©ãã¯æ¬¡ã®ããã«ãªããŸãã
ç§ã¯å¥ã®è§£éã倧奜ãã§ãããEventAggregatorãé·æ¹åœ¢ããã¹ãŠã®æ¹åã«äŒžã³ãããèªäœã®å åŽã«ããä»ã®ãã¹ãŠã®é·æ¹åœ¢ããã£ããã£ããŠãäžçã®å¢çã«ãªã£ããšæ³åããŠãã ããã ç§ã®é ã®äžã§ããã®å³ã§ã¯ãEventAggregatorã¯ãŸã£ãããããŸããã ãEventAggregatorãã¯åãªãã²ãŒã ã®äžçã§ãããäžçš®ã®ãã²ãŒã ãããŒããã£ã¹ããã§ãããã²ãŒã ã®ããŸããŸãªéšåããHey peopleïŒ ãã®ãããªéšéã¯æ»ã«ãŸããïŒããããŠèª°ããæŸéãèããŠãããèããåºæ¥äºã®ã©ããã圌ãã«èå³ããããªãã圌ãã¯ããã«åå¿ããŸãã ãããã£ãŠãæ¥ç¶ã¯ãªããåã³ã³ããŒãã³ãã¯ç¬ç«ããŠããŸãã
ç§ãã³ã³ããŒãã³ãã§ãããäœããã®ã€ãã³ãã®çºè¡ãæ åœããŠããå Žåãç§ã¯ãããæ»ãã ããšããããã¬ãã«ãç²åŸããããšãã·ã§ã«ãæŠè»ã«åœãã£ãããšãå«ãã§ããŸãã ãããŠã誰ãããããæ°ã«ãããã©ããã¯æ°ã«ããŸããã ãããããã®ã€ãã³ãã誰ãèããŠããªãããä»ã®äœçŸãã®ãªããžã§ã¯ãããµãã¹ã¯ã©ã€ããããŠããå¯èœæ§ããããŸãã ç§ã¯ãã€ãã³ãã®èè ãšããŠã1ã°ã©ã ã«ã€ããŠã¯æ°ã«ããŸããããããã«ã€ããŠã¯äœãç¥ããŸããããç¥ããããããŸããã
ãã®ã¢ãããŒãã«ãããå€ãæ©èœãå€æŽããã«æ°ããæ©èœãç°¡åã«å°å ¥ã§ããŸãã å®æããã²ãŒã ã«ã¢ããŒãã¡ã³ãã·ã¹ãã ãè¿œå ããããšã«ãããšããŸãã éæã·ã¹ãã ã®æ°ããã³ã³ããŒãã³ããäœæããé¢å¿ã®ãããã¹ãŠã®ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããŸãã ä»ã®ã³ãŒãã®å€æŽã¯ãããŸããã ä»ã®ã³ã³ããŒãã³ãã«ç®ãéãå¿ èŠã¯ãããŸããããããããã¢ããŒãã¡ã³ãã·ã¹ãã ãåŒã³åºããŠã圌女ã«èšã£ãŠãã ãããç§ã®ã€ãã³ããã«ãŠã³ãããŠãã ããã ããã«ãäžçã§ã€ãã³ããå ¬éãããã¹ãŠã®äººã¯ãéæã·ã¹ãã ã«ã€ããŠãããã®ååšã®äºå®ã«ã€ããŠãäœãç¥ããŸããã
çºèš
ä»ã®ã³ãŒãã¯å€ãããªããšèšã£ãŠããã¡ããç§ã¯å°ãäžèª å®ã§ãã ã¢ããŒãã¡ã³ãã·ã¹ãã ã¯ã以åã¯ã²ãŒã ã«å ¬éãããŠããªãã£ãã€ãã³ãã«é¢å¿ãããããšãå€æããå ŽåããããŸãã ãã®å Žåãã©ã®æ°ããã€ãã³ããã²ãŒã ã«è¿œå ãã誰ãããããå ¬éãããã決å®ããå¿ èŠããããŸãã ããããçæ³çãªã²ãŒã ã§ã¯ãèãããããã¹ãŠã®ã€ãã³ãããã§ã«ããã«ããããšãŒãã«ã¯ãããã§ãã£ã±ãã«ãªããŸãã
é·æ
-ã³ã³ããŒãã³ãã¯æ¥ç¶ãããŠããŸãããã€ãã³ããå ¬éããã ãã§ååã§ãããèå³ã®ãã人ã¯é¢ä¿ãããŸããã
-ã³ã³ããŒãã³ãã¯æ¥ç¶ãããŠããŸãããå¿ èŠãªã€ãã³ãããµãã¹ã¯ã©ã€ãããã ãã§ãã
-æ¢åã®æ©èœãå€æŽããã«åã ã®ã¢ãžã¥ãŒã«ãè¿œå ã§ããŸãã
çæ
-æ°ããã€ãã³ãã絶ãã説æããäžçã«è¿œå ããå¿ èŠããããŸãã
-æ©èœååæ§ã®éåã
æåŸã®ãã€ãã¹ã詳现ã«æ€èšãã
MethodAã¡ãœãããåŒã³åºãããObjectAãªããžã§ã¯ãããããšããŸãã MethodAã¡ãœããã¯3ã€ã®ã¹ãããã§æ§æããããããã®ã¹ããããé 次å®è¡ããä»ã®3ã€ã®ã¡ãœããïŒMethodA1ãMethodA2ãããã³MethodA3ïŒèªäœãåŒã³åºããŸãã 2çªç®ã®ã¡ãœããMethodA2ã§ã¯ãã€ãã³ããå ¬éãããŸãã ãããŠãããã§æ¬¡ã®ããšãèµ·ãããŸãïŒãã®ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããŠãããã¹ãŠã®äººã¯ããããåŠçãå§ããç¬èªã®äœããã®ããžãã¯ãå®è¡ããŸãã ãã®ããžãã¯ã§ã¯ãä»ã®ã€ãã³ãã®çºè¡ãçºçããå¯èœæ§ãããããã®åŠçã¯æ°ããã€ãã³ãã®çºè¡ãªã©ã«ãã€ãªããå¯èœæ§ããããŸãã å Žåã«ãã£ãŠã¯ãåºçç©ãåå¿ã®ããªãŒãéåžžã«å€§ãããªãããšããããŸãã ãã®ãããªé·ããã§ãŒã³ã¯ããããã°ãéåžžã«å°é£ã§ãã
ãã ããããã§çºçããå¯èœæ§ã®ããææªã®åé¡ã¯ããã§ãŒã³ã®ãã©ã³ãã®1ã€ããObjectAãã«æ»ããä»ã®MethodBã¡ãœãããåŒã³åºããŠã€ãã³ãã®åŠçãéå§ããå Žåã§ãã MethodAã¡ãœããã¯ã2çªç®ã®ã¹ãããã§äžæãããç¡å¹ãªç¶æ ãå«ãŸããŠãããããMethodAã¡ãœããã¯ãŸã ãã¹ãŠã®ã¹ããããå®äºããŠããªãããšãããããŸãïŒã¹ããã1ããã³2ã§ã¯ããªããžã§ã¯ãã®ç¶æ ãå€æŽããŸããããã¹ããã3ããã®æåŸã®å€æŽã¯ãŸã å®äºããŠããŸããå®äºïŒãšåæã«ãåããªããžã§ã¯ãã§ãMethodBãã®å®è¡ãéå§ããããã®ç¡å¹ãªç¶æ ã«ãªããŸãã ãã®ãããªç¶æ³ã¯ãšã©ãŒãåŒãèµ·ããããã£ããããã®ãéåžžã«é£ãããããžãã¯ããããè¡ãå¿ èŠããªããåé¿ãããè¿œå ã®è€éããå°å ¥ããå Žåãã¡ãœããåŒã³åºããšã€ãã³ãã®çºè¡ã®é åºãå¶åŸ¡ããå¿ èŠããããšããäºå®ã«ã€ãªãããŸãã
解決ç
説æããåé¡ã解決ããããšã¯é£ãããããŸãããã€ãã³ãã«é 延åå¿ã®æ©èœãè¿œå ããã ãã§ãã ãã®ãããªæ©èœã®ç°¡åãªå®è£ ãšããŠãçºçããã€ãã³ããè¿œå ãããªããžããªãäœæã§ããŸãã ã€ãã³ããçºçããŠããããã«å®è¡ããã®ã§ã¯ãªããåã«èªå® ã®ã©ããã«ä¿åããŸãã ãŸããã²ãŒã å ã®äžéšã®ã³ã³ããŒãã³ãã®æ©èœå®è¡ã®åãæ¿ãæã«ïŒããšãã°ãUpdateã¡ãœããã§ïŒãçºçããã€ãã³ãã®ååšã確èªãããã®ãããªã€ãã³ããããå Žåã¯åŠçãå®è¡ããŸãã
ãããã£ãŠãMethodAã¡ãœããã®å®è¡äžããã®äžæã¯çºçããããã¹ãŠã®é¢ä¿è ã¯å ¬éãããã€ãã³ããç¹å¥ãªãªããžããªã«èªåèªèº«ã«æžãçããŸãã ãããŠããã¥ãŒãé¢å¿ã®ãããµãã¹ã¯ã©ã€ããŒã«å°éããåŸã«ã®ã¿ãã¹ãã¬ãŒãžããã€ãã³ããååŸããŠåŠçããŸãã ãã®æç¹ã§ãMethodAå šäœãå®äºããObjectAã¯æå¹ãªç¶æ ã«ãªããŸãã
ãããã«
ã³ã³ãã¥ãŒã¿ãŒã²ãŒã ã¯ãäºãã«å¯æ¥ã«çžäºäœçšããå€æ°ã®ã³ã³ããŒãã³ããæã€è€éãªæ§é ã§ãã ãã®çžäºäœçšãæŽçããããã®å€ãã®ã¡ã«ããºã ãèããããšãã§ããŸãããç§ã¯ã€ãã³ãã«åºã¥ããŠèª¬æããã¡ã«ããºã ã奜ã¿ãŸãã 誰ãããããæ°ã«å ¥ã£ãŠãããŠãç§ã®èšäºãæ確ã«ãªãã圹ã«ç«ã€ããšãé¡ã£ãŠããŸãã