ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2025ǯ07·î05Æü(ÅÚ) 12:48:48ÍúÎò
¡¡¥¿¥¯¥Æ¥£¥«¥ë¥Ð¥È¥ë(¥·¥ß¥å¥ì¡¼¥·¥ç¥ó)¥²¡¼¥à³«È¯¤Ë¤ª¤¤¤Æ¡¢¡Ö°Üư¥¿¥¤¥×¡×¤ò½ÀÆð¤Ë´ÉÍý¤·¤¿¤¤¤È¤¤¤¦Í×˾¤ÏÈó¾ï¤Ë¿¤¤¤È»×¤¤¤Þ¤¹¡£
¥¿¥¤¥ë¥Þ¥Ã¥×(Tilemap)¤òÍøÍѤ·¤¿¼ÂÁõ¤Ë¤â¤ª¤¤¤Æ¤â¡¢¤¤Ã¤ÈƱ¤¸Çº¤ß¤¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
¡¡¤¿¤È¤¨¤Ð¡¢Êâʼ¡¢µ³Ê¼¡¢Èô¹Ôʼ¤Ê¤É¤Î¡Öʼ¼ï¡×¤Ë¤è¤ë¤â¤Î¡¢¤¢¤ë¤¤¤Ï·ÚÊâ¡¢ÆßÊâ¡¢Èô¹Ô¤Ê¤É¤Î¡ÖÊâ¹Ô¥¿¥¤¥×¡×¤Ë¤è¤ë¤â¤Î¤Ê¤É¡¢¥²¡¼¥àÆâÍÆ¤Ë¤è¤êÍÍ¡¹¤Ê¡Ö°Üư¥¿¥¤¥×¡×¤¬¤¢¤ë¤È»×¤¤¤Þ¤¹¡£
²Ã¤¨¤ÆÃÏ·Á¤Î±Æ¶Á¤ò¼õ¤±¤ë¤«¤É¤¦¤«¤Ç½èÍý¤¬ÊѤï¤ë(°ÜưÈϰϤ¬ÊѤï¤ë)¤¿¤á¡¢¤½¤ì¤¾¤ì¤Ë±þ¤¸¤¿°Üư¥í¥¸¥Ã¥¯¤òÍѰդ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
Î㤨¤Ð¡¢¿åÊդˤϿ¯Æþ¤Ç¤¤Ê¤¤Ê¼¼ï¤¬¤¢¤ë¡¢»³¤òÄ̲᤹¤ë¤Ë¤Ï°Üư¥³¥¹¥È¤¬Â¿¤¯¤«¤«¤ëʼ¼ï¤¬¤¢¤ë¡¢¤È¤¤¤Ã¤¿¥±¡¼¥¹¤Ç¤¹¡£
¡¡¤³¤Î¤è¤¦¤ÊÀ߷פˤª¤¤¤Æ¤Ï¡¢enum ¤È switch ʸ¤Ë¤è¤ëʬ´ô¤Ë¤è¤ë¼ÂÁõ¤¬Â¿¤¤¤«¤È»×¤¤¤Þ¤¹¡£
¡¡Ëܵ»ö¤Ç¤ÏÂå¤ï¤ê¤Ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍѤ¤¤¿³ÈÄ¥À¤Î¹â¤¤¼ÂÁõ¤È¡¢¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤ò³èÍѤ·¤Æ·¿¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òưŪ¤ËÀ¸À®¤¹¤ëÊýË¡(¥Õ¥¡¥¯¥È¥ê¡¼¥Ñ¥¿¡¼¥ó(Simple Factory))¤ò¾Ò²ð¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢switch ʸ¤ò»È¤ï¤Ê¤¤¡¢Êѹ¹¤Ë¶¯¤¤À߷פ¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤³¤Îµ»ö¤Ç¤Ï¡¢¥¿¥¤¥ë¥Þ¥Ã¥×¤òÍøÍѤ¹¤ëÁ°Äó¤Ç¡¢°Üư¥¿¥¤¥×¤Ïʼ¼ï¤ò¥Ù¡¼¥¹¤Ë¿Ê¤á¤Æ¤¤¤¤Þ¤¹¡£
¡¡¤Þ¤ºÊ¼¼ï¤Ë¤Ä¤¤¤Æ¡¢MoveTypeEnum ¤È¤¤¤¦ enum ·¿¤òÍѰդ·¤Æ¤ª¤¤Þ¤¹¡£Ê¼¼ï¤¬Áý¤¨¤¿ºÝ¤Ë¤ÏÎóµó»Ò¤ÎÄɲäò¹Ô¤¤¤Þ¤¹¡£
¤½¤ì¤ò CharaData ¥¯¥é¥¹Æâ¤Ë MoveTypeEnum ¤È¤¤¤¦ enum ·¿¤ÎÊÑ¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤ë¤È¤·¤Þ¤¹¡£
MoveTypeEnum.cs
/// <summary>
/// ʼ¼ï¤Î¼ïÎà
/// </summary>
public enum MoveTypeEnum {
Infantry, // Êâʼ
Cavalry, // µ³Ê¼
Flying // Èô¹Ôʼ
¡¡¡¡// TODO ʼ¼ï¤¬Áý¤¨¤¿¤ê¸º¤Ã¤¿¤ê¤·¤¿¤éÄɲᦽ¤Àµ¤¹¤ë
}
CharaData.cs(È´¿è)
/// <summary>
/// ¥¥ã¥é¤Î¥Ç¡¼¥¿
/// </summary>
using System.Collections.Generic;
[System.Serializable]
public class CharaData {
public int charaId;
public int movePower; // °ÜưÎÏ
public string name;
public MoveTypeEnum moveType; // °Üư¥¿¥¤¥×
}
¡¡¤µ¤ÆÊ¼¼ï¤´¤È¤Ë°Û¤Ê¤ë°Üư¥ë¡¼¥ë¤È¤·¤Æ¡¢Ê¼¼ï¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Ê°ã¤¤¤¬¤¢¤ë¤È¤·¤Þ¤¹¡£
¡ã²¾¤ÎÀßÄê¡ä
¡¡¡¦Êâʼ¡§»³¤ÏÄ̤ì¤Ê¤¤ ¡¡¡¦µ³Ê¼¡§¿¹¤Ç°Üư¥³¥¹¥È¤¬¾å¤¬¤ë ¡¡¡¦Èô¹Ôʼ¡§¤¹¤Ù¤Æ¤ÎÃÏ·Á¤ò̵»ë¤·¤Æ°Üư¤Ç¤¤ë
¡¡¤³¤Á¤é¤ÎÍ×·ï¤òËþ¤¿¤¹¤¿¤á¡¢switch ʸ¤È enum ¤òÁȤ߹ç¤ï¤»¤¿ÊýË¡¤Î¼ÂÁõÎã¤Ç¤¹¡£
// ¥¥ã¥é¤Î°Üư¥¿¥¤¥×¤ò¸«¤ÆÈ½Äê
switch (charaData.moveType) {
// Êâʼ¤Î¾ì¹ç
case MoveTypeEnum.Infantry:
¡¡¡¡¡¡¡¡// Êâʼ¤Î°Üư²Äǽ¤Ê¥¿¥¤¥ë¤ä¡¢°Üư¥³¥¹¥È¤ò»»½Ð(»³¤ÏÄ̤ì¤Ê¤¤)
break;
// µ³Ê¼¤Î¾ì¹ç
¡¡¡¡case MoveTypeEnum.Cavalry:
¡¡¡¡¡¡¡¡// µ³Ê¼¤Î°Üư²Äǽ¤Ê¥¿¥¤¥ë¤ä¡¢°Üư¥³¥¹¥È¤ò»»½Ð(¿¹¤Ç°Üư¥³¥¹¥È¤¬¾å¤¬¤ë)
break;
¡¡¡¡// Èô¹Ôʼ¤Î¾ì¹ç
case MoveType.Flying:
¡¡¡¡¡¡¡¡// Èô¹Ôʼ¤Î°Üư²Äǽ¤Ê¥¿¥¤¥ë¤ä¡¢°Üư¥³¥¹¥È¤ò»»½Ð(¤¹¤Ù¤Æ¤ÎÃÏ·Á¤ò̵»ë¤·¤Æ°Üư¤Ç¤¤ë)
break;
// TODO ¤â¤·¤â°Üư¥¿¥¤¥×¤¬Äɲ䵤줿¤é¡¢¤³¤³¤ËÄɲ䷤Ƥ¤¤¯
}
¡¡¤³¤Î¤è¤¦¤Ë enum ¤È switch ¤ò»È¤Ã¤¿¾ì¹ç¡¢¿·¤·¤¤°Üư¥¿¥¤¥×¤ÎÄɲᦺï½ü¤Î¤¿¤Ó¤Ë¡¢switchʸ(·×»»¥í¥¸¥Ã¥¯)¤ò½¤Àµ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¡¡¤Þ¤¿¤³¤ì¤Ï»Äǰ¤Ê¤¬¤é¡Ö¥ª¡¼¥×¥ó/¥¯¥í¡¼¥º¥É¸¶Â§¡×¤ËÈ¿¤·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤Þ¤¹¡£¡Ê¥³¡¼¥É¤Ï³ÈÄ¥¤Ë³«¤«¤ì¡¢½¤Àµ¤ËÊĤ¸¤Æ¤¤¤ë¤Ù¤¡Ë
¡¡¤³¤¦¤¤¤Ã¤¿¥±¡¼¥¹¤Ë¤ª¤¤¤Æ¤Ï¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò³èÍѤ¹¤ë¤³¤È¤Ç¡¢³ÈÄ¥À¤òÊݤÁ¤Ä¤Ä¡¢ÀÕ̳¤òʬΥ¤·¤¿·Á¤ÇÀ߷פȼÂÁõ¤ò¹Ô¤¦¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¡¡º£²ó¤Ï IMoveType ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òºîÀ®¤·¡¢£²¤Ä¤Î¥á¥½¥Ã¥É¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿¤³¤³¤Ç¤Ï¥¿¥¤¥ë¥Þ¥Ã¥×ÍѤΥ¯¥é¥¹¤È¤·¤Æ¡¢Ê̤ε»ö¤Ë¤¢¤ë AdvancedTile ¥¯¥é¥¹¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
¡¡¡¡¢ª¡¡Tilemap ¤Î°Üư¥³¥¹¥È´ÉÍýÊýË¡Îã
IMoveType.cs
using UnityEngine.Tilemaps;
/// <summary>
/// ³ÆÊ¼¼ï¤Î°Üư¥¿¥¤¥×¤¬¼ÂÁõ¤¹¤ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¡£¥¿¥¤¥ë¤¬°Üư²Äǽ¤«¡¢°Üư¥³¥¹¥È¤ò¼èÆÀ¤Ç¤¤ë¡£
/// </summary>
public interface IMoveType {
/// <summary>
/// »ØÄ꥿¥¤¥ë¤Ë¿¯Æþ¤Ç¤¤ë¤«¤É¤¦¤«¤òÊÖ¤·¤Þ¤¹¡£
/// </summary>
/// <param name="tile">Âоݥ¿¥¤¥ë</param>
/// <returns>¿¯Æþ²Äǽ¤«</returns>
bool IsWalkable(TileBase tile);
/// <summary>
/// ¥¿¥¤¥ë¤Ë¿¯Æþ¤¹¤ëºÝ¤Î°Üư¥³¥¹¥È¤òÊÖ¤·¤Þ¤¹¡£
/// </summary>
/// <param name="tile">Âоݥ¿¥¤¥ë</param>
/// <returns>°Üư¥³¥¹¥È</returns>
int GetMoveCost(TileBase tile);
}
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤Ï¥á¥½¥Ã¥É¤ÎÆâÉô¼ÂÁõ¤Ï¹Ô¤¤¤Þ¤»¤ó¡£³Æ¥¯¥é¥¹¤Ë¤ª¤¤¤Æ¿¶¤ëÉñ¤¤¤òÊѤ¨¤ë·Á¤Ç½ñ¤¤Þ¤¹¡£
¡¡¤³¤Á¤é¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤ò¡¢°Üư¥¿¥¤¥×¤Î¿ô¤À¤±ºîÀ®¤·¤Æ¡¢¤½¤Á¤é¤Ë°Üư¥¿¥¤¥×¤´¤È¤Î½èÍý¤ò¼ÂÁõ¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢Êâʼ¤äÈô¹Ôʼ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤½¤ì¤¾¤ì¤Î¥¯¥é¥¹¤È¤·¤ÆÄêµÁ¤Ç¤¤Þ¤¹¡£
using UnityEngine.Tilemaps;
public class InfantryMoveType : IMoveType {
public bool IsWalkable(TileBase tile) {
¡¡¡¡¡¡¡¡// tile ÊÑ¿ô¤Î·¿¤¬ AdvancedTile ¥¯¥é¥¹¤Ç¤¢¤ë¾ì¹ç
if (tile is AdvancedTile advTile) {
// »³¤ÏÊâʼ¤ÏÄ̤ì¤Ê¤¤¡¢¤½¤ì°Ê³°¤ÏÄ̤ì¤ë
return advTile.terrainType != TerrainType.Mountain;
}
return false;
}
public int GetMoveCost(TileBase tile) {
¡¡¡¡¡¡¡¡// tile ÊÑ¿ô¤Î·¿¤¬ AdvancedTile ¥¯¥é¥¹¤Ç¤Ï¤Ê¤¤¾ì¹ç
¡¡¡¡¡¡¡¡if (tile is not AdvancedTile advTile) {
¡¡¡¡return 1;
¡¡¡¡¡¡ }
¡¡ return advTile.terrainType switch {
TerrainType.Plain => 1,
TerrainType.Water => 1,
TerrainType.Forest => 2,
TerrainType.Mountain => 999, // Ä̤ì¤Ê¤¤°·¤¤
_ => 1,
};
}
}
using UnityEngine.Tilemaps;
public class CavalryMoveType : IMoveType {
¡¡¡¡public bool IsWalkable(TileBase tile) {
¡¡¡¡¡¡¡¡// tile ÊÑ¿ô¤Î·¿¤¬ AdvancedTile ¥¯¥é¥¹¤Ç¤¢¤ë¾ì¹ç
¡¡¡¡if (tile is AdvancedTile advTile) {
¡¡¡¡// ¤É¤ÎÃÏ·Á¤âÄ̤ì¤ë
¡¡¡¡return true;
¡¡¡¡}
¡¡¡¡}
public int GetMoveCost(TileBase tile) {
¡¡¡¡¡¡¡¡// tile ÊÑ¿ô¤Î·¿¤¬ AdvancedTile ¥¯¥é¥¹¤Ç¤Ï¤Ê¤¤¾ì¹ç
¡¡¡¡¡¡¡¡if (tile is not AdvancedTile advTile) {
¡¡¡¡return 1;
¡¡¡¡¡¡ }
¡¡ return advTile.terrainType switch {
TerrainType.Plain => 1,
TerrainType.Water => 1,
TerrainType.Forest => 2,
TerrainType.Mountain => 1,
_ => 1,
};
}
}
¡¡¤³¤Á¤é¤Î¤ß°ú¿ô¤ò AdvancedTile ¤Ë¤·¤Æ¡¢½èÍýÆâÉô¤ò´Ê·é²½¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¤Û¤«¤Î MoveType ¤ÈƱ¤¸¤è¤¦¤Ë¤â½ñ¤±¤Þ¤¹¡£
FlyingMoveType.cs
public class FlyingMoveType : IMoveType {
public bool IsWalkable(AdvancedTile tile) => true; // Èô¹Ô¤Ï¤¹¤Ù¤ÆÄ̲á²Äǽ
public int GetMoveCost(AdvancedTile tile) => 1; // Èô¹Ô¤Ï¾ï¤Ë1¥³¥¹¥È
}
¡¡¤³¤Î¤è¤¦¤Ë¤·¤Æ MoveTypeEnum ¤ÎÎóµó»Ò¤Ë¹ç¤ï¤»¤¿·Á¤Ç¡¢IMoveType ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤òÍѰդ·¤Þ¤¹¡£
¡¡°Üư¥¿¥¤¥×¤Î³Æ¥¯¥é¥¹Ì¾¤Ï¡¢¡ÚMoveTypeEnum Æâ¤ÎÎóµó»Ò¤Î̾Á° ¡Ü MoveType¡Û ¤Î½ñ¼°¤Ç¹ç¤ï¤»¤Æ¤ª¤¤Þ¤¹¡£(MoveType ¤Ï¥¯¥é¥¹Ì¾¤È¹ç¤ï¤»¤ë¤¿¤á¤ËÉÕ¤±¤Æ¤¤¤Þ¤¹¡£)
¤³¤Î¤è¤¦¤Ë½ñ¼°¤òÅý°ì¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Îµ¡Ç½¤ò¹ç¤ï¤»¤ÆÍøÍѤ¹¤ë¤³¤È¤¬Íưפˤʤ뤿¤á¤Ç¤¹¡£
¡¡£±¡¥ÀÕ̳¤òʬ¤±¤é¤ì¤ë¡§ ¡¡¡¡¡¡¡¡¡¡Ê¼¼ï¤´¤È¤Î°Üư¥ë¡¼¥ë¤ò¡¢¥¥ã¥é¤ä¥Þ¥Í¡¼¥¸¥ã¡¼¤«¤éÆÈΩ¤·¤Æ´ÉÍý¤Ç¤¤ë¡£
¡¡£²¡¥Êѹ¹¤Ë¶¯¤¤¡§ ¡¡¡¡¡¡¡¡¡¡¿·¤·¤¤Ê¼¼ï¤òÄɲ䷤Ƥ⡢¾¤Î¥³¡¼¥É¤Ë¤Ï°ìÀÚ¼ê¤ò²Ã¤¨¤º¤ËºÑ¤à¡£
¡¡£³¡¥¥Æ¥¹¥È¤¬¤·¤ä¤¹¤¤¡§ ¡¡¡¡¡¡¡¡¡¡¤½¤ì¤¾¤ì¤Î°Üư¥í¥¸¥Ã¥¯¤À¤±¤ò¸ÄÊ̤˥ƥ¹¥È²Äǽ¡£
¡¡£´¡¥¥³¡¼¥É¤¬¸«¤ä¤¹¤¤¡§ ¡¡¡¡¡¡¡¡¡¡switchʸ¤¬ÉÔÍפˤʤꡢ¾ò·ïʬ´ô¤¬¸º¤Ã¤ÆÆÉ¤ß¤ä¤¹¤¯¤Ê¤ë¡£
¡¡¤³¤ÎÀ߷פǤϡ¢¿·¤·¤¤°Üư¥¿¥¤¥×¤¬Áý¤¨¤¿¾ì¹ç¤Ë¤Ï¥×¥í¥°¥é¥à¤ò½¤Àµ¤¹¤ë¤³¤È¤Ï¤»¤º¡¢
IMoveType ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤ò£±¤ÄÄɲ乤ì¤Ð³ÈÄ¥¤¬²Äǽ¤Ç¤¹¡£
¡¡¤Þ¤¿½èÍý¤Î½¤Àµ¤ò¹Ô¤¦¾ì¹ç¤Ë¤â³Æ¥¯¥é¥¹¤Î¤ß¤ÇºÑ¤à¤¿¤á¡¢½¤Àµ¤Ë¤è¤ë±Æ¶ÁÈϰϤòºÇ¾®¸Â¤ËÍÞ¤¨¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¡¡»ý¤¿¤»¤¿¤¤µ¤»ý¤Á¤Ï¤ï¤«¤ê¤Þ¤¹¤¬¡¢¤½¤ì¤Ï¡Öï¤Ë¤È¤Ã¤ÆÄ̤ì¤ë¤Î¤«¡©¡× ¤È¤¤¤¦Ì䤤¤ËÅú¤¨¤é¤ì¤Þ¤»¤ó¡£
¡¡Êâʼ¤Ë¤È¤Ã¤ÆÄ̤ì¤Ê¤¤¾ì½ê¤Ç¤â¡¢Èô¹Ôʼ¤Ï¼«Í³¤Ë°Üư¤Ç¤¤ë¤³¤È¤¬Â¿¤¤¤Ç¤·¤ç¤¦¡£
¤½¤Î¤¿¤á¡¢¥¿¥¤¥ëñÂΤǤÎȽÄê¤Ç¤Ï½ÀÆðÀ¤Ë·ç¤±¤ëÀ߷פˤʤê¤Þ¤¹¡£
¡Ö¤É¤Îʼ¼ï¤¬¤½¤Î¥¿¥¤¥ë¤òÄ̤ì¤ë¤«¡×¤È¤¤¤¦È½ÃǤϡ¢¥¿¥¤¥ë¤Ç¤Ï¤Ê¤¯¡¢Ê¼¼ï¡ÊIMoveType¡Ë¦¤¬»ý¤Ä¤Ù¤ÀÕ̳¤Ç¤¹¡£
¡¡¤è¤Ã¤Æ¡¢¤è¤ê¤è¤¤²ò·èÊýË¡¤È¤·¤Þ¤·¤Æ¤Ï¡¢Ä̹ÔȽÄê¤È¥³¥¹¥È¤Î¥í¥¸¥Ã¥¯¤ò¥¿¥¤¥ë¤«¤éÀÚ¤êÎ¥¤·¡¢Ê¼¼ï¦¡ÊIMoveType ¼ÂÁõ¥¯¥é¥¹¡Ë¤Ë»ý¤¿¤»¤ë¤³¤È¤Ç¡¢ÀÕǤ¤ÎʬΥ¤¬¤Ç¤¤Þ¤¹¡£
¡¡C# ¤Ë¤Ï¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤È¤¤¤¦µ¡Ç½¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î£±¤Ä¤Ë¡¢string ·¿¤Îʸ»úÎó¤ò¥¯¥é¥¹Ì¾(·¿Ì¾)¤ËÃÖ¤´¹¤¨¤Æ¡¢Æ±Ì¾¤Î·¿¾ðÊó¤¬¥×¥í¥¸¥§¥¯¥ÈÆâ¤Ë¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï
¥¤¥ó¥¹¥¿¥ó¥¹¤òưŪ¤ËÀ¸À®¤¹¤ë Activator.CreateInstance ¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£
¡¡º£²ó¤Î¤è¤¦¤Ëʼ¼ï¤ò enum(¤¢¤ë¤¤¤Ï string)¤È¤·¤Æ»ý¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¥¯¥é¥¹Ì¾¤«¤éưŪ¤Ë¥¤¥ó¥¹¥¿¥ó¥¹²½¤Ç¤¤Þ¤¹¡£
¡¡Î㤨¤Ð¡¢Cavalry ¤È¤¤¤¦ enum ¤ÎÎóµó»Ò¤ò string ·¿¤ËÃÖ¤´¹¤¨¤Æ¡¢¤½¤Î¤¢¤È¤Ë MoveType ¤ò¤¯¤Ã¤Ä¤±¤Þ¤¹¡£
¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢Àè¤Û¤ÉºîÀ®¤·¤¿¥¯¥é¥¹Ì¾¤ÈƱ¤¸ CavalryMoveType ¤È¤¤¤¦Ì¾Á°¤Îʸ»úÎó¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤³¤ì¤ò¡Ö¥¯¥é¥¹Ì¾(·¿Ì¾)¡×¤È¤·¤ÆÄ´¤Ù¤Æ¡¢Æ±¤¸Ì¾Á°¤Î¥¯¥é¥¹Ì¾¤¬Â¸ºß¤·¤Æ¤¤¤ë¤Ê¤é¡¢¤½¤ì¤ò CavalyMoveType ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤È¤·¤ÆÀ¸À®¤¹¤ë¡¢¤È¤¤¤¦½èÍý¤Ç¤¹¡£
using System;
using UnityEngine;
public static class MoveTypeFactory {
/// <summary>
/// °Üư¥¿¥¤¥×¤Ë±þ¤¸¤¿ MoveType ¤ÎÀ¸À®
/// </summary>
/// <param name="moveType"></param>
/// <returns></returns>
public static IMoveType Create(MoveTypeEnum moveType) {
// Enum ̾ + MoveType ¤Îʸ»úÎó¤òºîÀ®¤·¤Æ¡¢¥¯¥é¥¹Ì¾¤È¾È¹ç¤µ¤»¤ë
string className = $"{moveType}MoveType"; // ɬÍפ˱þ¤¸¤Æ NameSpace ¤òÄɲÃ
Type type = Type.GetType(className);
// type ¤¬ÆÃÄê¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹(IMoveType)¤ò´Þ¤ó¤Ç¤¤¤ë¤«È½Äê(Type.IsSubclassOf ¤Ç¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÄ´¤Ù¤é¤ì¤Ê¤¤)
if (type != null && typeof(IMoveType).IsAssignableFrom(type)) {
// ¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤òÍøÍѤ·¤Æ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®
return Activator.CreateInstance(type) as IMoveType;
}
Debug.Log($"MoveType ¥¯¥é¥¹ {className} ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó");
return null;
}
}
¡¡CharaData ¥¯¥é¥¹¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë MoveTypeEnum ·¿¤Î¾ðÊó¤Ï¡¢¤¢¤¯¤Þ¤Ç¤â Enum ·¿¤Ç¤¢¤ê¡¢¤³¤ì¤ò¤½¤Î¤Þ¤Þ»È¤¦¤È¤Ê¤ë¤È¡¢ºÇ½é¤ËÄ󼨤·¤¿¤è¤¦¤Ê switch ʸ¤Ê¤É¤Ë¤è¤ëʬ´ô¤òºî¤é¤¶¤ë¤òÆÀ¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
¡¡¤½¤³¤Çº£²ó¤Ï¡¢¤³¤Î MoveTypeEnum ·¿¤Î¾ðÊó¤òÍøÍѤ·¡¢»öÁ°¤ËÍѰդ·¤Æ¤ª¤¤¤¿ IMoveType ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤È¤·¤Æ»È¤¨¤ë¤è¤¦¤Ë½èÍý¤·¤Æ¤¤¤ë¤Î¤¬¡¢¾åµ¤Î¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤ò³èÍѤ·¤¿½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤³¤¦¤¹¤ë¤³¤È¤Ç¡¢CharaData ¤Ë¤Ï¡¢MoveTypeEnum ·¿¤Ë±þ¤¸¤¿°Üư¥¿¥¤¥×¤Î¾ðÊó¤ò½èÍý¤Ç¤¤ë¥¯¥é¥¹¤¬Äɲ䵤ì¤Þ¤¹¤Î¤Ç¡¢
¤¢¤È¤Ï¤³¤Î¥¯¥é¥¹¤ò³èÍѤ·¤Æ¡¢Êâʼ¤Î°Üư¤Ç¤¢¤Ã¤¿¤ê¡¢µ³Ê¼¤Î°Üư¤Ç¤¢¤Ã¤¿¤ê¤òɽ¸½¤·¤Æ¤¤¤¯¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡Ãê¾ÝŪ¤ÊÀ߷פˤʤ뤿¤á¡¢Á´ÂÎÁü¤òÇİ®¤·¤Æ¤¤¤Ê¤¤¤È¤É¤³¤Ç²¿¤¬»È¤ï¤ì¤Æ¤¤¤ë¤«Ê¬¤«¤ê¤Å¤é¤¯¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¡¡½é´üÃʳ¬¤Ç¤Ï¼ÂÁõ¤¬Áý¤¨¤ÆÈÑ»¨¤Ë¸«¤¨¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¤¬¡¢³ÈÄ¥À¤ò°Õ¼±¤·¤¿À߷פˤÏÉԲķç¤Ç¤¹¡£
¡¡ÆÃ¤ËÌÀ³Î¤ÊÀÕ̳¤ò°Õ¼±¤·¤ÆÀ߷פ¹¤ì¤Ð¡¢Ä¹´üŪ¤Ë¥á¥ó¥Æ¥Ê¥ó¥¹À¤¬¹â¤¯¤Ê¤ê¤Þ¤¹¡£
¡¡Ê¸»úÎó¤Ç·¿¤ò»ØÄꤹ¤ë¤¿¤á¡¢·¿Ì¾¤ÎÊѹ¹¤ä¥ß¥¹¥¹¥Ú¥ë¤Ë¤è¤ê null ¤¬ÊÖ¤ë²ÄǽÀ(¼Â¹Ô»þ¥¨¥é¡¼¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ë¡Ê¡á¥¨¥Ç¥£¥¿¾å¤Ç¸¡ÃΤǤ¤Ê¤¤¡Ë)¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¤Þ¤¿ÉÑÈˤ˥ê¥Õ¥ì¥¯¥·¥ç¥ó¤ò»È¤¦¤È¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Ë°±Æ¶Á¤òµÚ¤Ü¤¹¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
´ðËÜŪ¤Ë¤Ï½é´ü²½»þ¤À¤±¤Ë»ÈÍѤ·¡¢°Ê¸å¤Ï¥¥ã¥Ã¥·¥å¤·¤Æ»È¤¤²ó¤·¤Þ¤·¤ç¤¦¡£
º£²ó¤Î¥±¡¼¥¹¤Ç¤Ï½é´ü²½»þ¤Î¤ß¤Ç¤¹¤Î¤Ç¡¢ÆÃ¤ËÌäÂꤢ¤ê¤Þ¤»¤ó¤¬¡¢¼Â¹Ô¿ô¤Ï¾¯¤Ê¤¤¤Ë±Û¤·¤¿¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¡¡¤Þ¤¿¥¢¥»¥ó¥Ö¥ê¤ä̾Á°¶õ´Ö¤Ê¤É¤Ë¤â¹Íθ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
º£²ó¤Ï̾Á°¶õ´Ö¤òÍøÍѤ·¤Æ¤¤¤Þ¤»¤ó¤¬¡¢Ì¾Á°¶õ´ÖÆâ¤Ë¥¯¥é¥¹¤¬Â¸ºß¤·¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢¡Ú̾Á°¶õ´Ö.¥¯¥é¥¹Ì¾¡Û¤Î½ñ¼°(´°Á´½¤¾þ»Ò̾)¤Ç»ØÄê¤ò¹Ô¤ï¤Ê¤¤¤È¥¯¥é¥¹¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¡£
¡¡CharaUnit ¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£
¡¡¤³¤Á¤é¤Ï¼ÂºÝ¤Ë²èÌ̤ËÇÛÃÖ¤µ¤ì¤ë¥¥ã¥éÍѤΥª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤¹¤ëÁ°Äó¤Î¥¯¥é¥¹¤Ç¤¹¡£¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï¥×¥ì¥Ï¥Ö¤ÇÍøÍѤ¹¤ë²ÄǽÀ¤â¹â¤¤¤Ç¤·¤ç¤¦¡£
CharaUnit.cs(È´¿è)
using System.Collections.Generic;
public class CharaUnit : MonoBehaviour {
public CharaData charaData;
public OwnerType ownerType;
public IMoveType moveType;
¡¡¡¡// ¥Æ¥¹¥ÈÍÑ
void Start() {
Initialize(charaData);
}
public void Initialize(CharaData charaData) {
this.charaData = charaData;
moveType = MoveTypeFactory.Create(charaData.moveType);
Debug.Log(moveType);
// TODO ¥¿¡¼¥ó¹ØÆÉ
// ¥×¥ì¥¤¥ä¡¼¤Î¥¿¡¼¥ó¤Ë¤Ê¤Ã¤¿¤é¥ê¥Õ¥ì¥Ã¥·¥å¤¹¤ë
}
}
¡¡¤³¤Á¤é¤ò¥¥ã¥éÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¡¢Start ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¥Æ¥¹¥È¤ò¹Ô¤¤¤Þ¤¹¡£
¼ÂºÝ¤Ë¤Ï Start ¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¡¢¤³¤Î¥×¥ì¥Ï¥Ö¤òÀ¸À®¤·¡¢¤½¤Î¸å Initialize ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¡¢¤È¤¤¤¦½èÍý¤Îή¤ì¤Ë¤Ê¤ë¤È»×¤¤¤Þ¤¹¡£
¡¡CharaData ¤Î¾ðÊó¤Ï¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ÇÀßÄê²Äǽ¤Ç¤¹¤Î¤Ç¡¢MoveTypeEnum ·¿¤Î moveType ¤òǤ°Õ¤ÎÎóµó»Ò¤ËÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡¤¢¤È¤Ï¥²¡¼¥à¤ò¼Â¹Ô¤·¤Æ¡¢¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤òÍøÍѤ·¤Æ¡¢IMoveType ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤µ¤ì¤ë¤«¤ò³Îǧ¤·¤Þ¤¹¡£
¤¿¤È¤¨¤Ð¡¢Cavalry ¤òÀßÄꤷ¤Æ¤¤¤ë¤Ê¤é¡¢CavalryMoveType ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ÎÀ¸À®¤¬ÌÜɸ¤Ç¤¹¡£
¡¡Debug.Log ¥á¥½¥Ã¥É¤òµ½Ò¤·¤Æ¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢Console ¥Ó¥å¡¼¤ò³Îǧ¤·¡¢moveType ÊÑ¿ô¤Ç»ØÄꤷ¤¿Ì¾Á°¤ò»ý¤Ä¥¯¥é¥¹Ì¾¤¬É½¼¨¤µ¤ì¤ì¤Ð¡¢Ìµ»ö¤Ë¥¤¥ó¥¹¥¿¥ó¥¹¤ÎÀ¸À®¤¬À®¸ù¤Ç¤¹¡£
¡¡Î㤨¤Ð¥¿¥¤¥ë¥Þ¥Ã¥×¤ò»È¤Ã¤¿¥²¡¼¥à¤Ç¤¢¤ì¤Ð¡¢³Æ CharaUnit ¥¯¥é¥¹¤Î ¡Á MoveType ¥¯¥é¥¹¤Ë¥¢¥¯¥»¥¹¤¹¤ì¤Ð¡¢IsWalkable ¥á¥½¥Ã¥É¤Ë¤è¤ê°Üư¤Ç¤¤ë¥¿¥¤¥ë¤ò³Æ°Üư¥¿¥¤¥×¤´¤È¤ËȽÄê¤Ç¤¤Þ¤¹¤·¡¢
GetMoveCost ¥á¥½¥Ã¥É¤Ë¤è¤ê¡¢¥¿¥¤¥ë¤ÎÃÏ·Á¤Ë¹ç¤ï¤»¤¿°Üư¥¿¥¤¥×¤´¤È¤Î°Üư¥³¥¹¥È¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¡¡Ìµ»ö¤Ë¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Î½èÍý¤¬Æ°¤¤¤Æ MoveType ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬À¸À®¤µ¤ì¤¿¤é¡¢¼¡¤Ï MoveTypeFactory ¥¯¥é¥¹¤ò²þÎɤ·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¡¡¸½ºß¤Î¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Î½èÍý¤Ï¡¢CharaUnit 1ÂΤˤĤ¡¢£±¤Ä¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥²¡¼¥àÆâ¤Ë CharaUnit ¤¬20ÂÎÀ¸À®¤µ¤ì¤ì¤Ð¡¢Æ±¤¸¿ô¤À¤±¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤¬¼Â¹Ô¤µ¤ì¤Æ¡¢20¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬À¸À®¤µ¤ì¤ë»ÅÁȤߤǤ¹¡£
¡¡¤Ç¤¹¤¬¡¢º£²ó¤Î¾ì¹ç¡¢¤½¤ì¤¾¤ì¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¥¹¥Æ¡¼¥È¡ÊÆâÉô¾õÂ֡ˤò»ý¤¿¤Ê¤¤¥¯¥é¥¹¤Ç¤¹¡£
°Üư²Äǽ¤«¤É¤¦¤«¤ä¥³¥¹¥È¤Î»»½Ð¤Ï¡¢Ëè²óƱ¤¸¾ò·ï¤ÇƱ¤¸·ë²Ì¤¬½Ð¤ë½èÍý¤Ê¤Î¤Ç¡¢¤³¤¦¤¤¤Ã¤¿¥±¡¼¥¹¤Ç¤Ï¥·¥ó¥°¥ë¥È¥óŪ¤Ë¡¢Æ±¤¸¥¤¥ó¥¹¥¿¥ó¥¹¤ò²¿ÅÙ¤â»È¤¤²ó¤·¤¿Êý¤¬¸úΨŪ¤Ç¤¹¡£
¡¡¤Ä¤Þ¤ê¡¢CharaUnit ¤¬20ÂΤ¤¤¿¤È¤·¤Æ¤â¡¢MoveType ¤Î¥¯¥é¥¹¤Ï¸½ºß¤Î¤È¤³¤í3¼ïÎष¤«¤Ê¤¯¡¢¤Þ¤¿½èÍý¤Î·ë²Ì¤âƱ¤¸¤Ë¤Ê¤ë(¸ÄÊÌ¤Ë Hp ¤¬°Û¤Ê¤ë¤È¤¤¤Ã¤¿ÀßÄêÃͤ¬¤Ê¤¤)¤Î¤Ç¡¢
20¸Ä¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òºî¤ë¤Î¤Ï̵Â̤ʽèÍý¤Ê¤Î¤Ç¤Ï¤Ê¤¤¤«¡©¡¡¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
¡¡
¡¡¤½¤³¤Ç¡¢³Æ MoveType ¥¯¥é¥¹¤ò£±¤Ä¤º¤Ä¤À¤±¥¤¥ó¥¹¥¿¥ó¥¹²½¤·¤Æ¡¢¤½¤ì¤òºÆÍøÍѤ¹¤ëÊýË¡¤Ë½¤Àµ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¡¡¤Þ¤º Dictionary ¤ò¿·¤·¤¯Àë¸À¤·¡¢enum ¤ÎÎóµó»Ò(Key)¤ÈÂбþ¤¹¤ë¥¯¥é¥¹(Value)¤ò¥Þ¥Ã¥Ô¥ó¥°(´ØÏ¢ÉÕ¤±)¤Ç¤¤ë¤è¤¦¤Ë¤·¤Æ¤ª¤¤Þ¤¹¡£
Î㤨¤Ð¡¢Flying(enum) ¤È FlyingMoveType(IMoveType ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹) ¤¬£±¥»¥Ã¥È¤Ë¤Ê¤Ã¤Æ¤¤¤ë·Á¤Ç¤¹¡£
¤³¤¦¤¤¤Ã¤¿·Á¤Ë¤Ê¤Ã¤Æ¤¤¤ë1¤Þ¤È¤Þ¤ê¤ò¥Þ¥Ã¥Ô¥ó¥°¤È¸Æ¤Ó¤Þ¤¹¡£
¡¡¤³¤ì¤ò¥²¡¼¥à³«»Ï»þ¤Ë£±²ó¤À¤±½èÍý¤·¤¿¤¤¤Î¤Ç¡¢¿·¤·¤¯¥³¥ó¥¹¥È¥é¥¯¥¿¤òºîÀ®¤·¡¢¤½¤Î½é´ü²½½èÍýÆâ¤ÇÎóµó»Ò¤Î¿ô¤À¤±·«¤êÊÖ¤·¤Æ¡¢ºÇ½é¤Ë¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®¤·¤Æ¤ª¤¤Þ¤¹¡£
¡¡¤¢¤È¤Ï¡¢CharaUnit ¤´¤È¤Ë¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Î»²¾È¤ò¤â¤é¤Ã¤Æ»È¤¦¤¿¤á¤Î¥á¥½¥Ã¥É¤òÍѰդ·¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤Ë²þÎɤ¹¤ë¤³¤È¤Ç¡¢Î㤨¤Ð¡¢CharaUnit ¤¬20ÂΤ¤¤ë¾ì¹ç¡¢º£¤Þ¤Ç¤Ç¤¢¤ì¤ÐƱ¤¸ MoveType ¤Ç¤¢¤Ã¤Æ¤â¥¤¥ó¥¹¥¿¥ó¥¹¤ò¤¹¤ë¤Î¤Ç·×20²ó¤Î¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤¬É¬ÍפǤ·¤¿¤¬¡¢
ºÇ½é¤Ë enum ¤ÎÎóµó»Ò¤Î¿ô¤À¤±¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Ç¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Æ¤ª¤¤¤Æ¡¢¤¢¤È¤Ï CharaUnit ¦¤Ë¤Ï»²¾È¤µ¤»¤ë¤À¤±¡¢¤È¤¤¤¦¹½Â¤¤ËÊѲ½¤·¤Þ¤·¤¿¡£
¡¡º£¸å¤Ï CharaUnit ¤Î¿ô¤Ë´Ø·¸¤Ê¤¯¡¢¤¹¤Ç¤Ë¥¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤ëɬÍ×¤Ê MoveType ¤òÅϤ¹¤À¤±¤ÇºÑ¤à¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢
¥²¡¼¥à³«»Ï»þ°Ê³°¤Ë¤Ï¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ëɬÍפâ¤Ê¤¯¤Ê¤ê¡¢ÂçÊѸúΨŪ¤Ê½èÍý¤¬½ÐÍè¾å¤¬¤ê¤Þ¤¹¡£
MoveTypeFactory.cs
using System;
using System.Collections.Generic;
using UnityEngine;
public static class MoveTypeFactory {
private static readonly Dictionary<MoveTypeEnum, IMoveType> _cache = new(); // enum ¤ÎÎóµó»Ò¤È¡¢Âбþ¤¹¤ë¥¯¥é¥¹¤ò¥Þ¥Ã¥Ô¥ó¥°¤·¤Æ¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤ò¥¥ã¥Ã¥·¥å¤·¤Æ¤ª¤¯
/// <summary>
/// ¥³¥ó¥¹¥È¥é¥¯¥¿
/// </summary>
static MoveTypeFactory() {
// ¤¹¤Ù¤Æ¤ÎÎóµó»Ò¤Î¿ô¤À¤±½èÍý¤¹¤ë
foreach (MoveTypeEnum moveType in Enum.GetValues(typeof(MoveTypeEnum))) {
// ¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤òÍøÍѤ·¤Æ¥¤¥ó¥¹¥¿¥ó¥¹ºîÀ®(¤¹¤Ç¤Ë¤¢¤ë Create ¥á¥½¥Ã¥É¤òÍøÍÑ)
var instance = Create(moveType);
// ºîÀ®¤Ç¤¤¿¾ì¹ç¤Î¤ß Dictionary ¤ËÄɲ䷤ƥ¥ã¥Ã¥·¥å¤·¤Æ¤ª¤¯
if (instance != null) {
_cache[moveType] = instance;
}
}
}
/// <summary>
/// ³°Éô¥¯¥é¥¹¤«¤éÍøÍÑ
/// ¥¥ã¥Ã¥·¥å¤«¤é³ºÅö¤¹¤ë IMoveType ¤ò¼èÆÀ
/// </summary>
/// <param name="moveType"></param>
/// <returns></returns>
public static IMoveType Get(MoveTypeEnum moveType) {
// ³ºÅö¤¹¤ë MoveType ¤¬Â¸ºß¤¹¤ë¤«¥Á¥§¥Ã¥¯¤·¡¢Â¸ºß¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤Î MoveType ¤Î»²¾È¤òÊÖ¤¹
if (_cache.TryGetValue(moveType, out var instance)) {
return instance;
}
Debug.Log($"MoveType {moveType} ¤Ï̤ÄêµÁ¤Ç¤¹");
return null;
}
/// <summary>
/// ¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Ç°Üư¥¿¥¤¥×¤Ë±þ¤¸¤¿ MoveType ¥¯¥é¥¹¤òÀ¸À®(³°Éô¤«¤é¤â»È¤¨¤ëÈÆÍѥ᥽¥Ã¥É)
/// </summary>
/// <param name="moveType"></param>
/// <returns></returns>
public static IMoveType Create(MoveTypeEnum moveType) {
// Enum ̾ + MoveType ¤Îʸ»úÎó¤òºîÀ®¤·¤Æ¡¢¥¯¥é¥¹Ì¾¤È¾È¹ç¤µ¤»¤ë
string className = $"{moveType}MoveType"; // ɬÍפ˱þ¤¸¤Æ NameSpace ¤òÄɲÃ
Type type = Type.GetType(className);
// type ¤¬ÆÃÄê¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹(IMoveType)¤ò´Þ¤ó¤Ç¤¤¤ë¤«È½Äê(Type.IsSubclassOf ¤Ç¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÄ´¤Ù¤é¤ì¤Ê¤¤)
if (type != null && typeof(IMoveType).IsAssignableFrom(type)) {
// ¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤òÍøÍѤ·¤Æ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®
return Activator.CreateInstance(type) as IMoveType;
}
Debug.Log($"MoveType ¥¯¥é¥¹ {className} ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó");
return null;
}
}
¡¡º£²ó¤Î¤è¤¦¤Ê·Á¤Ç¤Î¼ÂÁõ¤Ë²þÎɤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Î¥³¥¹¥Èºï¸º¤¬¹Ô¤¨¤Æ¤¤¤Þ¤¹¡£
¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Ï¼Â¹Ô»þ¤ËưŪ¤Ë·¿¾ðÊó¤ò¼èÆÀ¤·¤Æ¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®¤¹¤ë¤¿¤á¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¥³¥¹¥È¤¬¹â¤¤½èÍý¤Ç¤¹¡£
¡¡º£²ó¤Ï¥¥ã¥é¤Î½é´ü²½»þ¤Î¤ß¤Ç¤Ï¤¢¤ê¤Þ¤¹¤¬¡¢¤ä¤Ï¤ê²Äǽ¤Ê¸Â¤ê¡¢¾¯¤Ê¤¤½èÍý¿ô¤ÎÊý¤¬¤è¤¤¤Ç¤¹¡£
¡¡¡¦ºÇ½é¤Î°ìÅÙ¤À¤±¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤ÇÀ¸À®¤·¡¢ ¡¡¡¦¤¢¤È¤Ï Dictionary<MoveTypeEnum, IMoveType> ·Ðͳ¤Ç»È¤¤²ó¤¹(ºÆÍøÍÑ)
¡¡¥¤¥ó¥¹¥¿¥ó¥¹¤òºÆÍøÍѤµ¤»¤ë¤³¤È¤Ç¡¢ÂçÉý¤Ê¥³¥¹¥Èºï¸º¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¡¦¥Ç¥Ð¥Ã¥°¤Î¤·¤ä¤¹¤µ¤â¸þ¾å¤·¤Þ¤¹¡£
¤¹¤Ù¤Æ¤Î MoveType ¤¬ MoveTypeFactory ¤Ç´ÉÍý¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¤¿¤á¡¢
¡¡¡¦¤É¤³¤Ç²¿¤¬»È¤ï¤ì¤Æ¤¤¤ë¤«¤¬°ì¸µ´ÉÍý¤Ç¤¤ë ¡¡¡¦ÉÔÍ×¤Ê MoveType ¤ò¸«¤Ä¤±¤ä¤¹¤¤ ¡¡¡¦¿·¤·¤¤·¿¤ÎÄɲäˤ⶯¤¯¤Ê¤ë
¡¡¤³¤¦¤¤¤Ã¤¿¥á¥ê¥Ã¥È¤â¾å¤²¤é¤ì¤Þ¤¹¡£
¡¡¼¡¤Ë CharaUnit ¥¯¥é¥¹Â¦¤Î MoveTypeFactory ¤Ø¤Î¸Æ¤Ó½Ð¤·Ì¿Îá Create ¥á¥½¥Ã¥É¤«¤é Get ¥á¥½¥Ã¥É¤ËÃÖ¤´¹¤¨¤Þ¤¹¡£
CharaUnit.cs(È´¿è)
using System.Collections.Generic;
public class CharaUnit : MonoBehaviour {
public CharaData charaData;
public OwnerType ownerType;
public IMoveType moveType;
¡¡¡¡// ¥Æ¥¹¥ÈÍÑ
void Start() {
Initialize(charaData);
}
public void Initialize(CharaData charaData) {
this.charaData = charaData;
//moveType = MoveTypeFactory.Create(charaData.moveType);
// ¤³¤Á¤é¤ËÃÖ¤´¹¤¨
moveType = MoveTypeFactory.Get(charaData.moveType);
Debug.Log(moveType);
// TODO ¥¿¡¼¥ó¹ØÆÉ
// ¥×¥ì¥¤¥ä¡¼¤Î¥¿¡¼¥ó¤Ë¤Ê¤Ã¤¿¤é¥ê¥Õ¥ì¥Ã¥·¥å¤¹¤ë
}
}
¡¡°Ê¾å¤Ç´°À®¤Ç¤¹¡£
¡¡¤³¤Á¤é¤ÇƱ¤¸¤è¤¦¤Ë¥²¡¼¥à¤ò¼Â¹Ô¤·¤Æ½èÍý¤¬Àµ¾ï¤Ëưºî¤¹¤ë¤«¤ò³Îǧ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¡¡ºÇ¸å¤ËÃí°ÕÅÀ¤Ç¤¹¡£
¡¡¤Þ¤ºÁ°Äó¤È¤·¤Æ¡¢IMoveType ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤¬¾õÂÖ¤òÊÝ»ý¤·¤Ê¤¤À߷פǤ¢¤ë¤³¤È¡Ê¡áºÆÍøÍѲÄǽ¤Ç¤¢¤ë¤³¤È¡Ë¡£
¥¯¥é¥¹¤¬ Hp ¤ä¹¶·âÎϤȤ¤¤Ã¤¿ÊÑ¿ô¤Ê¤É¤ò»ý¤Á¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤´¤È¤Ë¤½¤ÎÅÔÅÙÃͤ¬ÊѲ½¤·¤Æ¤·¤Þ¤¦¤È¡¢½èÍý·ë²Ì¤¬°Û¤Ê¤ë·ë²Ì¤È¤Ê¤ë¤¿¤á¡¢ºÆÍøÍѤ¬¤Ç¤¤Ê¤¤¾õÂ֤ˤʤê¤Þ¤¹¡£
¡¡¤â¤·¾Í衢ʼ¼ï¤´¤È¤Ë¥«¥¹¥¿¥Þ¥¤¥º²Äǽ¤Ê MoveType ¤òºî¤ë¾ì¹ç¡Ê¡á¾õÂÖ¤ò»ý¤Ä¾ì¹ç¡Ë¤Ï¡¢¤³¤ÎÊý¼°¤Ç¤ÏºÆÍøÍѤ¬¤Ç¤¤Þ¤»¤ó¡£
¤½¤Î¾ì¹ç¤ÏËè²ó new ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£(²þÎÉÁ°¤Î¤è¤¦¤Ë¡¢Ëè²ó Create ¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤òÍøÍѤ¹¤ë)
¡¡Ê£¿ô¥¹¥ì¥Ã¥É¤Ç»È¤¦¾ì¹ç¤Ï¥¹¥ì¥Ã¥É¥»¡¼¥ÕÀ߷פËÃí°Õ¤Ç¤¹¤¬¡¢´ðËÜŪ¤Ë¤Ï Unity¤ÎÄ̾ïÍÑÅӤǤÏÌäÂê¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¡¡³ÈÄ¥À¤ò°Õ¼±¤·¤¿À߷פò¤·¤¿¤¤Êý¤Ë¤È¤Ã¤Æ¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Ï¤È¤Æ¤â¶¯ÎϤÊÉð´ï¤Ë¤Ê¤ê¤Þ¤¹¡£
¥²¡¼¥à³«È¯¤Ë¤ª¤¤¤Æ¡Ö»ÅÍͤÎÄɲá¦Êѹ¹¡×¤¬ÉÑÈˤ˵¯¤³¤ë¾ìÌ̤Ǥϡ¢ÆÃ¤Ë°ÒÎϤòȯ´ø¤¹¤ë¹Í¤¨Êý¤Ç¤¹¡£
¡¡º£¸å¤Ï¡¢°Üư¤À¤±¤Ç¤Ê¤¯¹¶·â¤ä¥¹¥¥ë¤Ê¤É¤Ë¤â¤³¤Î¹Í¤¨Êý¤ò±þÍѤ·¤Æ¤¤¤¯¤³¤È¤Ç¡¢¥×¥í¥¸¥§¥¯¥ÈÁ´ÂΤγÈÄ¥À¤ò¤µ¤é¤Ë¹â¤á¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°




¥³¥á¥ó¥È¤ò¤«¤¯