質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

88.91%

障害物が動いてくれない・・

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 511
退会済みユーザー

退会済みユーザー

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

イメージ説明

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
    //インスペクタに表示する変数
    [SerializeField]
    float speed = 0.0f;
    [SerializeField]
    float jumpPower = 30.0f;
    [SerializeField]
    Transform groundCheck;
    //インスペクタには表示しない変数
    bool jumped = false;
    bool grounded = false;
    bool groundedPrev = false;
    Animator animator;
    Rigidbody2D rigidBody2D;
    //初期化
    void Start()
    {
        //コンポーネントを取得
        animator = GetComponent<Animator>();
        rigidBody2D = GetComponent<Rigidbody2D>();
    }
    //毎フレームの処理(一般)
    void Update()
    {
        //接地チェック
        //GroundCheckオブジェクトに床などが重なってるならtrue
        grounded = (Physics2D.OverlapPoint(groundCheck.position) != null) ? true : false;
        //接地してるかどうかの分岐
        if (grounded)
        {
            //接地しているならジャンプを許可
            if (Input.GetMouseButtonDown(0))
            {
                Jump();
            }
        }
        //ジャンプしてるかどうかの分岐
        if (jumped)
        {
            animator.SetTrigger("Jump");
            //ジャンプ終了(前フレームで接地してなくて、今のフレームで接地したとき)
            if (!groundedPrev & grounded)
            {
                jumped = false;
            }
        }
        else
        {
            animator.SetTrigger("Dash");
        }
        //このフレームの接地状態を保存
        groundedPrev = grounded ? true : false;
    }
    //毎フレームの処理(物理演算)
    void FixedUpdate()
    {
        if (grounded)
        {
            rigidBody2D.velocity = new Vector2(speed, rigidBody2D.velocity.y);
        }
    }
    //ジャンプ
    void Jump()
    {
        jumped = true;
        rigidBody2D.velocity = Vector2.up * jumpPower;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
    //インスペクタに表示しないpublic変数
    [System.NonSerialized]
    public int level = 1;
    [System.NonSerialized]
    public int score = 0;
    [System.NonSerialized]
    public bool playing = false;
    //インスペクタに表示するprivate変数
    [SerializeField]
    GameObject player;
    [SerializeField]
    int levelUpTime = 6; //レベルアップするまでの時間
    [SerializeField]
    int maxLevel = 10;
    [SerializeField]
    float addScoreInterval = 6; //スコア加算間隔
    [SerializeField]
    int addScoreCofficient = 1; //スコア加算係数
    [SerializeField]
    float playerSpawnX = -7.0f;
    [SerializeField]
    float playerSpawnY = 3.0f;
    //インスペクタに表示しない変数
    int highScore = 0;
    string highScoreKey = "highScore";
    //UI取得用
    [SerializeField]
    Image titleLogoImg;
    [SerializeField]
    Text clickStartTxt;
    [SerializeField]
    Text gameOverTxt;
    [SerializeField]
    Text tryAgainTxt;
    [SerializeField]
    Text scoreLabelTxt;
    [SerializeField]
    Text scoreNumTxt;
    [SerializeField]
    Text highLabelTxt;
    [SerializeField]
    Text highNumTxt;
    //初期化
    void Start()
    {

    }

    //毎フレームの処理
    void Update()
    {
        //ゲーム中の処理
        if (playing)
        {
            if (highScore < score)
            {
                highScore = score;
            }
            //スコアを表示
            scoreNumTxt.text = score.ToString("d6");
            highNumTxt.text = highScore.ToString("d6");
        }
        //タイトルまたはゲームオーバー
        else
        {
            //クリックされたらゲーム開始
            if (Input.GetMouseButtonDown(0))
            {
                StartGame();
            }
        }
    }
    //ゲーム開始処理
    void StartGame()
    {
        //ガベージコレクション実行
        System.GC.Collect();
        //初期化
        score = 0;
        level = 1;
        //ハイスコア読み込み
        highScore = PlayerPrefs.GetInt(highScoreKey, 0);
        //タイトルまたはゲームオーバー画面非表示
        titleLogoImg.enabled = false;
        clickStartTxt.enabled = false;
        gameOverTxt.enabled = false;
        tryAgainTxt.enabled = false;
        //スコアを表示
        scoreLabelTxt.enabled = true;
        scoreNumTxt.enabled = true;
        highLabelTxt.enabled = true;
        highNumTxt.enabled = true;
        playing = true;
        //もし地形やコインが残ってたら消去
        DeleteObjects("Wall");
        DeleteObjects("Item");
        //プレイヤー生成
        Instantiate(player, new Vector3(playerSpawnX, playerSpawnY, 0.0f), Quaternion.identity);
        //ゲーム開始後、一定時間ごとの処理
        InvokeRepeating("LevelUp", levelUpTime, levelUpTime);
        InvokeRepeating("AddScoreByTime", addScoreInterval, addScoreInterval);
    }
    //ゲームオーバー処理
    public void GameOver()
    {
        CancelInvoke();
        playing = false;
        // ハイスコアを保存
        PlayerPrefs.SetInt(highScoreKey, highScore);
        PlayerPrefs.Save();
        //ゲームオーバー画面表示
        gameOverTxt.enabled = true;
        tryAgainTxt.enabled = true;
    }
    //スコア加算
    void AddScoreByTime()
    {
        score += addScoreCofficient * (10 + level - 1);
        Debug.Log(score);
    }
    //レベルアップ
    void LevelUp()
    {
        if (level < maxLevel)
        {
            level++;
            Debug.Log(level);
        }
    }
    //ゲームオブジェクトの一括削除
    void DeleteObjects(string tag)
    {
        GameObject[] deleteObjects = GameObject.FindGameObjectsWithTag(tag);
        if (deleteObjects.Length > 0)
        {
            foreach (GameObject obj in deleteObjects)
            {
                Destroy(obj);
            }
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Wall : MonoBehaviour
{
    [SerializeField]
    float speed = 10.0f;
    [SerializeField]
    float minScaleX = 4.0f;
    [SerializeField]
    float minScaleY = 3.0f;
    [SerializeField]
    float maxScaleX = 6.0f;
    [SerializeField]
    float maxScaleY = 7.0f;
    bool inCamera = false;
    Rigidbody2D rigidBody2D;
    //初期化
    void Start()
    {
        //コンポーネントを取得
        rigidBody2D = GetComponent<Rigidbody2D>();
        //壁の長さをランダムに変更
        float scaleX = Random.Range(minScaleX, maxScaleX);
        float scaleY = Random.Range(minScaleY, maxScaleY);
        transform.localScale = new Vector3(scaleX, scaleY, transform.localScale.z);
    }
    //物理演算
    void FixedUpdate()
    {
        rigidBody2D.velocity = Vector2.left * speed;
    }
    //消去処理
    public void DestroyBlock()
    {
        Destroy(gameObject);
    }
    //カメラ内外の判定処理
    void OnBecameVisible()
    {
        inCamera = true;
    }
    void OnBecameInvisible()
    {
        //一度画面内に入って、また出たときに消去する
        if (inCamera)
        {
            DestroyBlock();
        }
    }
}

このコードも間違えてないと思うますが・・ここは違うんじゃないか?と思う方はご教授お願いします。
また、ほかのスクリーンショットが必要な場合はお知らせください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

単純にWallプレハブにWallスクリプトが割り付けられていないからですね。
今のWallプレハブはただの絵を表示するだけのオブジェクトなだけで、動作を指示するスクリプトが割り付けられていなければ、当然Wallオブジェクトも動きません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/10 10:35

    あっ・・・そうですね。ありがとうございます!私の確認ミスでした!ありがとうございました(^^)/~~~

    キャンセル

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る