i-school - £³£Ä¥¹¥é¥¤¥À¡¼¥²¡¼¥à¡¡È¯Å¸£±£±
¡¡¥¹¥Æ¡¼¥¸¤òÀ¸À®¤·¤¿ºÝ¤Ë¡¢¥«¥á¥é¤Î°ÌÃÖ¤¬¾å¼ê¤¯¹ç¤ï¤º¤Ë¡¢Äɽ¾¤¹¤ë°ÌÃÖ¤¬¾å²¼¤·¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¤½¤Î¾ì¹ç¤Ë¤Ï¤Þ¤º¡¢AR Session Origin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃÖ¤òÄ´À°¤·¤Æ¡¢ºÆÅÙ¡¢¼Âµ¡¤Ë¤Æ³Îǧ¤ò¹Ô¤Ã¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
AR Camera ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤³¤Î AR Session Origin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë¤¿¤á¡¢
¿Æ¤Ç¤¢¤ë AR Session Origin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÂɸ¤¬ÊѤï¤ì¤Ð¡¢¥«¥á¥é¤Î°ÌÃÖ¤¬Êѹ¹¤Ë¤Ê¤ë¤¿¤á¤Ç¤¹¡£

¡¡¤½¤ì¤Ç¤â¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¼ê½ç¤òÍøÍѤ·¤Æ¥«¥á¥é¤Î°ÌÃÖ¤òÄ´À°¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£


ȯŸ£±£±¡¡¡¼¥«¥á¥é¤Î°ÌÃÖÄ´À°¡¼

£±£¶¡¥AR ¥«¥á¥é¤Î°ÌÃÖ¤òÄ´À°¤¹¤ë



¡¡¿·¤·¤¤³Ø½¬ÆâÍƤϡ¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£

¡¡¡¦¥¿¥×¥ë·¿



£±£¶¡¥AR ¥«¥á¥é¤Î°ÌÃÖ¤òÄ´À°¤¹¤ë

£±¡¥Àß·×


¡¡°ÊÁ°¤Ë³Ø½¬¤·¤¿¤è¤¦¤Ë¡¢¸½ºß¤ÏÊ¿ÌÌ´¶ÃΤ˹ç¤ï¤»¤Æ Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë¤¿¤á¡¢Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÏºÇ½é¤«¤é¥Ò¥¨¥é¥ë¥­¡¼¤Ë¤Ï¸ºß¤·¤Æ¤¤¤Ê¤¤¾õÂ֤ˤʤäƤ¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥Ú¥ó¥®¥ó¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤â¡¢¥Ò¥¨¥é¥ë¥­¡¼¤Ë¤ÏºÇ½é¤«¤é¸ºß¤·¤Æ¤¤¤Þ¤»¤ó¡£

¡¡¤Þ¤¿¡¢AR ÍѤΥ«¥á¥é¤âÊ¿ÌÌ´¶ÃΤËÍøÍѤϤ·¤Æ¤¤¤Þ¤¹¤¬¡¢À¸À®¤µ¤ì¤¿ Stage Æâ¤Ë¤Ï¸ºß¤·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢¥¹¥¯¥ê¥×¥È¤òÍøÍѤ·¤Æ
¥«¥á¥é¤ÎÄɽ¾ÂоݤǤ¢¤ë¥Ú¥ó¥®¥ó¤ò¡¢Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸À®¸å¤ËÀßÄê¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£ARGameManager ¥¯¥é¥¹Æâ¤Ç¼Â¹Ô¤·¤Æ¤¤¤ë CameraController ¥¯¥é¥¹¤Î SetPlayer ¥á¥½¥Ã¥É¤Ç¤¹¡£

¡¡¤¿¤À¤·¡¢¤³¤Á¤é¤ÎÀßÄê¤ò¤ª¤³¤Ê¤Ã¤Æ¤â¡¢AR ¥«¥á¥é¤¬Ä̾ï¤Î¥²¡¼¥à¤Î¤è¤¦¤Ë¥Ú¥ó¥®¥ó¤òÀµ¤·¤¤°ÌÃÖ¤ÇÄɽ¾¤¹¤ë¤³¤È¤¬Æñ¤·¤¤¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Î²ò·èºö¤Î£±¤Ä¤È¤·¤Æ¡¢Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥ÈÆâ¤Ë¡¢¿·¤·¤¯¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÇÛÃÖ¤·¡¢
¤½¤Î°ÌÃÖ¤ò AR ¥«¥á¥é¤ÎÀßÄê°ÌÃ֤Ȥ·¤ÆÍøÍѤ¹¤ëÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£

¡¡º£²ó¤Ï¤³¤ÎÊýË¡¤ò»È¤Ã¤Æ¡¢AR ¥«¥á¥é¤Î°ÌÃÖ¤òÊäÀµ¤·¡¢º£¤Þ¤Ç¤ÈƱ¤¸¤è¤¦¤Ê¥«¥á¥é¤Î°ÌÃ֤ǥڥ󥮥ó¤òÄɽ¾¤µ¤»¤ë¤è¤¦¤Ë½¤Àµ¤ò¹Ô¤¤¤Þ¤¹¡£

¡¡¤³¤ÎÊýË¡¤À¤±¤¬²ò·èÊýË¡¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¼«Ê¬¤Ç¤â¡¢¤É¤¦¤¹¤ì¤Ð¤¦¤Þ¤¯¥«¥á¥é¤¬¥Ú¥ó¥®¥ó¤òÄɽ¾¤·¤Æ¤¯¤ì¤ë¤Î¤«¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£


£²¡¥Stage ¥×¥ì¥Õ¥¡¥Ö¡¦¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¡¡CameraOffsetObj ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÄɲ乤ë


¡¡Prefabs ¥Õ¥©¥ë¥ÀÆâ¤Ë¤¢¤ë Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÁªÂò¤·¤Æ¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ç Open ¤òÁªÂò¤·¤Æ¥×¥ì¥Õ¥¡¥ÖÊÔ½¸¥â¡¼¥É¤Ë¤·¤Þ¤¹¡£

¡¡Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¾å¤Ç±¦¥¯¥ê¥Ã¥¯¤ò¤·¤Æ¥á¥Ë¥å¡¼¤ò³«¤­¡¢Create Empty ¤òÁªÂò¤·¤Æ¿·¤·¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò£±¤ÄÄɲä·¤Þ¤¹¡£
̾Á°¤Ï CameraOffsetObj ¤ËÊѹ¹¤·¤Þ¤¹¡£

¡¡¤³¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃ֤˥«¥á¥é¤¬Íè¤ë¤è¤¦¤ËÀ©¸æ¤ò¹Ô¤¦¤è¤¦¤Ë¤·¤Þ¤¹¤Î¤Ç¡¢
¥Ú¥ó¥®¥ó¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¸åÊý¤ËŬµ¹¤Ê°ÌÃÖ¤ò·è¤á¤ÆÇÛÃÖ¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡º£²ó¤Ï¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü¤âÍÑ°Õ¤·¤Þ¤·¤¿¤¬¡¢»²¹ÍÃͤǤ¹¡£¤´¼«Ê¬¤Î¥×¥í¥¸¥§¥¯¥È¤ÎÆâÍƤǷè¤á¤Æ¤¯¤À¤µ¤¤¡£


Stage ¥×¥ì¥Õ¥¡¥Ö¡¡¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Ò¥¨¥é¥ë¥­¡¼



CameraOffsetObj ¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(Ãͤϻ²¹ÍÃͤǤ¹)



Scene ¥Ó¥å¡¼²èÁü­¡



Scene ¥Ó¥å¡¼²èÁü­¢



Scene ¥Ó¥å¡¼²èÁü­£



¡¡°Ê¾å¤Ç´°À®¤Ç¤¹¡£


£³¡¥Stage ¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤¹¤ë


¡¡Stage ¥×¥ì¥Õ¥¡¥ÖÆâ¤ËÄɲä·¤¿ CameraOffsetObj ¤Î¾ðÊó¤ò¥¹¥¯¥ê¥×¥È¤Ç´ÉÍý¤ò¹Ô¤¦¤è¤¦¤Ë¤·¡¢
¥²¡¼¥àÆâ¤Ç¥¹¥Æ¡¼¥¸¤òÀ¸À®¤·¤¿ºÝ¤Ë¡¢Â¾¤Î¥¹¥¯¥ê¥×¥ÈÂФ·¤Æ¥¹¥Æ¡¼¥¸¤Î¾ðÊó¤È¤·¤ÆÄ󶡤Ǥ­¤ë¤è¤¦¤Ë¡¢ÀìÍѤΥ᥽¥Ã¥É¤òºîÀ®¤·¤Æ¤ª¤­¤Þ¤¹¡£

¡¡º£²ó¤Ï³Ø½¬¤Î¤¿¤á¡¢£²¤Ä¤Î¥á¥½¥Ã¥É¤òÍÑ°Õ¤·¤Þ¤·¤¿¡£¤É¤Á¤é¤òÍøÍѤ·¤Æ¤âƱ¤¸½èÍý¤ò¼ÂÁõ¤Ç¤­¤Þ¤¹¡£
¤³¤Î¤¦¤Á¤Î£±¤Ä¤Ï¡¢¥á¥½¥Ã¥É¤ÎÌá¤êÃͤ˥¿¥×¥ë·¿¤Î¾ðÊó¤òÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£


Stage.cs

<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£



£´¡¥¡ã¥¿¥×¥ë·¿¡ä


¡¡¥¿¥×¥ë(tuple)·¿¤Ï C# ¤Î»ý¤Äµ¡Ç½¤Î£±¤Ä¤Ç¤¹¡£Ê£¿ô¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Ç¡¼¥¿¤ò¤Ò¤È¤Þ¤È¤á¤Ë¤·¤Æ´ÉÍý¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤Þ¤¿¡¢Ìá¤êÃͤȤ·¤ÆÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢Ä̾ï¤ÎÌá¤êÃͤ˻ØÄê¤Ç¤­¤ë·¿¤Ï£±¤Ä¤À¤±¤Ç¤¹¤¬¡¢¥¿¥×¥ë·¿¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤ê
Ê£¿ô¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Ç¡¼¥¿¤òƱ¤¸¤è¤¦¤Ë¤Þ¤È¤á¤ÆÌ᤹µ¡Ç½¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡¥¿¥×¥ë·¿¤ÎÀë¸À¤Î½ñ¼°¤ÏÊ£¿ô¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤ì¤¾¤ì¾Ò²ð¤·¤Þ¤¹¡£º£²ó¤Ï­¢¤Î½ñ¼°¤Ç¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
¡¡
¡ãµ­½ÒÎã­¡¡ä
¡¡// Àë¸À¤ÈÂåÆþ
  (int, bool) damage = (0, false);

¡¡// Àë¸À
¡¡(Sprite, MoveTimeScale) nextTimeScaleValue;

¡¡// ¥á¥½¥Ã¥É¤ÎÌá¤êÃͤȤ·¤ÆÀë¸À
¡¡private (int, bool) GetTuple()

¡¡¾åµ­¤ÎÎã¤Î¾ì¹ç¡¢damage ÊÑ¿ô¤ä nextTimeScaleValue ÊÑ¿ô¤Ë¤Ï¡¢£²¤Ä¤Î·¿¤Î¾ðÊ󤬴ޤޤì¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
¤è¤êÃúÇ«¤Ë½ñ¤¯¾ì¹ç¤Ë¤Ï¡¢º£²ó¤Î¤è¤¦¤Ë¡¢Ä̾ï¤ÎÊÑ¿ô¤Î¤è¤¦¤Ë·¿¤ËÂФ·¤ÆÀë¸À¤â²Äǽ¤Ç¤¹¡£
½ÐÍè¤ë¤À¤±¥¿¥×¥ëÆâ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ë¤âÊÑ¿ô¤ÎÀë¸À¤ò¤Ä¤±¤ÆÍøÍѤ¹¤ë¤³¤È¤ò¤ª¤¹¤¹¤á¤·¤Þ¤¹¡£

¡ãµ­½ÒÎã­¢¡ä
¡¡// Àë¸À¤ÈÂåÆþ
  (int value, bool isWeakness) = (0, false);

¡¡// Àë¸À
¡¡(Sprite nextSprite, MoveTimeScale nextMoveTimeScaleType);

  // ¥¿¥×¥ë·¿¤Î¾ì¹ç¡¢¥á¥½¥Ã¥É¤ÎÌá¤êÃͤˤâÊÑ¿ô¤òÀë¸À¤Ç¤­¤ë
¡¡(GameObject player, GameObject cameraObj)

¡ãµ­½ÒÎã­£¡ä
  (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 ¤ÎÊý¤¬¡¢ÊÑ¿ô̾¤À¤±¸«¤Æ¤â¤É¤Î¤è¤¦¤ÊÃͤ¬ÂåÆþ¤µ¤ì¤Æ¤¤¤ë¤«È½ÃǤ¬¤Ä¤­¤ä¤¹¤¤¤Î¤Ç¡¢½èÍý¤òÆɤ߲ò¤­¤ä¤¹¤¤¤È¤¤¤¦¤³¤È¤Ç¤¹¡£



¡¡º£²ó¤Î¼ÂÁõ¤Ç¤Ï¡¢¥á¥½¥Ã¥É¤ÎÌá¤êÃͤȤ·¤Æ¥¿¥×¥ë·¿¤òÍøÍѤ·¡¢£²¤Ä¤Î·¿¤Î¾ðÊó¤òÌ᤹½èÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ÎÃͤò¼õ¤±¼è¤ë¦¤Ç¤Ï¡¢Æ±¤¸ÆâÍƤΥ¿¥×¥ë·¿¤ò½àÈ÷¤·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢Ìá¤êÃͤξðÊó¤ò£²¤Ä¤Þ¤È¤á¤Æ¼õ¤±¼è¤ì¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

Stage.cs
/// <summary>
    /// ¥×¥ì¥¤¥ä¡¼¤È¥«¥á¥é¤Î¥ª¥Õ¥»¥Ã¥È°ÌÃÖ¤ÎξÊý¤Î¾ðÊó¤ò¼èÆÀ
    /// </summary>
    /// <returns></returns>
    public (GameObject player, GameObject cameraObj) GetStageInfo() {
        return (playerObj, cameraOffsetObj);
    }

¡¡°Ê¹ß¤Î¼ê½ç¤Ç¡¢¼ÂºÝ¤Ë¥¿¥×¥ë·¿¤ÎÌá¤êÃͤòÍøÍѤ¹¤ë½èÍý¤ò½ñ¤­¤Þ¤¹¤¬¡¢¤³¤³¤Ç¼ÂÁõ¤·¤Æ¤¤¤ëÉôʬ¤òÀè¤Ëµ­½Ò¤·¤Æ¤ª¤­¤Þ¤¹¡£

ARGameManager.cs
¡ãÌá¤êÃͤΤ¢¤ë¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¦¡ä
¡¡// ¥¿¥×¥ë·¿¤Î stageInfo ÊÑ¿ô¤òÀë¸À¤·¡¢Stage ¥¯¥é¥¹¤Î GetStageInfo ¥á¥½¥Ã¥É¤ÎÌá¤êÃͤȤ·¤Æ¡¢Æ±¤¸¥¿¥×¥ë·¿¤Î¾ðÊó¤ò¼èÆÀ¤·¤ÆÂåÆþ
¡¡(GameObject player, GameObject cameraOffsetObj) stageInfo = obj.GetComponent<Stage>().GetStageInfo();

¡¡// ¥Ú¥ó¥®¥ó¤Î¾ðÊó¤È¥«¥á¥é¤Î°ÌÃÖ¾ðÊó¤ò¥«¥á¥é¤ËÀßÄê
  cameraController.SetStageInfo(stageInfo.player, stageInfo.cameraOffsetObj);

¡¡Stage ¥¯¥é¥¹¤Î GetStageInfo() ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¡¢¤½¤ì¤¾¤ì°Û¤Ê¤ë·¿¤Î¾ðÊó¤ò£±¤Ä¤Ë¤Þ¤È¤á¤Æ¤¢¤ë¥¿¥×¥ë·¿¤ÎÌá¤ê¤ÎÃ椫¤é¼èÆÀ¤·¤Æ¤¤¤Þ¤¹¡£
º£²ó¤Ï Item1 ¤È Item2 ¤ÎξÊý¤Î·¿¤¬ GameObject ·¿¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡¤Ê¤ª¡¢¥¿¥×¥ë¤âÆþ¤ì»Ò¤òºî¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Ä̾ï¤Ç¤¢¤ì¤Ð£²¤Ä¤Î·¿¤Ç¤¹¤¬¡¢¤³¤Îµ¡Ç½¤ò»È¤¨¤ÐÊ£¿ô¤Î¾ðÊó¤ò»ý¤¿¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡ãÆþ¤ì»Ò¤Ë¤Ê¤Ã¤Æ¤¤¤ë¥¿¥×¥ë¡ä
  (int x, (string a, int b) y) tuple = (0, ("String", 100));


»²¹Í¥µ¥¤¥È
MicroSoft C#¥ê¥Õ¥¡¥ì¥ó¥¹
¥¿¥×¥ë·¿
https://docs.microsoft.com/ja-jp/dotnet/csharp/lan...
̤³ÎǧÈô¹Ô C ÍÍ
¥¿¥×¥ë
https://ufcpp.net/study/csharp/datatype/tuples/


£µ¡¥Prefabs ¥Õ¥©¥ë¥ÀÆâ¤Î Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀßÄê¤ò¹Ô¤¦


¡¡º£²ó¤Ï¥×¥ì¥Õ¥¡¥Ö¤Ë¤Ê¤Ã¤Æ¤¤¤ë Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¤ß¡¢Stage ¥¹¥¯¥ê¥×¥È¤ÎÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£

¡¡CameraOffsetObj ÊÑ¿ô¤¬Äɲ䵤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢Stage ¥×¥ì¥Õ¥¡¥ÖÆâ¤Ë¤¢¤ëƱ̾¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥É¥é¥Ã¥°¥¢¥ó¥É¥É¥í¥Ã¥×¤·¤Æ¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£


¥×¥ì¥Õ¥¡¥Ö¤Ë¤Ê¤Ã¤Æ¤¤¤ë Stage ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü



¡¡°Ê¾å¤ÇÀßÄê¤Ï´°Î»¤Ç¤¹¡£


£¶¡¥CameraController ¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤¹¤ë


¡¡Update ¥á¥½¥Ã¥É¤Î½èÍý¤Î°ìÉô¤ò½¤Àµ¤·¡¢¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤·¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¼«ÂΤòÀ©¸æ¤¹¤ë¤è¤¦¤ËÊѹ¹¤·¤Þ¤¹¡£
¤³¤Î½¤Àµ¤ò¹Ô¤Ã¤Æ¤â¡¢Ä̾ï¤Î¥²¡¼¥à¤Ë¤Ï±Æ¶Á¤Ï¤¢¤ê¤Þ¤»¤ó¡£

¡¡µÕ¤Ë¹Í¤¨¤ë¤È¡¢AR ³«È¯¤Î¾ì¹ç¤Ë¤Ï¡¢¾ï¤Ë¡¢AR ¤Çµ¯Æ°¤·¤¿¾ì¹ç¤È¡¢Unity ¥¨¥Ç¥£¥¿¡¼¤Çµ¯Æ°¤·¤¿¾ì¹ç¤Î¡¢
ÁÐÊý¤ÎµóÆ°¤ò°Õ¼±¤·¤Æ½èÍý¤òºîÀ®¤·¤¿¤ê½¤Àµ¤ò¹Ô¤Ã¤Æ¤¤¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
¤³¤ÎÉôʬ¤ò¤·¤Ã¤«¤ê¤ÈÂбþ¤Ç¤­¤Æ¤¤¤Ê¤¤¤È¡¢¤É¤Á¤é¤«¤Ç¼Â¹Ô¤·¤¿ºÝ¤ËÉÔ¶ñ¹ç¤¬È¯À¸¤¹¤ë²ÄǽÀ­¤¬½Ð¤Æ¤¯¤ë¤¿¤á¤Ç¤¹¡£

¡¡¿·¤·¤¤ SetStageInfo ¥á¥½¥Ã¥É¤òºîÀ®¤·¤Æ¡¢¥×¥ì¥¤¥ä¡¼¤È¥«¥á¥é¤Î°ÌÃÖ¾ðÊó¤Î¡¢Î¾Êý¤ò¾ðÊó¤ò³°Éô¤Î¥¯¥é¥¹¤«¤é¼õ¤±¼è¤ì¤ë¤è¤¦¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£
¤½¤·¤Æ cameraPos ÊÑ¿ô¤Ë¡¢³°Éô¤«¤éÄ󶡤ò¼õ¤±¤¿¥«¥á¥é¤Î°ÌÃÖ¾ðÊó¤òÀßÄꤹ¤ë¤³¤È¤Ç¡¢
AR ¥«¥á¥é¤Î°ÌÃÖ¤ò¡¢¥¹¥Æ¡¼¥¸Æâ¤Ë¿·¤·¤¯ÀßÄꤷ¤¿ CameraOffsetObj ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÂɸ¤Ë¥»¥Ã¥È¤·¤Þ¤¹¡£


CameraController.cs

¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£


¡¡¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¤¿¤é¥»¡¼¥Ö¤·¤Þ¤¹¡£


£·¡¥ARGameManager ¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤¹¤ë


¡¡ºÇ¸å¤Ë ARGameManager ¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¡¢¥¹¥Æ¡¼¥¸À¸À®¸å¤Î½èÍý¤òÊѹ¹¤·¤Þ¤¹¡£

¡¡¤¤¤Þ¤Þ¤Ç¤Ï CameraController ¥¹¥¯¥ê¥×¥È¤Î SetPlayer ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¡¢¥«¥á¥é¤Ë¥×¥ì¥¤¥ä¡¼¤Î¾ðÊó¤Î¤ß¤òÄ󶡤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢
º£²ó¤Ï¡¢Àè¤Û¤É¤Î CameraController ¥¹¥¯¥ê¥×¥È¤Î½¤Àµ¼ê½ç¤ÇºîÀ®¤·¤Æ¤ª¤¤¤¿ SetStageInfo ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤ËÊѹ¹¤·¤Æ¡¢
¥×¥ì¥¤¥ä¡¼¤Î¾ðÊó¤È¹ç¤ï¤»¤Æ¡¢¥¹¥Æ¡¼¥¸Æâ¤Ë¤¢¤ë¥«¥á¥é¤ÎÀßÄê°ÌÃÖ¾ðÊó¤â°ú¿ô¤È¤·¤ÆÅϤ¹¤³¤È¤Ç¡¢
AR ¥«¥á¥é¤Î°ÌÃÖ¤ò¥¹¥Æ¡¼¥¸Æâ¤ËÀßÄꤷ¤Æ¤¢¤ë CameraOffsetPos ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃÖ¤ËÀßÄꤷ¤Þ¤¹¡£

¡¡º£²ó¤Ï£²¤Ä¤Î¼ÂÁõÎã¤òÄ󼨤·¤Æ¤¢¤ê¤Þ¤¹¡£¤É¤Á¤é¤ÎÊýË¡¤Ç¼ÂÁõ¤·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¼ÂÁõ¤·¤Ê¤¤Êý¤ÎÆâÍƤˤĤ¤¤Æ¤Ï¡¢½èÍý¤Îή¤ì¤òÍý²ò¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£
¡¡

ARGameManager.cs

<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£



£¸¡¥AR Session Origin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀßÄê¤òÊѹ¹¤¹¤ë


¡¡¥Ò¥¨¥é¥ë¥­¡¼¤Ë¤¢¤ë AR Session Origin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÁªÂò¤·¤Æ¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤è¤ê CameraController ¥¹¥¯¥ê¥×¥È¤ÎÀßÄê¤òÊѹ¹¤·¤Þ¤¹¡£

¡¡''CameraPos ÊÑ¿ô¤ò None ¤ËÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
¤³¤Á¤é¤â Pengiun ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÈƱÍÍ¤Ë AR Æâ¤Ç¥¹¥Æ¡¼¥¸¤òÀ¸À®¸å¡¢¥¹¥Æ¡¼¥¸Æâ¤Ë¤¢¤ë¥«¥á¥é¤Î¥ª¥Õ¥»¥Ã¥È°ÌÃ֤Υ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¾ðÊó¤ò
¥¹¥¯¥ê¥×¥È¤òÍøÍѤ·¤ÆưŪ¤Ë¼èÆÀ¤¹¤ë¤è¤¦¤ËÊѹ¹¤·¤¿¤¿¤á¤Ç¤¹¡£

¡¡¤½¤Î¤¿¤á¡¢¸½ºß¤Ï None ¤Ç¤¹¤¬¡¢¥¹¥Æ¡¼¥¸¤¬À¸À®¤µ¤ì¤¿¥¿¥¤¥ß¥ó¥°¤Ç CameraPos ÊÑ¿ô¤Ë¡¢Stage ¥×¥ì¥Õ¥¡¥ÖÆâ¤Î CameraOffsetObj ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¾ðÊó¤¬ÂåÆþ¤µ¤ì¤Þ¤¹¡£


AR Session Origin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡¡¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü



¡¡°Ê¾å¤ÇÀßÄê¤Ï´°Î»¤Ç¤¹¡£


£¹¡¥¥²¡¼¥à¤ò¼Â¹Ô¤·¤ÆÆ°ºî¤ò³Îǧ¤¹¤ë


¡¡¤¹¤Ù¤Æ¤Î¼ê½ç¤¬´°À®¤·¤Þ¤·¤¿¡£Ê£¿ô¤Î¥¹¥¯¥ê¥×¥È¤ò·Ðͳ¤¹¤ë·Á¤Ç¤¢¤ë¤Î¤Ç¡¢½èÍý¤Îή¤ì¤ÎÇÄ°®¤¬Æñ¤·¤¤¤¿¤á¡¢¤·¤Ã¤«¤ê¤ÈÆɤ߲ò¤¤¤Æ¤¯¤À¤µ¤¤¡£
¥Î¡¼¥È¤Ê¤É¤Ë¥á¥½¥Ã¥É¤Î·Ò¤¬¤ê¤Ê¤É¤ò½ñ¤­¤À¤·¤Æ²Ä»ë²½¤·¤Æ¤ß¤ë¤È¡¢¥¤¥á¡¼¥¸¤¬¤Ä¤«¤ß¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£

¡¡¼Âµ¡ÍѤ˥ӥë¥É¤ò¹Ô¤¤¡¢¥²¡¼¥à¤ò¼Â¹Ô¤·¤Æ¥¹¥Æ¡¼¥¸¤òÀ¸À®¤·¤Þ¤¹¡£º£¤Þ¤Ç¤È¥«¥á¥é¤Î°ÌÃÖ¤¬Êѹ¹¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
°ÌÃÖ¤¬¤Þ¤À¾å¼ê¤¯¹ç¤ï¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢Stage ¥×¥ì¥Õ¥¡¥ÖÆâ¤Ë¤¢¤ë CameraOffsetPos ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃÖ¤òÄ´À°¤·¡¢²¿²ó¤«¡¢¼Âµ¡¤Ë¤Æ³Îǧ¤ò¤·¤Ê¤¬¤éÄ´À°¤ò·«¤êÊÖ¤·¤Æ¤¯¤À¤µ¤¤¡£



¡¡°Ê¾å¤Ç¤³¤Î¼ê½ç¤Ï½ªÎ»¤Ç¤¹¡£

¡¡=>¡¡¼¡¤Ï¡¡³Ø½¬¤Î¿¶¤êÊ֤ꡡ¤Ç¤¹¡£