見出し画像

#6【備忘録】ProBuilderを使ってステージ作成してみる【無謀にも3D東方二次創作ゲーム作成】

こんにちは。しょう@ゆっくり学ぶチャンネルです。
少し時間が空きましたが、東方プロジェクトの2次創作3Dゲームの続きを作ります。

↓前回の記事

で、今はこんな感じになってます。

風雲霊夢城

・・・なんか、ゲーム性が変わってますね。
実は島を探索するゲームは試しにビルドしてみたのですが、とんでもない数のエラーが出てきて心が折れたので、以下の記事を参考に1から作り直しました。

あとUnity1weekの参加と部屋の改造で1月近く製作期間が空いてしまったのもあり、気持ちも切れてます。
こういうときは、別のプロジェクトを立ち上げたり、新しい教材の勉強を始めたほうが良いのです。
なので、このシリーズも次回で一区切りとしようと思います。

では、いつもお世話になっている、くろくまそふとさんの「ユニティちゃんパルクール2020」で気になった点や、変更を加えた点を上げていこうと思います。

1.キャラクターの制御にStarter Assetsを使用した

教材の中で、キャラクターの制御は「くろくまキャラクターコントローラー」を使っているのですが、前回の記事まででStarterAssetを使用していたので、そっちを使いました。
TimeManagerコンポーネントでは、ステージスタート前やゴール後等のタイミングではisActive = falseとなり、プレイヤーの動きを止めています。
StarterAssetを使うにあたり、以下のようにTimeManagerを変更しています。

public class TimeManager : SerializedMonoBehaviour {
  public bool isActive = false;

***省略***

    //KurokumaCharacterController player; //これを
    PlayerInput player; //こちらに変更

***省略***

    void Start() {

 ***省略***

        //player = GameObject.FindGameObjectWithTag("Player").GetComponent<KurokumaCharacterController>();//これを
        player = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerInput>();//こちらに変更

***省略***

    }
  
***省略***

    // カウントダウンタイマー
    void Timer() {
        if (!isActive || currentTime <= 0f) {
            return;
        }

***省略***
        }

***省略***

        if (currentTime <= 0f) {
            isActive = false;
 
        }
    }

***省略***

    // ステージスタート時のカウントダウン
    IEnumerator Countdown() {
        if (!countdownEnabled || countdownSe.Length == 0) {
            yield break;
        }
        isActive = false;
        // プレイヤーを動けなくする(=入力を受け付けないようにする)
        //player.InputEnabled = false;//これを
        player.enabled = false;//これに変更する
        // カウントダウン開始前の待ち時間
        yield return new WaitForSeconds(countdownWaitTime);
        countdownText.enabled = true;

***省略***

        isActive = true;
        // プレイヤーを動けるようにする
        //player.InputEnabled = true;//これを
        player.enabled = true;こちらに変更

***省略***

    }
}

player変数にPlayerInputを格納し、そのenebledを切り替えることにより、操作を受け付けるタイミングを制御しています。

PlayerArmatureのPlayerInPutコンポーネントでキャラクターを操作している

なお、StandardAssetを使いだしてから、謎のエラーメッセージが出ていて、ずっと見ないふりをしていたのですが、以下の記事で解決しました。
要はInputSystemとInputManager両方使えるように設定変更しました。

2.テクスチャの密度を調整した

テクスチャをデフォルト値のMaterialのベースマップにして使用すると、タイルの1枚1枚が異様に大きくなることがあるので、以下の記事を参考にMaterialのタイリングの数値を変更しました。

3.ワールドスペースにUIを表示させた

教材の上のページではゴール地点を作るときに、画像を作って、Materialにして、Quadに適用しています。

教材のとおり作成したゴール地点

ただ画像なので、文字をアニメーションさせることはできません。
なので、ステージ選択画面は以下のようにしました。

文字がプルプルしとる

以下の記事を参考にUIをワールドスペースに表示させて実現させています。

テキストの表示にはTextやTextMeshProではなく、その2つのいい所どりをしたアセット、SuperTextMeshを使用しています。かなりお高いのですが、かなり使い勝手はいいと思います(というか、TextMeshProが日本語環境に向いてなさすぎる)。

ただ、別のシーンの作成を進めてから、ステージ選択画面に戻ってくると、テキストが真っ黒になっていたり、消えていたことがありました。
これはSuperTextMeshのデフォルトMaterialから別の自作のMaterialに変えると直ったので、おそらく以下の記事のTextMeshProと同様のバグだと思われます。

↓こんな現象もあるらしい

4.ProBuilderあれこれ

ステージはProBuilderで作っています。「ユニティちゃんパルクール2020」の教材以外でも参考になりそうな記事が沢山ありました。
ただ、結構使うのに慣れがいりそうです。

次回予告・UIをコントローラーで動かせるようにするぜ!

スタート画面も作って、これで終わりっ!と思いましたが、一つ重大な欠点がありました。

コントローラー操作前提で作ってるのに、UI(ボタン)の操作はマウスでしかできないということです。
流石にコントローラーでゲーム内の操作を全てできるようにして、発表するべきですね。今後も必ず使いますしね。
ということで、燃え尽きて灰になっているモチベーションに、無理やり火をつけてアップロードまでいきますので、よろしくお願いします。

<次の記事>

この記事が気に入ったらサポートをしてみませんか?