¡¡¥²¡¼¥à¼Â¹Ô»þ¤Ë
Null Reference Exception ¥¨¥é¡¼¤¬È¯À¸¤·¡¢PlayerController ¥¹¥¯¥ê¥×¥ÈÆâ¤Î StopMove ¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤¬¸¶°ø¤Ç¥²¡¼¥à¤¬Ää»ß¤·¤Æ¤·¤Þ¤¦¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£
½èÍý¤¬»ß¤Þ¤Ã¤Æ¤·¤Þ¤¦¤Î¤Ï¡¢StopMove ¥á¥½¥Ã¥É¤Ë¤¢¤ë rb ÊÑ¿ô¤òÍøÍѤ·¤¿½èÍý¤ò¹Ô¤¦¤È¤¤Ë¡¢
rb ÊÑ¿ô¤ÎÃͤ¬ null(¶õ) ¤Ç¤¢¤ë¤¿¤á¤Ç¤¹¡£
¡¡¤Ç¤¹¤¬¡¢rb ÊÑ¿ô¤Ï¡¢PlayerController ¥¹¥¯¥ê¥×¥È¤Î Start ¥á¥½¥Ã¥É¤Ë¤ª¤¤¤Æ GetComponent ¥á¥½¥Ã¥É¤Ë¤è¤êÂåÆþ½èÍý¤¬¹Ô¤ï¤ì¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£
²¿¸Î¤³¤Î¤è¤¦¤Ê¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤Î¤Ç¤·¤ç¤¦¤«¡£
¡¡¤³¤ì¤Ï¡¢GameManager ¥¹¥¯¥ê¥×¥ÈÆâ¤Î Start ¥á¥½¥Ã¥É¤È¡¢PlayerController ¥¹¥¯¥ê¥×¥ÈÆâ¤Î Start ¥á¥½¥Ã¥É¤Î
¼Â¹Ô¤µ¤ì¤ë½çÈÖ¤¬¸¶°ø¤Ç¤¹¡£
¡¡
¡¡Unity ¤Ç¤Ï
Ê£¿ô¤Î Start ¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤ë¾ì¹ç¡¢¤É¤Î¥¹¥¯¥ê¥×¥È¤Î Start ¥á¥½¥Ã¥É¤«¤é¼Â¹Ô¤µ¤ì¤ë¤«¤ÎÊݾڤϤʤ¯¡¢¤½¤ÎÅÔÅټ¹Ԥµ¤ì¤ë½çÈÖ¤¬ÊѤï¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
PlayerController ¥¹¥¯¥ê¥×¥ÈÆâ¤Î Start ¥á¥½¥Ã¥É¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤Æ¤«¤é¤Ç¤Ê¤¤¤È¡¢rb ÊÑ¿ô¤¬ null ¤Î¤Þ¤Þ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤¿¤á¡¢
Àè¤Ë GameManager ¥¹¥¯¥ê¥×¥ÈÆâ¤Î Start ¥á¥½¥Ã¥É¤Î½èÍý¤ò¹Ô¤Ã¤¿¤È¤¤Ë¤Ï¡¢¾åµ¤Î¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢º£²ó¤Î¤è¤¦¤Ë¡¢Start ¥á¥½¥Ã¥É¤Î½èÍý¤Î½çÈ֤ˤè¤Ã¤Æ¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤è¤¦¤Ê¶²¤ì¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢Start ¥á¥½¥Ã¥É¤òÊÒÊý¤Î¥¹¥¯¥ê¥×¥È¤À¤±¤Ë¤·¤Æ¤ª¤¡¢
¤â¤¦°ìÊý¤Î Start ¥á¥½¥Ã¥É¤Ï¡¢¥á¥½¥Ã¥É̾¤òÊѹ¹¤·¤Æ¡¢Public ½¤¾þ»Ò¤òÉÕ¤±¤Æ¡¢³°Éô¤«¤é¸Æ¤Ó½Ð¤·¤Æ¼Â¹Ô¤ò¤·¤Æ¤â¤é¤¦À߷פËÊѹ¹¤ò¤·¤Þ¤¹¡£
¡¡
¡ã¥¨¥é¡¼¤Î¸¶°ø¡ä
¡¡£±¡¥GameManager Start ¥á¥½¥Ã¥ÉÆâ¤Î player.StopMove ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¡¡=>¡¡¥¨¥é¡¼È¯À¸
¡¡£²¡¥PlayerController Start ¥á¥½¥Ã¥ÉÆâ¤Ç GetComponent ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¡¢rb ÊÑ¿ô¤Ë Rigidbody ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¾ðÊó¤òÂåÆþ¤¹¤ë
¡¡£³¡¥£±¤Î½èÍý¤ÎÁ°¤Ë£²¤Î½èÍý¤¬½ª¤ï¤Ã¤Æ¤ª¤é¤º¡¢StopMove ¥á¥½¥Ã¥ÉÆâ¤Î rb ÊÑ¿ô¤¬ null ¤Ç¤¢¤ë¤¿¤á¥¨¥é¡¼¤¬È¯À¸¤¹¤ë
¡¡°Ê¾å¤Îή¤ì¤Ë¤è¤Ã¤Æ¡¢rb ÊÑ¿ô¤Ë¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ÎÂåÆþ¤ò¹Ô¤¦½èÍý¤¬´Ö¤Ë¹ç¤Ã¤Æ¤¤¤Ê¤¤¤³¤È¤¬Ê¬¤«¤ê¤Þ¤¹¡£
¡¡¤½¤³¤Ç¡¢¼¡¤Î¤è¤¦¤ËÊѹ¹¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡
¡ã¥¨¥é¡¼¤Î²ò¾ÃÊýË¡¤ÎÎã¡ä
¡¡£±¡¥PlayerController Start ¥á¥½¥Ã¥É¤ò public void SetUpPlayer ¥á¥½¥Ã¥É¤Ë̾Á°¤È½¤¾þ»Ò¤òÊѹ¹¤·¡¢³°Éô¤Î¥¹¥¯¥ê¥×¥È¤è¤ê¸Æ¤Ó½Ð¤»¤ë¥á¥½¥Ã¥É¤Ë¼Â¹Ô¤¹¤ë
¡¡£²¡¥GameManager Start ¥á¥½¥Ã¥ÉÆâ¤Ç¡¢player.SetUpPlayer ¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·¤ò¹Ô¤¦
¡¡£³¡¥PlayerController SetUpPlayer ¥á¥½¥Ã¥ÉÆâ¤Ç GetComponent ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¡¢rb ÊÑ¿ô¤Ë Rigidbody ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¾ðÊó¤òÂåÆþ¤¹¤ë
¡¡£´¡¥GameManager Start ¥á¥½¥Ã¥ÉÆâ¤Î player.StopMove ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¡¡=> StopMove ¥á¥½¥Ã¥ÉÆâ¤Î rb ÊÑ¿ô¤¬ÂåÆþ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¥¨¥é¡¼¤ÏȯÀ¸¤·¤Ê¤¤
PlayerController.cs
public void SetUpPlayer { // Start()¤ò½ñ¤´¹¤¨¤Æ¡¢³°Éô¤«¤é¸Æ¤Ó½Ð¤»¤ëÊ̤Υ᥽¥Ã¥É¤Ëºî¤êÂؤ¨¤ë
rb = GetComponent<Rigidbody>();
// ½é´ü¤Î»ÑÀª¤òÀßÄê
transform.eulerAngles = straightRotation;
// ¸½ºß¤Î»ÑÀª¤ò¡Öľ³ê¹ß¡×¤ËÊѹ¹(¤¤¤Þ¤Þ¤Ç¤Î»ÑÀª)
attitudeType = AttitudeType.Straight;
btnChangeAttitude.onClick.AddListener(ChangeAttitude);
btnChangeAttitude.interactable = false;
anim = GetComponent<Animator>();
}
GameManager.cs
¡¡¡¡IEnumerator Start()
{
// ¥¹¥¿¡¼¥ÈÃÏÅÀ¼èÆÀ
startPos = player.transform.position.y;
// Start¥á¥½¥Ã¥É¤Î½èÍý¤òÊ̤Υ᥽¥Ã¥É²½¤·¤Æ¡¢³°Éô¤«¤é¼Â¹Ô¤¹¤ë
player.SetUpPlayer(); // <=¡¡¡ù¡¡Äɲ乤ë
player.StopMove();
// ¾Êά
¡¡¤³¤Î¤è¤¦¤Ë¡¢Ê£¿ô¤Î½èÍý¤¬¶¥¹ç¤·¤Æ¤·¤Þ¤Ã¤Æ¾å¼ê¤¯¼Â¹Ô¤µ¤ì¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¤³¤Á¤é¤Ç¡¢
¼Â¹Ô¤¹¤ë½çÈÖ¤ò½ç½øΩ¤Æ¤Æ¥¹¥¯¥ê¥×¥ÈÆâ¤ËµÆþ¤·¡¢¤½¤ÎÄ̤ê¤Ë¼Â¹Ô¤µ¤»¤ëÀ߷פËÊѹ¹¤¹¤ë¤³¤È¤Ç
¼Â¹Ô½ç°Ì¤Ë¤è¤ë¥¨¥é¡¼¤òËɤ°¤È¤È¤â¤Ë¡¢
Unity Æâ¤Î½èÍý¤Ë°Í¸¤»¤º¤Ë¡¢À߷פ·¤Æ¤¤¤ë½çÈÖÄ̤ê¤Î½èÍý¤ò¼Â¹Ô¤·¤Æ¤¤¤¯¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡¥¹¥¯¥ê¥×¥È¤¬Áý¤¨¤Æ¤¤Æ¡¢Start ¥á¥½¥Ã¥É¤È Awake ¥á¥½¥Ã¥É¤¬Ê£¿ô¤Î¥¹¥¯¥ê¥×¥È¤Ë¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢¼Â¹Ô¤µ¤ì¤ë½çÈ֤ˤè¤Ã¤Æ¤Ï¥¨¥é¡¼¤ò°ú¤µ¯¤³¤¹¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢
Î㤨¤ÐÊ£¿ô¤Î Start ¥á¥½¥Ã¥É¤¬¤¢¤ë¾ì¹ç¤Ç¡¢Ê̤Υ¹¥¯¥ê¥×¥È¤Î¾ðÊó¤ò»²¾È¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢£±¤Ä¤Î¥¹¥¯¥ê¥×¥ÈÆâ¤Ë¾¤Î¥¹¥¯¥ê¥×¥È¤Î Start Æâ¤Î½èÍý¤ò½ç½øΩ¤Æ¤Æ¼Â¹Ô¤¹¤ë½èÍý¤òµ½Ò¤·¡¢
¥¤¥á¡¼¥¸¤·¤Æ¤¤¤ë½çÈÖÄ̤ê¤ËÆ°¤¯À߷פòÁȤßΩ¤Æ¤Æ¤¯¤À¤µ¤¤¡£