Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

¡ß

¤Ï¤¸¤á¤Ë


¡¡C# 7 °Ê¹ß¡¢Ê£¿ô¤ÎÃͤòÊÖ¤·¤¿¤¤¾ìÌ̤Ǥϥ¿¥×¥ë (Tuple)¤¬¹­¤¯»È¤ï¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
¤¿¤À¤·¡¢¸½ºß¤Î C# ¤Ç¡Ö¥¿¥×¥ë¡×¤È¸À¤¦¤È¡¢¼ÂºÝ¤Ë¤ÏµìÍè¤Î System.Tuple ¥¯¥é¥¹¤Ç¤Ï¤Ê¤¯¡¢¹½Â¤ÂΤΠSystem.ValueTuple ¤ò»Ø¤·¤Þ¤¹¡£

¡¡Unity ¤Ê¤É IL2CPP ¤òÍѤ¤¤¿´Ä¶­¤Ç¤Ï¡¢¤³¤Î ValueTuple ¹½Â¤ÂÎ ¤Î°·¤¤Êý¤Ë¤è¤Ã¤Æ¤Ï¡¢»×¤ï¤Ì¡Ö̵¸Â¥ë¡¼¥×¡×¤ä¡Ö¥Õ¥ê¡¼¥º¡×¤¬È¯À¸¤¹¤ë¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¤³¤Îµ­»ö¤Ç¤Ï¡¢¼ÂºÝ¤ËÁø¶ø¤·¤¿¸½¾Ý¤ò¤â¤È¤Ë¡¢ValueTuple ¤ÎÍøÍÑ»þ¤ÎÃí°ÕÅÀ¡¢°ÂÁ´¤Ê»È¤¤Êý¤È²óÈòºö¤ò¾Ò²ð¤·¤Þ¤¹¡£


Tuple ¤È ValueTuple ¤Î°ã¤¤

·¿Ì¾Á°¶õ´Ö·¿¤Î¼ïÎ൭ˡÆÃħ
System.Tuple<T1, T2>System¥¯¥é¥¹Tuple.Create(1, "A")»²¾È·¿¡£Immutable¡£¥Õ¥£¡¼¥ë¥É̾¤Ï Item1, Item2
System.ValueTuple<T1, T2>System¹½Â¤ÂÎ(1, "A")ÃÍ·¿¡£·ÚÎ̤ǹ⮡£C# 7°Ê¹ß¤Îɸ½àµ­Ë¡

¡¡¤Ä¤Þ¤ê¡¢¸½ºß¤è¤¯»È¤¦ (int, string) ¤Î¤è¤¦¤Ê¥¿¥×¥ë¤Ï¡¢ValueTuple ¹½Â¤ÂΤǤ¹¡£

»²¹Í¥µ¥¤¥È
MicroSoft ¸ø¼°¥ê¥Õ¥¡¥ì¥ó¥¹
ValueTuple ¹½Â¤ÂÎ
https://learn.microsoft.com/ja-jp/dotnet/api/syste...


Ê£¿ô²ó¤ÎÌá¤êÃͤǤÎÌäÂêÎã


¡¡¥á¥½¥Ã¥É¤ÎÌá¤êÃͤ˥¿¥×¥ë¤òÍøÍѤ·¤¿¾ì¹ç¤ËȯÀ¸¤¹¤ëÌäÂê¤Ç¤¹¡£

// ¥á¥½¥Ã¥É¤ÎÌá¤êÃͤˤâÃí°Õ
public static List<(int, int)> GetRewardList(int count) {
    List<(int, int)> list = new();
    for (int i = 0; i < count; i++) {        
        list.Add(GetReward());  // ¢«¡¡­¡Unity IL2CPP ´Ä¶­²¼¤Ç¤Ï¤³¤³¤ÇÄä»ß¤¹¤ë¤³¤È¤¬¤¢¤ë
    }
    return list; // ¢« ­¢¤³¤³¤Ç¤âÄä»ß¡¦¥Õ¥ê¡¼¥º¤Î²ÄǽÀ­¤¢¤ê
}

// Ê£¿ô²ó¸Æ¤Ó½Ð¤µ¤ì¤ë ValueTuple ¤ÎÌá¤êÃÍ
public static (int itemId, int count) GetReward() {
    return (1001, 5);
}

¡¡ValueTuple ¹½Â¤ÂΤòÊ£¿ô²ó return ¤·¤ÆÀѤ߾夲¤ë·Á¤ä¡¢List ¤Î¤è¤¦¤Ê¥¸¥§¥Í¥ê¥Ã¥¯¹½Â¤¤¬¡¢IL2CPP ¥Ó¥ë¥É¤ä Unity Editor ¼Â¹Ô´Ä¶­¤ÇÉÔ°ÂÄê¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¤³¤ì¤Ï for ʸ¤ä List ¤òÍøÍѤ·¤Æ¤¤¤Ê¤¤¥±¡¼¥¹¤Ç¤â¡¢¥á¥½¥Ã¥É¤ÎÌá¤êÃͤòÊ£¿ô²óÍøÍѤ¹¤ë¥±¡¼¥¹¤Ç¤âȯÀ¸¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
Î㤨¤Ð HogeA ¥á¥½¥Ã¥É(Ìá¤êÃͤ¬¥¿¥×¥ë)¢ª HogeB ¥á¥½¥Ã¥É(Ìá¤êÃͤ¬¥¿¥×¥ë)¢ªHogeC ¥á¥½¥Ã¥É(Ìá¤êÃͤ¬¥¿¥×¥ë) ¤Î¤è¤¦¤Ê¡¢ºÆµ¢Åª¤Ê½èÍý¤Î¾ì¹ç¤Ç¤¹¡£


Âкö­¡¡§¥¯¥é¥¹¤òÄêµÁ¤·¤ÆÌ᤹


¡¡¥á¥½¥Ã¥É¤ÎÌá¤êÃͤ˥¿¥×¥ë¤òÍøÍѤ»¤º¡¢²¼µ­¤Î¤è¤¦¤ËÌá¤êÃÍÍѤ˥¯¥é¥¹¤òÍѰդ·¡¢¤½¤ì¤ò¥¤¥ó¥¹¥¿¥ó¥¹¤·¤ÆÌ᤹¤³¤È¤ÇÌäÂê¤ò²óÈò¤Ç¤­¤Þ¤¹¡£
¥¯¥é¥¹¤Ï»²¾È·¿¤Ê¤Î¤Ç¡¢IL2CPP¤Ç¤â°ÂÁ´¤Ë°·¤¨¤Þ¤¹¡£

/// <summary>
/// Ìá¤êÃÍÍѤΥ¯¥é¥¹
/// </summary>
[Sysytem.Serialize]
public class GachaReward {
    public int itemId;
    public int count;
}

// Ìá¤êÃͤ⥿¥×¥ë¤Î List ¤Ç¤Ï¤Ê¤¯¤Æ¥¯¥é¥¹¤Î List ¤ËÊѤ¨¤ë
public static List<GachaReward> GetRewardList(int count) {
    List<GachaReward> list = new();
    for (int i = 0; i < count; i++) {
        list.Add(GetReward());
    }
    return list;
}

// Ìá¤êÃͤò¥¯¥é¥¹¤ËÊѤ¨¤ë
public static GachaReward GetReward() {
    return new GachaReward { itemId = 1001, count = 5 };
}

¡¡¤³¤Î¤è¤¦¤Ë¥á¥½¥Ã¥É¤ÎÌá¤êÃͤò¥¯¥é¥¹¡Ê»²¾È·¿¡Ë¤Ë¤¹¤ë¤È IL2CPP ¤Î¹½Â¤ÂÎ¥³¥Ô¡¼¤òÈò¤±¤é¤ì¡¢°ÂÄꤷ¤ÆÆ°ºî¤·¤Þ¤¹¡£


Âкö­¢¡§ValueTuple¤ò»È¤¦¤Ê¤é¡Öñȯ¡×¤Þ¤Ç¤Ë¤¹¤ë


¡¡Ê£¿ô²ó¤ÎÌá¤êÃͤò·Ðͳ¤·¤Ê¤¤¾ì¹ç¤ä¡¢List<(int,int)> ¤ä Dictionary<T, (int, int)> ¤Î¤è¤¦¤Ê¥Í¥¹¥È¹½Â¤¤ÏÈò¤±¤ì¤Ð¡¢¥¿¥×¥ë¤âÌäÂê¤Ê¤¯ÍøÍѤǤ­¤Þ¤¹¡£

// ñȯ¤ÎValueTuple¤Ï°ÂÁ´
public static (int itemId, int count) GetSingleReward() {
    return (1001, 5);
}


LINQ ÊÑ´¹ (Select ¢ª ToList) ¤Ç¤ÎÌäÂêÎã


¡¡ÆÃÄê¾ò·ï²¼¡Ê¥¸¥§¥Í¥ê¥Ã¥¯¡ÜLINQ¡Ü°ìÉôºÇŬ²½¡Ë¤Ç¥á¥â¥ê¥¢¥¯¥»¥¹ÉÔÀ°¹ç¤òµ¯¤³¤¹¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£

List<GachaReward> rewards = GetRewardList(10);

// Unity ¤Ç̵¸Â¥ë¡¼¥×¡¿¥Õ¥ê¡¼¥º¤¹¤ë¤³¤È¤¬¤¢¤ë
List<(int itemId, int count)> tupleList = rewards.Select(r => (r.itemId, r.count)).ToList();

¡¡¤³¤Î .Select(...).ToList() ¤ÏÆâÉôŪ¤Ë ¥¤¥Æ¥ì¡¼¥¿¥¯¥é¥¹¡ÊMoveNext() ¤ò»ý¤Äƿ̾¹½Â¤ÂΡˤòÀ¸À®¤·¡¢¤½¤ÎÃæ¤ÇÂçÎ̤ΠValueTuple ¥³¥Ô¡¼¤òȯÀ¸¤µ¤»¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢IL2CPP ¤ÎºÇŬ²½¤È¤ÎÁȤ߹ç¤ï¤»¼¡Âè¤Ç¡¢¡Ö̵¸Â¥ë¡¼¥×¡×¡ÖUnity Editor ¤´¤È¥Õ¥ê¡¼¥º¡×¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£


²óÈòË¡¡§ÌÀ¼¨Åª¤Ë¥ë¡¼¥×¤ÇÊÑ´¹¤¹¤ë


¡¡²¼µ­¤ÎÊýË¡¤Ê¤é¡¢Ãæ´Ö¥¤¥Æ¥ì¡¼¥¿¤òÀ¸À®¤»¤º¡¢Ã±½ã¤Ê¥ë¡¼¥×¡Ü¹½Â¤ÂÎÀ¸À®¤À¤±¤ÇºÑ¤à¤¿¤á¡¢°ÂÁ´¤Ç°ÂÄꤷ¤Þ¤¹¡£

List<GachaReward> rewards = GetRewardList(10);

List<(int itemId, int count)> tupleList = new();

for (int i = 0; i < rewards.Count; i++) {
    var reward = rewards[i];   // var ¤Ï GachaReward ·¿
    tupleList.Add((reward.itemId, reward.count));  // ¤³¤³¤Ç¥¿¥×¥ë¤È¤·¤ÆÄɲÃ
}


¸¶°ø¤ÎÀ°Íý


¡¡¤³¤Î¸½¾Ý¤Î¸¶°ø¤Ç¤¹¤¬¡¢List<(int, int)> ¤Ï List<ValueTuple<int,int>> ¤ÈƱµÁ¤Ç¤¢¤ê¡¢¹½Â¤ÂΤΥꥹ¥È¤òÊÖ¤¹¤¿¤á¡¢Ìá¤êÃÍ»þ¤Ë¹½Â¤ÂÎÇÛÎó¤Î¥³¥Ô¡¼¤¬¹Ô¤ï¤ì¤Þ¤¹¡£
¤½¤ì¤¬¥Í¥¹¥È¤·¤¿¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·¤ä¡¢¥¸¥§¥Í¥ê¥Ã¥¯·Ðͳ¡ÊList<T>¡Ë¤Ë¤Ê¤ë¤È¡¢IL2CPP ¤Î¹½Â¤ÂÎ¥á¥â¥êÇÛÃÖºÇŬ²½¤¬ÇËþ¤·¤Æ¤·¤Þ¤¦¡©¤è¤¦¤Ç¤¹¡£

¡¡C#¡ÊMono¡Ë¾å¤Ç¤ÏÌäÂê¤Ê¤¤¤Ç¤¹¤¬¡¢IL2CPP ¤ä Burst ¥³¥ó¥Ñ¥¤¥é´Ä¶­¤À¤È¡Ö¥¹¥¿¥Ã¥¯¤ÎÀ°¹çÀ­¤¬Êø²õ ¢ª ¼Â¹ÔÄä»ß¡×¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤³¤ÎÌäÂê¤Ï Unity 2021¡Á2022¡¢6000 °Ê¹ß¤Ç¤â°ÍÁ³¤È¤·¤ÆÈ¯À¸Î㤬¤¢¤ê¤Þ¤¹¡£
ÆÃ¤ËÈ󯱴ü½èÍý (async/await, UniTask) ¤ä LINQ ¤ÈÊ»ÍѤ·¤¿ ValueTuple ¤Î¾ì¹ç¤Ë¸²Ãø¤Ç¤¹¡£


·ëÏÀ


¡¡ValueTuple ¤Ï·ÚÎ̤ÇÊØÍø¤Ç¤¹¤¬¡¢Unity ¤Ç¤Ï¹½Â¤ÂÎ¥³¥Ô¡¼¤ËÃí°Õ¤ò¤·¤Þ¤·¤ç¤¦¡£
LINQ ¤ä¥Í¥¹¥È¤µ¤ì¤¿ return ¤Ç»È¤¦¤È¡¢IL2CPP ¤¬Íî¤Á¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢É¬Íפ˱þ¤¸¤Æ¥¯¥é¥¹¤ËÃÖ¤­´¹¤¨¤ë¤Î¤¬°ÂÁ´¤ÊÂнèÊýË¡¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡°Ê¾å¤Ç¤¹¡£

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


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu



´ðÁÃ

µ»½Ñ/Ãμ±(¼ÂÁõÎã)

3D¥¢¥¯¥·¥ç¥ó¥²¡¼¥à

2D¤ª¤Ï¤¸¤­¥²¡¼¥à(ȯŸÊÔ)

2D¶¯À©²£¥¹¥¯¥í¡¼¥ë¥¢¥¯¥·¥ç¥ó(ȯŸÊÔ)

2D¥¿¥Ã¥×¥·¥å¡¼¥Æ¥£¥ó¥°(³ÈÄ¥ÊÔ)

¥ì¡¼¥¹¥²¡¼¥à(È´¿è)

2DÊüÃÖ¥²¡¼¥à(ȯŸÊÔ)

3D¥ì¡¼¥ë¥¬¥ó¥·¥å¡¼¥Æ¥£¥ó¥°(±þÍÑÊÔ)

3Dæ½Ð¥²¡¼¥à(È´¿è)

2D¥ê¥¢¥ë¥¿¥¤¥à¥¹¥È¥é¥Æ¥¸¡¼

3D¥¿¥Ã¥×¥¢¥¯¥·¥ç¥ó(NavMeshAgent »ÈÍÑ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥«¥¨¥ë¤Î°Ù¤Ë¡Á¡¢¥Ü¥³¥¹¥«¥¦¥©¡¼¥ºÉ÷)

VideoPlayer ¥¤¥Ù¥ó¥ÈϢư¤Î¼ÂÁõÎã

VideoPlayer ¥ê¥¹¥ÈÆâ¤«¤é¥à¡¼¥Ó¡¼ºÆÀ¸¤Î¼ÂÁõÎã(ȯŸ)

AR ²èÁüÉÕ¤­¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®¤Î¼ÂÁõÎã

AR ¥ê¥¹¥ÈÆâ¤«¤éÀ¸À®¤Î¼ÂÁõÎã(ȯŸ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥µ¥Ð¥¤¥Ð¡¼É÷)

private



¤³¤Î¥µ¥¤¥ÈÆâ¤ÎºîÉʤϥæ¥Ë¥Æ¥£¤Á¤ã¤ó¥é¥¤¥»¥ó¥¹¾ò¹à¤Î¸µ¤ËÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹

¹­¹ðÊç½¸Ãæ