ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2024ǯ01·î15Æü(·î) 09:58:06ÍúÎò
¤¿¤À¤·Ê¬´ô¤Î¿ô¤¬Â¿¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¾å¤Ë¡¢¥¡¼¤ÎÄɲääÊѹ¹¤ÎÅÔÅÙ¡¢Ê¬´ô¤ò½ñ¤Ä¾¤¹É¬Íפ¬¤¢¤ë¤¿¤á¡¢Á´ÂÎŪ¤Ë¾éĹŪ¤Ê¥½¡¼¥¹¥³¡¼¥É¤Ë¤Ê¤ê¡¢Êݼ餬º¤Æñ¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤½¤¦¤¤¤Ã¤¿½èÍý¤ò·Ú¸º¤¹¤ëÊýË¡¤È¤·¤Æ»öÁ°¤Ë Dictionary ¤Ê¤É¤òÍøÍѤ·¤Æ¡¢KeyCode ¤È¤½¤ì¤Ëɳ¤Å¤¯½èÍý¤òÅÐÏ¿¤·¤Æ¤ª¤¯¥¢¥×¥í¡¼¥Á¤ÎÊýË¡¤ò¾Ò²ð¤·¤Þ¤¹¡£
¤³¤¦¤¤¤Ã¤¿É³ÉÕ¤±¤Î¤³¤È¤ò¥Þ¥Ã¥Ô¥ó¥°¤È¸Æ¤Ó¤Þ¤¹¡£
¡¡¤³¤³¤Ç¤Ï¼ÂÁõÎã¤È¤·¤Æ¡¢£³£Ä¶õ´ÖÆâ¤Î°Üư¤È²óž¤Ë¤Ä¤¤¤Æ KeyCode ¤ò¥Þ¥Ã¥Ô¥ó¥°¤·¤Æ¤¤¤Þ¤¹¡£
¼ÂºÝ¤Î°Üư¤È²óžÉôʬ¤Ë¤Ä¤¤¤Æ¤Ï¡¢LINQ ¤òÍøÍѤ·¤Æ¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
¡¡Transform ¤òÍøÍѤ·¤¿°Üư¤Î¥±¡¼¥¹¤Ç¤¹¡£
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class KeyCodeMappingTransformController : MonoBehaviour
{
[SerializeField] private float moveSpeed = 1.0f; // °Üư®ÅÙ
private Vector3 prevPosition; ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ // Á°²ó¤ÎºÂɸ
¡¡¡¡public Vector3 PrevPosition => prevPosition; // ¥×¥í¥Ñ¥Æ¥£
// KeyCode ¤È°ÜưÊý¸þ¤ò¥Þ¥Ã¥Ô¥ó¥°
private Dictionary<KeyCode, Vector3> directionMappings = new ()
{
{ KeyCode.UpArrow, Vector3.up },
{ KeyCode.DownArrow, Vector3.down },
{ KeyCode.LeftArrow, Vector3.left },
{ KeyCode.RightArrow, Vector3.right }
};
// KeyCode ¤È²óžÊý¸þ¤ò¥Þ¥Ã¥Ô¥ó¥°
private Dictionary<KeyCode, Quaternion> rotationMappings = new ()
{
{ KeyCode.UpArrow, Quaternion.Euler(0, 0, 0) },
{ KeyCode.DownArrow, Quaternion.Euler(0, 0, 180) },
{ KeyCode.LeftArrow, Quaternion.Euler(0, 0, 90) },
{ KeyCode.RightArrow, Quaternion.Euler(0, 0, 270) }
};
void Update()
{
Move();
}
/// <summary>
/// °Üư
/// </summary>
private void Move()
{
Vector3 position = transform.position;
// °ÜưÁ°¤Î°ÌÃÖ¤òÊݸ
prevPosition = position;
// ¥¡¼ÆþÎϤˤè¤ë°ÜưÊý¸þ¤Î³Îǧ
KeyCode keyCode = directionMappings
.Where(kvp => Input.GetKey(kvp.Key))
.Select(kvp => kvp.Key)
.SingleOrDefault();
if (keyCode != KeyCode.None)
{
¡¡¡¡¡¡¡¡¡¡¡¡// °Üư
position += directionMappings[keyCode] * moveSpeed;
transform.position = position;
¡¡¡¡¡¡¡¡¡¡¡¡// ²óž
Turn(keyCode);
}
}
/// <summary>
/// ²óž
/// </summary>
/// <param name="keyCode"></param>
private void Turn(KeyCode keyCode)
{
if (rotationMappings.TryGetValue(keyCode, out Quaternion rotation))
{
// ²óž
transform.rotation = rotation;
}
}
}
¡¡²¼µ¤Î½èÍý¤ÎÉôʬ¤Ë¤ª¤¤¤Æ¡¢KeyCode ¤È¤½¤ì¤ËÂбþ¤¹¤ëÊý¸þ¡¢¤ª¤è¤Ó²óž³ÑÅÙ¤òɳ¤Å¤±¤·¤Æ¤¤¤Þ¤¹¡£
// KeyCode ¤È°ÜưÊý¸þ¤ò¥Þ¥Ã¥Ô¥ó¥°
private Dictionary<KeyCode, Vector3> directionMappings = new ()
{
{ KeyCode.UpArrow, Vector3.up },
{ KeyCode.DownArrow, Vector3.down },
{ KeyCode.LeftArrow, Vector3.left },
{ KeyCode.RightArrow, Vector3.right }
};
// KeyCode ¤È²óžÊý¸þ¤ò¥Þ¥Ã¥Ô¥ó¥°
private Dictionary<KeyCode, Quaternion> rotationMappings = new ()
{
{ KeyCode.UpArrow, Quaternion.Euler(0, 0, 0) },
{ KeyCode.DownArrow, Quaternion.Euler(0, 0, 180) },
{ KeyCode.LeftArrow, Quaternion.Euler(0, 0, 90) },
{ KeyCode.RightArrow, Quaternion.Euler(0, 0, 270) }
};
¡¡Dictionary ¤Ç¤Ï Key ¤ò»ØÄꤹ¤ë¤³¤È¤Ç Value ¤ò»²¾È¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£
º£²ó¤Î¾ì¹ç¤Ç¤Ï¡¢Key ¤ò KeyCode¡¢Value ¤ò Vector3 ¤È¤·¤Æ£±¥»¥Ã¥È¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£
¤½¤ì¤ò³ÆÊý¸þʬÍѰդ·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢Ìð°õ¥¡¼¤Î¥¡¼ÆþÎϤÈÊý¸þ¤È¤ò£±ÂУ±¤Çɳ¤Å¤±¤Æ¤¤¤Þ¤¹¡£
¡¡²óž¤Î¾ì¹ç¤âƱÍͤǤ¹¡£
¡¡¤³¤Î¤è¤¦¤Ë¤·¤Æ»öÁ°¤Ë¾ðÊó¤ÎɳÉÕ¤±¤·¤Æ¤ª¤¯¤³¤È¤ò¥Þ¥Ã¥Ô¥ó¥°¤È¤¤¤¤¤Þ¤¹¡£
¡¡¼ÂºÝ¤Ë¤Ï°Ê²¼¤ÎÉôʬ¤ÇÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
¤³¤Á¤é¤Î½èÍý¤Ë¤Ï LINQ ¤òÍøÍѤ·¡¢¾ÊάµË¡¤Ë¤è¤Ã¤Æ½èÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
// ¥¡¼ÆþÎϤˤè¤ë°ÜưÊý¸þ¤Î³Îǧ
KeyCode keyCode = directionMappings
.Where(kvp => Input.GetKey(kvp.Key))
.Select(kvp => kvp.Key)
.SingleOrDefault();
¡¡Where ¥á¥½¥Ã¥É¤Î¾ò·ï¼°¤È¤·¤Æ Input.GetKey(kvp.Key) ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ÎÉôʬ¤¬ Dictionary ¤È¤·¤Æ¥Þ¥Ã¥Ô¥ó¥°¤µ¤ì¤Æ¤¤¤ë KeyCode ¤¬»²¾È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¡¡¥Þ¥Ã¥Ô¥ó¥°ºÑ¤Î¤¤¤º¤ì¤«¤Î KeyCode ¤Ë³ºÅö¤·¤¿¾ì¹ç¡¢ Select ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ KeyCode ¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë Dicitionary ¤Î Key ¤ò¼èÆÀ¤·¤Þ¤¹¡£
ºÇ¸å¤Ë SingleOrDefault ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¡¢¼èÆÀ¤·¤¿¾ðÊó¤ò£±¤Ä¼è¤ê½Ð¤·¡¢ºÇ½é¤Ë = ¤Îº¸ÊÕ¤ËÍѰդ·¤¿ keyCode ÊÑ¿ô¤ËÂåÆþ¤¹¤ë¤³¤È¤Ç¡¢º£²ó¥¡¼ÆþÎϤµ¤ì¤¿ KeyCode ¤òÆÃÄꤷ¤Æ¤¤¤Þ¤¹¡£
¡¡¤½¤Î¸å¡¢¤½¤Î²¼¤Ë³¤¯½èÍý¤Ç KeyCode ¤ò¥Ï¥ó¥É¥ê¥ó¥°¤·¡¢
¥Þ¥Ã¥Ô¥ó¥° ¤µ¤ì¤Æ¤¤¤ë KeyCode ¤ò¼èÆÀ¤Ç¤¤Æ¤¤¤ë¾ì¹ç¤Î¤ß¡¢°Üư¤Î½èÍý¤È²óž¤Î½èÍý¤Ë¤Ä¤Ê¤¬¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¡¡¡¡¡¡¡¡if (keyCode != KeyCode.None)
{
¡¡¡¡¡¡¡¡¡¡¡¡// °Üư
position += directionMappings[keyCode] * moveSpeed;
transform.position = position;
¡¡¡¡¡¡¡¡¡¡¡¡// ²óž
Turn(keyCode);
}
¡¡°Üư¤Î½èÍý¤Ë¤Ï Dictionary ¤Î Value ¤Î¾ðÊó¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
// °Üư position += directionMappings[keyCode] * moveSpeed;
¡¡directionMappings[keyCode] ¤Î¤è¤¦¤Ë Dictionary ¤ò Key ¤Ç»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢
¤½¤Î Key ¤È¥»¥Ã¥È¤Ë¤Ê¤Ã¤Æ¤¤¤ë Value ¤ò¼è¤ê½Ð¤¹¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¡¡²¾¤Ë Key ¤¬ KeyCode.UpArrow ¤Ç¤¢¤ë¾ì¹ç¡¢ Vector3.up ¤ÎÃͤ¬ Value ¤È¤·¤Æ¼è¤ê½Ð¤µ¤ì¡¢
Àè¤Û¤É¤Î½èÍý¤ËŬÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
¡¡Å¬ÍѤ·¤Æ¼¡¤Î¤è¤¦¤ËÆÉ¤ßÊѤ¨¤Þ¤¹¡£
// °Üư(KeyCode.UpArrow ¤Î¤È¤) position += Vector3.up * moveSpeed;
¡¡¼ÂºÝ¤Ë¥×¥í¥°¥é¥à¤Ï¡¢¤³¤Î¤è¤¦¤ÊÃͤȤ·¤Æ½èÍý¤·¤Æ¤¤¤Þ¤¹¡£
¡¡ÊÑ¿ô¤¬½Ð¤Æ¤¤¿¤È¤¤Ë¤Ï¡¢¾ï¤Ë¤½¤ÎÃͤò¸«¤Æ¡¢Ç¾Æâ¤ÇÃÖ¤´¹¤¨¤Æ¤¤¤¯¤è¤¦¤Ë¿´¤¬¤±¤Æ¤¤¤¤Þ¤·¤ç¤¦¡£
¡¡Linq¡Ê¥ê¥ó¥¯¡Ë¤È¤Ï¡¢¥³¥ì¥¯¥·¥ç¥ó(Dictionary ¤ä List ¤Ê¤É)¤ÎÍ×ÁǤòÁàºî¤·¤Æ¡¢¸¡º÷¤·¤¿¤ê½¸·×¤¹¤ë½èÍý¤ò´Ê·é¤Ëµ½Ò¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¥é¥¤¥Ö¥é¥ê(Ê£¿ô¤Îµ¡Ç½¤ò¤Þ¤È¤á¤¿¤â¤Î)¤Ç¤¹¡£
¡¡Linq¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ïusing ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£º£²óºîÀ®¤·¤¿¥á¥½¥Ã¥ÉÆâ¤ËÅо줷¤Æ¤¤¤ë½èÍý¤Ç¤¹¤Î¤Ç¡¢Éü½¬¤·¤ÆÆÉ¤ß²ò¤±¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤¤Þ¤·¤ç¤¦¡£
using System.Linq;
¡¡Linq¤òµ½Ò¤¹¤ëºÝ¤Ë¤Ï¥é¥à¥À¼°¤Îµ½Ò¤òÍѤ¤¤Þ¤¹¡£¥é¥à¥À¼°¤Ë¤Ä¤¤¤Æ¤Ï¤³¤Á¤é¤ò¤´³Îǧ¤¯¤À¤µ¤¤¡£
SamuraiBlogÍÍ
¡ÚC#ÆþÌç¡ÛLINQ¤Î»È¤¤ÊýÁí¤Þ¤È¤á(Select¡¢Where¡¢GroupBy¤Ê¤É)
https://www.sejuku.net/blog/56519
¡¡Linq¤Ë¤Ï¿¤¯¤Îµ¡Ç½¤¬¤¢¤ê¤Þ¤¹¤¬º£²óÍøÍѤ·¤Æ¤¤¤ëµ¡Ç½¤Ë¤Ä¤¤¤Æ¤Þ¤È¤á¤Æ¤ª¤¤Þ¤¹¡£
¤½¤Î¤Û¤«¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ¤Ïµ»ö¤¬¤¿¤¯¤µ¤ó¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤Á¤é¤Î¥µ¥¤¥È¤â»²¹Í¤Ë¤Ê¤ê¤Þ¤¹¡£
ÃÏÊ¿Àþ¤Ë¹Ô¤¯ÍÍ
LINQ¤Î³ÈÄ¥¥á¥½¥Ã¥É°ìÍ÷¤È¡¢¤Û¤ÜÁ´Éô¤Î¥µ¥ó¥×¥ë¤òºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡£
https://yujisoftware.hatenablog.com/entry/20111031...
¡¡ÇÛÎó¤ä List ¤Ê¤É¤Î¥³¥ì¥¯¥·¥ç¥ó¤ËÂФ·¤Æ¥Õ¥£¥ë¥¿¥ê¥ó¥°½èÍý¤ò¹Ô¤¤¡¢»ØÄꤷ¤¿¾ò·ï¤òËþ¤¿¤¹Í×ÁǤΤߤò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤¤ëµ¡Ç½¤Ç¤¹¡£
°ú¿ô¤Ë¤Ï¥Õ¥£¥ë¥¿¥ê¥ó¥°¤ò¹Ô¤¦¾ò·ï¼°¤ò»ØÄꤷ¤Þ¤¹¡£
// ¥¡¼ÆþÎϤˤè¤ë°ÜưÊý¸þ¤Î³Îǧ
KeyCode keyCode = directionMappings
.Where(kvp => Input.GetKey(kvp.Key))
.Select(kvp => kvp.Key)
.SingleOrDefault();
¡¡º£²ó¤Î¼ÂÁõÎã¤Ç¤Ï Where ¥á¥½¥Ã¥É¤Î¾ò·ï¼°¤Ë kvp => Input.GetKey(kvp.Key) ¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤Ï Dicitionary ·¿¤Î¥³¥ì¥¯¥·¥ç¥ó¤Ç¤¢¤ë directionMappings ÊÑ¿ô¤ÎÍ×ÁǤò£±¤Ä¤º¤Ä¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¡¢¾åµ¤Î¾ò·ï¤Ë¹ç¤¦Í×ÁǤΤߤò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹¡£
kvp ÊÑ¿ô¤Ë¤Ï directionMappings ÊÑ¿ô¤ÎÍ×ÁǤǤ¢¤ë Dicitionary<KeyCode, Vector3> ·¿¤Î¾ðÊ󤬣±¤Ä¤º¤Ä½çÈÖ¤ËÂåÆþ¤µ¤ì¡¢
Input.GetKey(kvp.Key) ¥á¥½¥Ã¥É¤Î¼Â¹Ô·ë²Ì¤Ç¤¢¤ëÌá¤êÃͤξðÊó¤È¡¢Dicitionary<KeyCode, Vector3> ·¿ ¤Î Key ¤Ç¤¢¤ë KeyCode ¤È¤ò¾È¹ç¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤Î½èÍý¤Ï IEnumerable<T> ¤ÎÌá¤êÃͤò»ý¤Ä¤¿¤á¡¢¥á¥½¥Ã¥É¥Á¥§¡¼¥ó¤ò¹Ô¤¦¤³¤È¤Ç¡¢¤³¤Î½èÍý¤Î·ë²Ì¤ò¼¡¤Î½èÍý¤Ë¤Ä¤Ê¤²¤Æ¤¤¤¯¤³¤È¤¬²Äǽ¤Ç¤¹¡£
º£²ó¤Ç¤¢¤ì¤Ð¡¢¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¤Æ¾È¹ç¤Î¾ò·ï¤òËþ¤¿¤·¤¿ Dicitionary<KeyCode, Vector3> ·¿¤Î¾ðÊó¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.Where ¥á¥½¥Ã¥É
https://docs.microsoft.com/ja-jp/dotnet/api/system...
±¢´³¤·Ãæ¤Î¥²¡¼¥à³«È¯¥á¥â
¡ÚC#,LINQ¡ÛWhere¡ÁÇÛÎó¤ä¥ê¥¹¥È¤ò»ØÄꤷ¤¿¾ò·ï¤Ç¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¤¿¤¤¤È¤¡Á
https://www.urablog.xyz/entry/2018/06/27/070000
.NET Column ÍÍ
¡ÚLINQ¤Î¥á¥½¥Ã¥É¾Ò²ð¤½¤Î3¡ÛWhere¤Ç¾ò·ï¤Ë¹ç¤¦¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë
https://www.fenet.jp/dotnet/column/language/1458/
¡¡¼Í±Æ½èÍý¤È¸Æ¤Ð¤ì¤ëµ¡Ç½¤Ç¤¹¡£¼Í±Æ¤È¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹ÍѤÎÀìÌçÍѸì¤Ç¡¢¥Æ¡¼¥Ö¥ë(¼Â¥Ç¡¼¥¿)¤«¤éÆÃÄê¤ÎÎó¤Î¥Ç¡¼¥¿¤Î¤ß¤ò¼è¤ê½Ð¤¹¤³¤È¤ò¸À¤¤¤Þ¤¹¡£
¡¡Select ¥á¥½¥Ã¥É¤Ç¤Ï°ú¿ô¤Ë¤·¤¿¾ò·ï¤ò¸µ¤Ë¡¢¾È¹ç¤Ç¤¤¿¥Ç¡¼¥¿¤Î¤ß¤ò¼è¤ê½Ð¤¹Áàºî¤ò¹Ô¤¤¤Þ¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤ÎÌá¤êÃÍ¤Ï IEnumerable<TResult> ¤Ç¤¢¤ê¡¢¤½¤Î¾ðÊó¤ò¼èÆÀ¤·¤ÆÍøÍѤ·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢
¥á¥½¥Ã¥É¥Á¥§¡¼¥ó¤òÍøÍѤ·¤Æ¡¢ToList ¥á¥½¥Ã¥É¤ä ToArray ¥á¥½¥Ã¥É¤òÍøÍѤ·¤ÆÊ£¿ô¤Î¾ðÊó¤ò List ¤äÇÛÎó¤È¤·¤Æ°·¤¨¤ë¾õÂÖ¤«
SingleOrDefault ¥á¥½¥Ã¥É¤ä FirstOrDefault ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ£±¤Ä¤À¤±°·¤¨¤ë¾õÂ֤ˤ·¤Þ¤¹¡£
// ¥¡¼ÆþÎϤˤè¤ë°ÜưÊý¸þ¤Î³Îǧ
KeyCode keyCode = directionMappings
.Where(kvp => Input.GetKey(kvp.Key))
.Select(kvp => kvp.Key)
.SingleOrDefault();
¡¡¤³¤Á¤é¤Î¼ÂÁõÎã¤Ç¤Ï¡¢Where ¥á¥½¥Ã¥É¤Î½èÍý¤Î·ë²Ì¤ËÂФ·¤Æ¡¢Select ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
.Select(kvp => kvp.Key) ¤ÎÉôʬ¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡Where ¥á¥½¥Ã¥É¤ÎÌá¤êÃͤηë²Ì¤Î³ÆÍ×ÁǤò kvp ÊÑ¿ô¤ËÂåÆþ¤·¡¢¤½¤ÎÃæ¤«¤é Key ÊÑ¿ô¤Î¾ðÊó¤ò¼è¤ê½Ð¤·¤Þ¤¹¡£
º£²ó¤Î¾ì¹ç¡¢Where ¥á¥½¥Ã¥É¤ÎÌá¤êÃͤϣ±¤Ä¤À¤±¤Ç¤¹¤Î¤Ç¡¢¤½¤ÎÌá¤êÃͤËÂФ·¤Æ Key ÊÑ¿ô¤Î¾ðÊó¤ò¼è¤ê½Ð¤·¤Æ¤¤¤Þ¤¹¡£
»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.Select ¥á¥½¥Ã¥É
https://docs.microsoft.com/ja-jp/dotnet/api/system...
.NET Column ÍÍ
¡ÚLINQ¤ÎSelect¥á¥½¥Ã¥É¤Î½ñ¤Êý3Áª¡ÃLINQ¤Ë¤Ä¤¤¤Æ¤Ê¤É¤ò¾Ò²ð
https://www.fenet.jp/dotnet/column/language/1454/
Qiita @t_takahari ÍÍ
LINQ¤Î¤½¤ÎForEach¡¢¼Â¤ÏSelect¤Ç½ñ¤´¹¤¨¤é¤ì¤ë¤«¤â
https://qiita.com/t_takahari/items/6dc72f48b1ebdfe...
¡¡SingleOrDefault() ¤Ï¡¢IEnumerable<T> ¥·¡¼¥±¥ó¥¹¤«¤éñ°ì¤ÎÍ×ÁǤòÊÖ¤¹ LINQ ¥á¥½¥Ã¥É¤Ç¤¹¡£
IEnumerable<T> ¤¬¶õ¤Ç¤¢¤ë¤«¡¢Ê£¿ô¤ÎÍ×ÁǤò»ý¤Ã¤Æ¤¤¤ë¾ì¹ç¤äÍ×ÁǤ¬£±¤Ä¤â¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ë¤Ï null ¤òÌᤷ¤Þ¤¹
(Îã³°¥¨¥é¡¼¤Ï½Ð¤Þ¤»¤ó¤Î¤Ç¡¢Àµ¤·¤¯Æ°ºî¤·¤Þ¤¹¡£)
// °ÜưÊý¸þ¤Î³Îǧ
KeyCode keyCode = directionMappings
.Where(kvp => Input.GetKey(kvp.Key))
.Select(kvp => kvp.Key)
.SingleOrDefault();
¡¡º£²ó¤Î¾ì¹ç¡¢directionMappings ¤«¤é Input.GetKey() ¤Ë¹çÃפ¹¤ë KeyCode ¤ò¼èÆÀ¤¹¤ëÌÜŪ¤Ç»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£
Select(kvp => kvp.Key) ¤Ç KeyCode ¤¬£±¤Ä¤Î IEnumerable<KeyCode> ¤Ë¹Ê¤ê¹þ¤Þ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢
SingleOrDefault() ¤ò»È¤¦¤³¤È¤ÇľÀÜñ°ì¤Î KeyCode ¤ò¼èÆÀ¤Ç¤¤Þ¤¹¡£
¡¡¤Þ¤¿º£²ó¤ÏÍøÍѤ·¤Æ¤¤¤Þ¤»¤ó¤¬¡¢SingleOrDefault() ¤Ï°ú¿ô¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤¡¢
¤½¤Î¾ì¹ç¤Ë¤Ï¡¢Ê£¿ô¤ÎÍ×ÁǤ«¤é¾ò·ï¤Ë¹çÃפ¹¤ëÍ×ÁǤò£±¤Ä¤À¤±¼è¤ê½Ð¤¹¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.SingleOrDefault ¥á¥½¥Ã¥É
https://learn.microsoft.com/ja-jp/dotnet/api/syste...
Dawn Coding Academy ÍÍ
¡ÚC#ÆþÌç¡ÛSingleOrDefault¤Î»È¤¤Êý¤ò²òÀâ¡ÚLINQ¡Û
https://pa-n-da-blog.com/c_linq_singleordefault/
¡¡¤Ê¤ª¡¢¾åµ¤Î£³¤Ä¤Î LINQ ¤òÍøÍѤ»¤º¤Ë½ñ¤¤¤¿¾ì¹ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£
// °ÜưÊý¸þ¤Î³Îǧ
KeyCode pressedKeyCode = KeyCode.None;
// Á´¤Æ¤Î¥¡¼¤ÈÂбþ¤¹¤ëÊý¸þ¤ò³Îǧ
foreach (var keyMapping in directionMappings)
{
// ¥¡¼¤¬²¡¤µ¤ì¤Æ¤¤¤ë¤«¤ò³Îǧ
if (Input.GetKey(keyMapping.Key))
{
// ¥¡¼¤¬²¡¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¤½¤Î¥¡¼¥³¡¼¥É¤òµÏ¿
pressedKeyCode = keyMapping.Key;
// °ì¤Ä¸«¤Ä¤«¤Ã¤¿¤é¥ë¡¼¥×¤ò½ªÎ»
break;
}
}
¡¡LINQ ¤Î½èÍý¤¬¤É¤Î¤è¤¦¤Ëư¤¤¤Æ¤¤¤ë¤Î¤«³Îǧ¤Ç¤¤Þ¤¹¡£
Ʊ»þ¤Ë¡¢¤É¤ì¤À¤±¤Î½èÍý¤¬¾Êά¤µ¤ì¤Æ¤¤¤ë¤«¤âʬ¤«¤ê¤Þ¤¹¡£
¡¡Rigidbody ¤òÍøÍѤ·¤¿°Üư¤Î¥±¡¼¥¹¤Ç¤¹¡£
¥¡¼ÆþÎϤȲóž½èÍý¤Ï Update ¥á¥½¥Ã¥É¡¢°Üư½èÍý¤Ï FixedUpdate ¥á¥½¥Ã¥É¤Èʬ¤±¤Æ³èÍѤ·¤Þ¤¹¡£
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
[RequireComponent(typeof(Rigidbody))]
public class KeyCodeMappingRigidbodyController : MonoBehaviour
{
[SerializeField] private float moveSpeed = 1.0f; // °Üư®ÅÙ
private Rigidbody rb;
private KeyCode currentKeyCode = KeyCode.None; // ¸½ºß²¡¤µ¤ì¤Æ¤¤¤ë¥¡¼
// KeyCode ¤È°ÜưÊý¸þ¤ò¥Þ¥Ã¥Ô¥ó¥°
private Dictionary<KeyCode, Vector3> directionMappings = new()
{
{ KeyCode.UpArrow, Vector3.up },
{ KeyCode.DownArrow, Vector3.down },
{ KeyCode.LeftArrow, Vector3.left },
{ KeyCode.RightArrow, Vector3.right }
};
// KeyCode ¤È²óžÊý¸þ¤ò¥Þ¥Ã¥Ô¥ó¥°
private Dictionary<KeyCode, Quaternion> rotationMappings = new()
{
{ KeyCode.UpArrow, Quaternion.Euler(0, 0, 0) },
{ KeyCode.DownArrow, Quaternion.Euler(0, 0, 180) },
{ KeyCode.LeftArrow, Quaternion.Euler(0, 0, 90) },
{ KeyCode.RightArrow, Quaternion.Euler(0, 0, 270) }
};
private void Start()
¡¡¡¡{
¡¡¡¡if (TryGetComponent(out rb))
¡¡¡¡{
¡¡¡¡rb.freezeRotation = true; // ²óž¤òʪÍý¥¨¥ó¥¸¥ó¤ËǤ¤»¤Ê¤¤¤è¤¦¤Ë¤¹¤ë
¡¡¡¡}
¡¡¡¡}
private void Update()
{
// ¥¡¼ÆþÎϤˤè¤ë°ÜưÊý¸þ¤Î³Îǧ
currentKeyCode = GetPressedKeyCode();
¡¡¡¡if (currentKeyCode == KeyCode.None)
¡¡¡¡{
¡¡¡¡return;
¡¡¡¡}
// ²óž¤ÏʪÍý±é»»¤Ç¤Ï¤Ê¤¤¤¿¤á¡¢Update¤Ç¸Æ¤Ó½Ð¤¹
Turn(currentKeyCode);
}
/// <summary>
/// ¥¡¼ÆþÎϤˤè¤ë°ÜưÊý¸þ¤Î³Îǧ
/// </summary>
/// <returns></returns>
private KeyCode GetPressedKeyCode()
{
return directionMappings
.Where(kvp => Input.GetKey(kvp.Key))
.Select(kvp => kvp.Key)
.SingleOrDefault();
}
/// <summary>
/// ²óž
/// </summary>
/// <param name="keyCode"></param>
private void Turn(KeyCode keyCode)
{
if (rotationMappings.TryGetValue(keyCode, out Quaternion rotation))
{
// ²óž
transform.rotation = rotation;
}
}
¡¡¡¡private void FixedUpdate()
¡¡¡¡{
¡¡¡¡if (currentKeyCode == KeyCode.None)
¡¡¡¡{
¡¡¡¡return;
¡¡¡¡}
¡¡¡¡// ʪÍý±é»»¤ËɬÍפʾðÊó¤ò°ú¿ô¤È¤·¤ÆÅϤ¹
¡¡¡¡Move(currentKeyCode);
¡¡¡¡}
¡¡¡¡/// <summary>
¡¡¡¡/// °Üư
¡¡¡¡/// </summary>
¡¡¡¡private void Move(KeyCode keyCode)
¡¡¡¡{
¡¡¡¡// °Üư
¡¡¡¡Vector3 velocity = directionMappings[keyCode] * moveSpeed;
¡¡¡¡rb.velocity = velocity;
¡¡¡¡}
}
¡¡Áá´ü return ½èÍý¤Ë¤è¤ê¡¢if ʸ¤Ë¤è¤ë¥Í¥¹¥È¤ò̵¤¯¤·¤Æ²ÄÆÉÀ¤Î¹â¤¤½èÍý¤ò¼Â¸½¤·¤Æ¤¤¤Þ¤¹¡£
/// <summary>
/// °Üư
/// </summary>
private void Move(KeyCode keyCode)
{
if (keyCode != KeyCode.None)
{
// °Üư
Vector3 velocity = directionMappings[keyCode] * moveSpeed;
rb.velocity = velocity;
}
}
¡¡¤³¤Î¤è¤¦¤Ê½ñ¼°¤Ç¤Ï¤Ê¤¯¤Æ¡¢»öÁ°¤Ë°Üư²Äǽ¤Ç¤¢¤ë¤³¤È¤òÀººº¤·¤¿¾å¡¢Move ¥á¥½¥Ã¥É¤Ç¤Ï¼Â¹ÔÌ¿Îá¤À¤±¤òµ½Ò¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¡¡private void FixedUpdate()
¡¡¡¡{
¡¡¡¡if (currentKeyCode == KeyCode.None)¡¡¡¡//¡¡¢«¡¡Move ¤Ç¤¤ë¤«¥Á¥§¥Ã¥¯¤·¡¢¤Ç¤¤Ê¤¤¤Ê¤é¡¢¤½¤â¤½¤â Move ¤·¤Ê¤¤
¡¡¡¡{
¡¡¡¡return;
¡¡¡¡}
¡¡¡¡// ʪÍý±é»»¤ËɬÍפʾðÊó¤ò°ú¿ô¤È¤·¤ÆÅϤ¹
¡¡¡¡Move(currentKeyCode);
¡¡¡¡}
¡¡¡¡/// <summary>
¡¡¡¡/// °Üư
¡¡¡¡/// </summary>
¡¡¡¡private void Move(KeyCode keyCode)
¡¡¡¡{
¡¡¡¡// °Üư
¡¡¡¡Vector3 velocity = directionMappings[keyCode] * moveSpeed;
¡¡¡¡rb.velocity = velocity;
¡¡¡¡}
¡¡¥Í¥Ã¥È¤Îµ»ö¤ä¡¢ChatGPT ¤Î²óÅúÎã¤Î¿¤¯¤Ï if ʸ¤Ë¤è¤ë¥Í¥¹¥È½èÍý¤¬Â¿¤¯¤Ê¤ê¤¬¤Á¤Ç¤¹¡£
¡¡Áá´ü return ¤ò³èÍѤ·¡¢¡Öif ¤Ê¤é¤Ð ¡Á ¤¹¤ë¡×¤È¤¤¤¦½ñ¼°¤À¤±¤Ç¤Ï¤Ê¤¯¡¢¡Öif ¤Ê¤é¤Ð ¡Á ¤·¤Ê¤¤¡×¤È¤¤¤¦½ñ¼°¤Î½ñ¤Êý¤È³èÍÑË¡¤ò³Ð¤¨¤Æ¤¤¤¤Þ¤·¤ç¤¦¡£
¡¡¾åµ¤Î£²¤Ä°Ê³°¤ËÍøÍѤµ¤ì¤Æ¤¤¤ë¡¢°ìÈÌŪ¤Ê¼ÂÁõÎã¤âÄ󼨤·¤Æ¤ª¤¤Þ¤¹¡£
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class AxisMappingRigidbodyController : MonoBehaviour
{
[SerializeField] private float moveSpeed = 1.0f; // °Üư®ÅÙ
private Rigidbody rb;
private float horizontalInput;
private float verticalInput;
private void Start()
{
if (TryGetComponent(out rb))
{
rb.freezeRotation = true; // ²óž¤òʪÍý¥¨¥ó¥¸¥ó¤ËǤ¤»¤Ê¤¤¤è¤¦¤Ë¤¹¤ë
}
}
private void Update()
{
// ¿åÊ¿Êý¸þ¤È¿âľÊý¸þ¤ÎÆþÎϤò¼èÆÀ
horizontalInput = Input.GetAxis("Horizontal");
verticalInput = Input.GetAxis("Vertical");
// ²óž¤ÏʪÍý±é»»¤Ç¤Ï¤Ê¤¤¤¿¤á¡¢Update¤Ç¸Æ¤Ó½Ð¤¹
Turn();
}
private void FixedUpdate()
{
// ʪÍý±é»»¤ËɬÍפʾðÊó¤ò°ú¿ô¤È¤·¤ÆÅϤ¹
Move(horizontalInput, verticalInput);
}
/// <summary>
/// °Üư
/// </summary>
private void Move(float horizontal, float vertical)
{
// °Üư
Vector3 movement = new Vector3(horizontal, 0, vertical) * moveSpeed;
rb.velocity = movement;
}
/// <summary>
/// ²óž
/// </summary>
private void Turn()
{
// Êý¸þ¥Ù¥¯¥È¥ë¤òµá¤á¡¢¤½¤ÎÊý¸þ¤ò¸þ¤¯¤è¤¦¤Ë²óž
if (horizontalInput != 0 || verticalInput != 0)
{
Vector3 direction = new Vector3(horizontalInput, 0, verticalInput);
Quaternion toRotation = Quaternion.LookRotation(direction, Vector3.up);
transform.rotation = toRotation;
}
}
}
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°




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