ãšã³ããªãŒ
å¹³åçãª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ã¯æå¹ãªç¶æ
ã«ãªããŸãã
ãããã«
ã³ã³ãã¥ãŒã¿ãŒã²ãŒã ã¯ãäºãã«å¯æ¥ã«çžäºäœçšãã倿°ã®ã³ã³ããŒãã³ããæã€è€éãªæ§é ã§ãã ãã®çžäºäœçšãæŽçããããã®å€ãã®ã¡ã«ããºã ãèããããšãã§ããŸãããç§ã¯ã€ãã³ãã«åºã¥ããŠèª¬æããã¡ã«ããºã ã奜ã¿ãŸãã 誰ãããããæ°ã«å
¥ã£ãŠãããŠãç§ã®èšäºãæç¢ºã«ãªãã圹ã«ç«ã€ããšãé¡ã£ãŠããŸãã