Unityで3DのRPGを作っています。
参考にしているサイト~かめくめちゃん~
このサイトの通りにゲームの制作をしているのですが、シーン遷移後に停止されます。
#原因(?)
Box colliderの当たり判定とフェードを介してシーンを遷移させると、
から暗転し、シーンは変わりますが全く動かなくなります。
![イ
のようになって固まってしまいます。
固まってしまう原因がわかりません。
しかもシーンが切り替わった後に ▷ボタンの横の||ボタンを押すとしっかりと動きます。どうしてでしょうか?
下に表示されていたエラーは次の通りです。
エラーはUnity側でしか表示されていません。
エラーが出ていたスクリプトを下に示します。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5 6public class SceneLoadingPosition : MonoBehaviour { 7 [SerializeField] 8 private SceneMovementData sceneMovementData = null; 9 10 void Start() { 11 12 // シーン遷移の種類に応じて初期位置のゲームオブジェクトの位置と角度に設定 13 if (sceneMovementData.GetSceneType() == SceneMovementData.SceneType.StartGame) { 14 var initialPosition = GameObject.Find("InitialPosition").transform; 15 transform.position = initialPosition.position; 16 transform.rotation = initialPosition.rotation; 17 } else if (sceneMovementData.GetSceneType() == SceneMovementData.SceneType.FirstVillage) { 18 var initialPosition = GameObject.Find("InitialPosition").transform; 19 transform.position = initialPosition.position; 20 transform.rotation = initialPosition.rotation; 21 } else if (sceneMovementData.GetSceneType() == SceneMovementData.SceneType.FirstVillageToWorldMap) { 22 var initialPosition = GameObject.Find("InitialPositionFirstVillageToWorldMap").transform; 23 transform.position = initialPosition.position; 24 transform.rotation = initialPosition.rotation; 25 } 26 } 27}
c#
1 2using System.Collections; 3using System.Collections.Generic; 4using System.Text.RegularExpressions; 5using UnityEngine; 6using UnityEngine.UI; 7 8public class UnityChanTalkScript : MonoBehaviour 9{ 10 // 会話可能な相手 11 private GameObject conversationPartner; 12 // 会話可能アイコン 13 [SerializeField] 14 private GameObject talkIcon = null; 15 16 17 // TalkUIゲームオブジェクト 18 [SerializeField] 19 private GameObject talkUI = null; 20 // メッセージUI 21 private Text messageText = null; 22 // 表示するメッセージ 23 private string allMessage = null; 24 // 使用する分割文字列 25 [SerializeField] 26 private string splitString = "<>"; 27 // 分割したメッセージ 28 private string[] splitMessage; 29 // 分割したメッセージの何番目か 30 private int messageNum; 31 // テキストスピード 32 [SerializeField] 33 private float textSpeed = 0.05f; 34 // 経過時間 35 private float elapsedTime = 0f; 36 // 今見ている文字番号 37 private int nowTextNum = 0; 38 // マウスクリックを促すアイコン 39 [SerializeField] 40 private Image clickIcon = null; 41 // クリックアイコンの点滅秒数 42 [SerializeField] 43 private float clickFlashTime = 0.2f; 44 // 1回分のメッセージを表示したかどうか 45 private bool isOneMessage = false; 46 // メッセージをすべて表示したかどうか 47 private bool isEndMessage = false; 48 49 void Start() { 50 clickIcon.enabled = false; 51 messageText = talkUI.GetComponentInChildren<Text>(); 52 } 53 54 void Update() { 55 // メッセージが終わっているか、メッセージがない場合はこれ以降何もしない 56 if (isEndMessage || allMessage == null) { 57 return; 58 } 59 60 // 1回に表示するメッセージを表示していない 61 if (!isOneMessage) { 62 // テキスト表示時間を経過したらメッセージを追加 63 if (elapsedTime >= textSpeed) { 64 messageText.text += splitMessage[messageNum][nowTextNum]; 65 66 nowTextNum++; 67 elapsedTime = 0f; 68 69 // メッセージを全部表示、または行数が最大数表示された 70 if (nowTextNum >= splitMessage[messageNum].Length) { 71 isOneMessage = true; 72 } 73 } 74 elapsedTime += Time.deltaTime; 75 76 // メッセージ表示中にマウスの左ボタンを押したら一括表示 77 if (Input.GetButtonDown("Jump")) { 78 // ここまでに表示しているテキストに残りのメッセージを足す 79 messageText.text += splitMessage[messageNum].Substring(nowTextNum); 80 isOneMessage = true; 81 } 82 // 1回に表示するメッセージを表示した 83 } else { 84 85 elapsedTime += Time.deltaTime; 86 87 // クリックアイコンを点滅する時間を超えた時、反転させる 88 if (elapsedTime >= clickFlashTime) { 89 clickIcon.enabled = !clickIcon.enabled; 90 elapsedTime = 0f; 91 } 92 93 // マウスクリックされたら次の文字表示処理 94 if (Input.GetButtonDown("Jump")) { 95 nowTextNum = 0; 96 messageNum++; 97 messageText.text = ""; 98 clickIcon.enabled = false; 99 elapsedTime = 0f; 100 isOneMessage = false; 101 102 // メッセージが全部表示されていたらゲームオブジェクト自体の削除 103 if (messageNum >= splitMessage.Length) { 104 EndTalking(); 105 } 106 } 107 } 108 } 109 110 private void LateUpdate() { 111 // 会話相手がいる場合はTalkIconの位置を会話相手の頭上に表示 112 if (conversationPartner != null) { 113 talkIcon.transform.Find("Panel").position = Camera.main.GetComponent<Camera>().WorldToScreenPoint(conversationPartner.transform.position + Vector3.up * 2f); 114 } 115 } 116 117 // 会話相手を設定 118 public void SetConversationPartner(GameObject partnerObj) { 119 talkIcon.SetActive(true); 120 conversationPartner = partnerObj; 121 } 122 123 // 会話相手をリセット 124 public void ResetConversationPartner(GameObject parterObj) { 125 // 会話相手がいない場合は何もしない 126 if(conversationPartner == null) { 127 return; 128 } 129 // 会話相手と引数で受け取った相手が同じインスタンスIDを持つなら会話相手をなくす 130 if(conversationPartner.GetInstanceID() == parterObj.GetInstanceID()) { 131 talkIcon.SetActive(false); 132 conversationPartner = null; 133 } 134 } 135 // 会話相手を返す 136 public GameObject GetConversationPartner() { 137 return conversationPartner; 138 } 139 140 // 会話を開始する 141 public void StartTalking() { 142 var villagerScript = conversationPartner.GetComponent<VillagerScript>(); 143 villagerScript.SetState(VillagerScript.State.Talk, transform); 144 this.allMessage = villagerScript.GetConversation().GetConversationMessage(); 145 // 分割文字列で一回に表示するメッセージを分割する 146 splitMessage = Regex.Split(allMessage, @"\s*" + splitString + @"\s*", RegexOptions.IgnorePatternWhitespace); 147 // 初期化処理 148 nowTextNum = 0; 149 messageNum = 0; 150 messageText.text = ""; 151 talkUI.SetActive(true); 152 talkIcon.SetActive(false); 153 isOneMessage = false; 154 isEndMessage = false; 155 // 会話開始時の入力は一旦リセット 156 Input.ResetInputAxes(); 157 } 158 // 会話を終了する 159 void EndTalking() { 160 isEndMessage = true; 161 talkUI.SetActive(false); 162 // ユニティちゃんと村人両方の状態を変更する 163 var villagerScript = conversationPartner.GetComponent<VillagerScript>(); 164 villagerScript.SetState(VillagerScript.State.Wait); 165 GetComponent<UnityChanScript>().SetState(UnityChanScript.State.Normal); 166 Input.ResetInputAxes(); 167 } 168}
追記
VillageのUnityChanにはFirstVillageデータを設定しており
WorldMapのUnityChanにはWorldMapデータを設定しています。
シーン遷移後に停止してしまう理由等をお願い致します。
あなたの回答
tips
プレビュー