¡¡¥¿¥×¥ë(tuple)·¿¤Ï C# ¤Î»ý¤Äµ¡Ç½¤Î£±¤Ä¤Ç¤¹¡£
Ê£¿ô¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Ç¡¼¥¿¤ò¤Ò¤È¤Þ¤È¤á¤Ë¤·¤Æ´ÉÍý¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤Þ¤¿¡¢Ìá¤êÃͤȤ·¤ÆÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢
Ê£¿ô¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Ç¡¼¥¿¤òƱ¤¸¤è¤¦¤Ë¤Þ¤È¤á¤ÆÌᤷ¤Æ¤¯¤ì¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡¥¿¥×¥ë·¿¤ÎÀë¸À¤Î½ñ¼°¤ÏÊ£¿ô¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤ì¤¾¤ì¾Ò²ð¤·¤Þ¤¹¡£º£²ó¤Ï¢¤Î½ñ¼°¤Ç¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
¡¡
¡ãµ½ÒÎã¡¡ä
(int, bool) damage = (0, false);
¡¡(Sprite, MoveTimeScale) nextTimeScaleValue;
¡¡¾åµ¤ÎÎã¤Î¾ì¹ç¡¢damage ÊÑ¿ô¤ä nextTimeScaleValue ÊÑ¿ô¤Ë¤Ï¡¢£²¤Ä¤Î·¿¤Î¾ðÊ󤬴ޤޤì¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
¤è¤êÃúÇ«¤Ë½ñ¤¯¾ì¹ç¤Ë¤Ï¡¢º£²ó¤Î¤è¤¦¤Ë¡¢Ä̾ï¤ÎÊÑ¿ô¤Î¤è¤¦¤Ë·¿¤ËÂФ·¤ÆÀë¸À¤â²Äǽ¤Ç¤¹¡£
½ÐÍè¤ë¤À¤±
¥¿¥×¥ëÆâ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ë¤âÊÑ¿ô¤ÎÀë¸À¤ò¤Ä¤±¤ÆÍøÍѤ¹¤ë¤³¤È¤ò¤ª¤¹¤¹¤á¤·¤Þ¤¹¡£
¡ãµ½ÒÎ㢡ä
(int value, bool isWeakness) = (0, false);
¡¡(Sprite nextSprite, MoveTimeScale nextMoveTimeScaleType);
¡ãµ½ÒÎ㣡ä
(int value, bool isWeakness) damage = (0, false);
¡¡(Sprite nextSprite, MoveTimeScale nextMoveTimeScaleType) nextTimeScaleValue;
¡¡¥¿¥×¥ë·¿¤Î¾ðÊó¤ò°·¤¦¾ì¹ç¡¢¥¿¥×¥ëÆâ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ
ÊÑ¿ô¤ÎÀë¸À¤ò¹Ô¤Ã¤Æ¤¤¤ë¤«¡¢¤¤¤Ê¤¤¤«¤Ë¤è¤Ã¤Æ¡¢»²¾È¤¹¤ë¾ì¹ç¤Îµ½Ò¤¬ÊѤï¤ê¤Þ¤¹¡£
¡¡µ½ÒÎ㡤Τ褦¤Ë¡¢¥¿¥×¥ëÆâ¤Ç·¿¤Î¤ß¤·¤«Àë¸À¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¥¿¥×¥ëÆâ¤Î¾ðÊó¤Ï
Item1¡¢Item2 ¤È¤¤¤¦¤è¤¦¤Ë¼«Æ°Åª¤ËºÎÈÖ¤µ¤ì¤Þ¤¹¡£
¤½¤Î¾ì¹ç¤Ï¡¢¡Ö
¥¿¥×¥ë¤ÎÊÑ¿ô̾.¥¿¥×¥ëÆâ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀë¸À½ç¤ÎItem¤ÎÈÖ¹æ¡×¤Î½ñ¼°¤Çµ½Ò¤Ç¤¤Þ¤¹¡£
¡ãµ½ÒÎ㡤ξì¹ç¤Î»²¾ÈÎã¡ä
Hoge(damage.Item1); // int ·¿¤Î°ú¿ô¤ò»²¾È¤·¤ÆÅϤ·¤Æ¤¤¤Þ¤¹
Hpge(nextTimeScaleValue.Item2)
¡¡ÊÑ¿ô¤ÎÀë¸À¤ò¹Ô¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢Ä̾ï¤ÎÊÑ¿ô¤Î¤è¤¦¤Ë¡Ö
¥¿¥×¥ë¤ÎÊÑ¿ô̾.¥¿¥×¥ëÆâ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ÎÊÑ¿ô̾¡×¤Î½ñ¼°¤Çµ½Ò¤Ç¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥¿¥×¥ë¤ÎÊÑ¿ô̾¤«¤é¡¢Ãͤο䬤¬²Äǽ¤Ç¤¹¡£
¡ãµ½ÒÎ㢤ξì¹ç¤Î»²¾ÈÎã¡ä
Hoge(damage.value); // int ·¿¤Î°ú¿ô¤ò»²¾È¤·¤ÆÅϤ·¤Æ¤¤¤Þ¤¹
Hoge(nextTimeScaleValue.nextSprite); // Sprite ·¿¤Î°ú¿ô¤ò»²¾È¤·¤ÆÅϤ·¤Æ¤¤¤Þ¤¹
¡¡Item1¡¢Item2 ¤Ç¤â½èÍý¤ÏÆ°¤¤Þ¤¹¤¬¡¢¥×¥í¥°¥é¥à¤Ï½èÍý¤ò¸«¤Æ¡¢
ï¤Ç¤â¤¹¤°¤ËÆâÍƤ¬Íý²ò¤Ç¤¤ëÀ߷פ¬ÍýÁۤǤ¹¡£
¤Ê¤ë¤Ù¤¯ÊÑ¿ô̾¤ò¤Ä¤±¤Æ¥¿¥×¥ë¤ÎÀë¸À¤ò¤·¤¿Êý¤¬¤¤¤¤¤È¤¤¤¦¤Î¤Ï¡¢¤³¤Î¤è¤¦¤Ë
¥×¥í¥°¥é¥à¤Î²ÄÆÉÀ¤Ë´Ø¤ï¤ë¤¿¤á¤Ç¤¹¡£
damage.Item1 ¤è¤ê¤â¡¢damage.value ¤ÎÊý¤¬¡¢ÊÑ¿ô̾¤À¤±¸«¤Æ¤â
¤É¤Î¤è¤¦¤ÊÃͤ¬ÂåÆþ¤µ¤ì¤Æ¤¤¤ë¤«È½ÃǤ¬¤Ä¤¤ä¤¹¤¤¤Î¤Ç¡¢½èÍý¤òÆɤ߲ò¤¤ä¤¹¤¤¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
¡¡º£²ó¤Î¼ÂÁõ¤Ç¤Ï¡¢switch ʸ¤Ë¤è¤ëʬ´ô¤Î·ë²Ì¤ò¥¿¥×¥ë·¿¤ÎÊÑ¿ô¤ò½àÈ÷¤·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢Ìá¤êÃͤξðÊó¤ò£²¤Ä¤Þ¤È¤á¤Æ¼õ¤±¼è¤ì¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤Î switch ʸ¤Ç¤Ï¡¢currentMoveTimeScale ÊÑ¿ô¤Î¾ðÊó¤òÀººº¤·¡¢¤½¤ÎÃͤ¬¤É¤Î case ¤Ë³ºÅö¤¹¤ë¤«¤òȽÄꤷ¤Æ¤¤¤Þ¤¹¡£
³ºÅö¤·¤¿ case Æâ¤Ë¤Ï¡¢Sprite ·¿¤È MoveTimeScale ·¿¤Î£²¤Ä¤Î¾ðÊó¤¬ÍÑ°Õ¤µ¤ì¤Æ¤ª¤ê¡¢¤½¤ì¤¬ nextTimeScaleValue ÊÑ¿ô¤ËÌá¤êÃͤȤ·¤ÆÌá¤Ã¤Æ¤¤Þ¤¹¡£
(Sprite nextSprite, MoveTimeScale nextMoveTimeScaleType) nextTimeScaleValue = currentMoveTimeScale switch
{
MoveTimeScale.Normal => (oneHalfSpeedIcon, MoveTimeScale.One_Half),
MoveTimeScale.One_Half => (doubleSpeedIcon, MoveTimeScale.Double),
MoveTimeScale.Double => (normalSpeedIcon, MoveTimeScale.Normal),
_ => (normalSpeedIcon, MoveTimeScale.Normal)
};
¡¡Î㤨¤Ð¡¢currentMoveTimeScale ÊÑ¿ô¤ÎÃͤ¬ MoveTimeScale.One_Half ¤Ç¤¢¤ë¤Ê¤é¤Ð¡¢¤½¤Î¹Ô¤Î½èÍý¤Ë³ºÅö¤¹¤ë¤¿¤á¡¢¤½¤ÎÃͤòŬÍѤ·¤Þ¤¹¡£
¤½¤Î¾ì¹ç¡¢Sprite ·¿¤Î doubleSpeedIcon ÊÑ¿ô¤È MoveTimeScale ·¿¤Î MoveTimeScale.Double ¤ÎÃͤ¬¤½¤ì¤¾¤ìŬÍѤµ¤ì¤Æ¡¢¤½¤ì¤¬Ìá¤êÃͤȤ·¤Æ nextTimeScaleValue ÊÑ¿ô¤ËÅϤµ¤ì¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢¤³¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢nextTimeScaleValue ÊÑ¿ôÆâ¤Î
nextSprite ÊÑ¿ô¤Ë¤Ï doubleSpeedIcon ÃͤξðÊó¤¬ÂåÆþ¤µ¤ì¡¢
nextTimeScaleValue ÊÑ¿ôÆâ¤Î
nextMoveTimeScaleType ÊÑ¿ô¤Ë¤Ï MoveTimeScale.Double ¤ÎÃͤ¬ÂåÆþ¤µ¤ì¤Æ¤¤¤ë¾õÂ֤ˤʤê¤Þ¤¹¡£
¡¡¤³¤Î¾ðÊó¤ò¤µ¤é¤ËÍøÍѤ¹¤ë¤³¤È¤Ç¡¢currentMoveTimeScale ÊÑ¿ô¤ÎÃͤ¬¹¹¿·¤µ¤ì¤Æ¡¢°Üư®Å٤ξõÂÖ¤¬Êѹ¹¤µ¤ì¡¢
¥¢¥¤¥³¥ó¤Î²èÁü¤Î¾ðÊó¤¬Êѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
// MoveTimeScale ¤òÊѹ¹
currentMoveTimeScale = nextTimeScaleValue.nextMoveTimeScaleType;
// ¥¢¥¤¥³¥ó²èÁü¤ÎÊѹ¹¤·¡¢¸½ºß¤Î MoveTimeScale ¤Ë¹ç¤ï¤»¤ë
imgSpeedIcon.sprite = nextTimeScaleValue.nextSprite;
¡¡¤Ê¤ª¡¢¥¿¥×¥ë¤âÆþ¤ì»Ò¤òºî¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£Ä̾ï¤Ç¤¢¤ì¤Ð£²¤Ä¤Î·¿¤Ç¤¹¤¬¡¢¤³¤Îµ¡Ç½¤ò»È¤¨¤ÐÊ£¿ô¤Î¾ðÊó¤ò»ý¤¿¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡ãÆþ¤ì»Ò¤Ë¤Ê¤Ã¤Æ¤¤¤ë¥¿¥×¥ë¡ä
(int x, (string a, int b) y) tuple = (0, ("String", 100));
»²¹Í¥µ¥¤¥È
MicroSoft C#¥ê¥Õ¥¡¥ì¥ó¥¹
¥¿¥×¥ë·¿
https://docs.microsoft.com/ja-jp/dotnet/csharp/lan...