🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

1443閲覧

悪路王2020をチュートリアル通りに進めていたが障害物が流れてこない

endrin

総合スコア0

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/02/26 16:55

編集2021/03/08 17:13

前提・実現したいこと

私は今このサイトのように悪路王2020という2Dゲームを作っています。
ですが途中で実行したら障害物(スクショでいうWallです)が流れてきてくれませんでした。
スクリプトもインスペクターの値なども多分間違えているところはないと思います。
一応、全てのスクリーンショットを載せておきます。
イメージ説明
イメージ説明
※floorのインスペクターを追加(3/9)
floorのインスペクター

該当のソースコード

Wall

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[RequireComponent(typeof(SpriteRenderer))] 6public class Wall : MonoBehaviour 7{ 8 9 SpriteRenderer spriteRenderer; 10 float speed = 5; //とりあえずデフォルト値を5としておく 11 12 public float Speed 13 { 14 set 15 { 16 speed = value; 17 } 18 } 19 20 void Update() 21 { 22 transform.position = new Vector2(transform.position.x - speed * Time.deltaTime, transform.position.y); 23 } 24 25 //サイズと位置を調整 26 public void SetWall(Vector2 size) 27 { 28 spriteRenderer = GetComponent<SpriteRenderer>(); 29 spriteRenderer.size = size; 30 transform.position = new Vector2(transform.position.x, transform.position.y + size.y / 2); 31 } 32 33 //画面外に出たら破棄(※テストプレイ時にシーンビューに映っていると破棄されないので注意) 34 private void OnBecameInvisible() 35 { 36 Destroy(gameObject); 37 } 38 39}

WallSpawner

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class WallSpawner : MonoBehaviour 6{ 7 8 public bool isActive = false; 9 10 [SerializeField] 11 GameObject wallPrefab = null; 12 [SerializeField, Min(0.1f)] 13 float defaultMinWaitTime = 1; 14 [SerializeField, Min(0.1f)] 15 float defaultMaxWaitTime = 1; 16 [SerializeField] 17 Vector2 defaultMinSize = Vector2.one; 18 [SerializeField] 19 Vector2 defaultMaxSize = Vector2.one; 20 21 bool isSpawning = false; 22 float minWaitTime; 23 float maxWaitTime; 24 Vector2 minSize; 25 Vector2 maxSize; 26 Coroutine timer; 27 28 //外部から値を代入するためのプロパティ 29 public float MinWaitTime 30 { 31 set 32 { 33 //あまりにも小さい値になるとものすごい数の障害物が生成されてしまうので、0.1未満にならないようにする 34 minWaitTime = Mathf.Max(value, 0.1f); 35 } 36 get 37 { 38 return minWaitTime; 39 } 40 } 41 42 public float MaxWaitTime 43 { 44 set 45 { 46 maxWaitTime = Mathf.Max(value, 0.1f); 47 } 48 get 49 { 50 return maxWaitTime; 51 } 52 } 53 54 void Start() 55 { 56 InitSpawner(); 57 } 58 59 void Update() 60 { 61 if (!isActive) 62 { 63 //生成中なら中断する 64 if(timer != null) 65 { 66 StopCoroutine(timer); 67 isSpawning = false; 68 } 69 70 return; 71 } 72 73 //生成中じゃないなら生成開始 74 if (!isSpawning) 75 { 76 timer = StartCoroutine("SpawnTimer"); 77 } 78 } 79 80 //初期化用メソッド 81 public void InitSpawner() 82 { 83 minWaitTime = defaultMinWaitTime; 84 maxWaitTime = defaultMaxWaitTime; 85 minSize = defaultMinSize; 86 maxSize = defaultMaxSize; 87 } 88 89 //生成処理を行うコルーチン 90 IEnumerator SpawnTimer() 91 { 92 isSpawning = true; 93 94 GameObject wallObj = Instantiate(wallPrefab, transform.position, Quaternion.identity); 95 Wall wall = wallObj.GetComponent<Wall>(); 96 97 float sizeX = Random.Range(minSize.x, maxSize.x); 98 float sizeY = Random.Range(minSize.y, maxSize.y); 99 wall.SetWall(new Vector2(sizeX, sizeY)); 100 101 float waitTime = Random.Range(minWaitTime, maxWaitTime); 102 yield return new WaitForSeconds(waitTime); 103 104 isSpawning = false; 105 } 106 107}

よろしくお願い致します

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

U_U_Jenkins

2021/03/02 17:47

WallのSpeedを5から50とか大きな値に変更したらどうなりますか?
endrin

2021/03/02 23:12

コメントありがとうございます。 50や100に変更してみましたが、しばらく待っても何も変わらず障害物が現れることは無かったです...
Youbun

2021/03/06 07:12 編集

floorのアセット(画像)のInspectorの表示も貼り付けてみてください。 GameObject wallObj = Instantiate(wallPrefab, transform.position, Quaternion.identity); この行にブレークはってオブジェクトが生成されていることを確認して、 表示されないけどオブジェクトの生成はされているのかどうかも調べてみてください
guest

回答2

0

この問題は解決しましたか?

投稿2021/09/26 06:57

jw_9f

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1枚目のスクショに写っている黄色い三角の警告マークをよく読んでみてください。

「(略)正しく表示されないことがあります」と書いてありますよね?

おそらくスプライトの設定がうまくいってないので表示されない可能性があります。
まずは、三角の警告が消えるようにスプライトの設定を見直してみてください。

投稿2021/03/03 02:36

JunSuzukiJapan

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

endrin

2021/03/05 09:47

警告を消しても解決できませんでした... 他は何か要因ありそうでしょうか><
JunSuzukiJapan

2021/03/06 01:20 編集

あれ、文の最後が変でしたね。失礼しました。 Wall以外のものはきちんと動作しているのでしょうか? つまり、プレイヤーは表示されていて、ジャンプもできますか? プレイヤーに問題がないのであれば、普通に考えれば、WallSpawnerクラスの11行目あたり ``` GameObject wallPrefab = null; ``` という部分ですが、このwallPrefabにUnityエディタ上でWallのプレハブを設定し忘れるのがありがちです…が、画像を見ると設定されているみたいですね。 あとチェックするとすれば、Consoleの出力に何かエラーが表示されていないか見てみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問