スキップしてメイン コンテンツに移動

Unityで町中⇔建物を実現する。


UnityでRPGの建物出入り的なのを作りたい。


簡単に言えば、町のシーンから家に入って、家を出ると家の出口に居るみたいな。

完全に個人での開発になるので、参考になるかは不明ですが。


あ、動画「お久ゲーム制作3Dアクションですよ!」を見ながらだと、どういう感じか分かりやすいかと。

(動画内では2階に上がってますが、あれはTrasform。Positionで遠くに置いてる二階に飛ばしてるだけです。この記事を読み終えれば恐らく出来ると思います。)


まず、今回作る仕組みについて。

Unityは比較的変数の入れ替え・受け渡しが簡単なので、変数でどのsceneから移ってきたかを判別させます。


まずスタート画面。(以下はスクリプト、そのままコピーできるかと思います。)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class startOP : MonoBehaviour {

    public static int Cscene1 = 0;

    public void OnClick(){
        SceneManager.LoadScene ("Scene1");
    }
}

初歩的な事では有りますが、public classの後は、プログラムのファイル名「~~~~.CS」の~~~~を入れてください。

まずこのシーンで、町のステージになるScene1用のどこのシーンから来たか判別するための変数を作ります。

Public staticとする事で、どこからでもこの変数を書き換えやアクセスが出来るようになります。

今回は「Cscene1」としましたが、ご自分の管理しやすいように名前は変えてください。

とりあえずで「0」を入れておきます。

で最初は普通にscene1のキャラクター初期位置になります。


続いてscene1(以下、スクリプト)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PositionScene1 : MonoBehaviour {

    public GameObject Player;

    // Use this for initialization
    void Start () {
        int x = startOP.Cscene1;
        Debug.Log(x);
        if (x == 1) {
            Player.transform.position = new Vector3 (0, 10, -30);
            Player.transform.rotation = Quaternion.Euler (0, -160, 0);
        }
    }
}

こちらもclass名はお好きなように。

このプログラムはscene1にCreate Emptyで作った箱に設定しておきます。

まずpublic GameObjectでプレイヤーキャラを指定する枠を作ります。

そこにscene1のInspectorでプレイヤーになるものを設定します。
(タグから自動で設定も出来なくはないが、プレイヤーは基本一つなので今回はこれで。)

まず、sceneが始まった時に、void Startで先程作った変数を取得します。
Debug.Logはプレビューで動作の確認用。

最初にこのscene1を読み込んだ時点では変数は「0」なので、特に何もなくプレイヤーは配置したとこから。


町の中から建物に入ります。

建物に入るスクリプトは以下のように。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Scene1inTATEMONO : MonoBehaviour {

    void OnTriggerEnter(Collider hit){
        if (hit.CompareTag ("Player")) {
            SceneManager.LoadScene ("SceneTATEMONO1");
        }
    }
}

建物入り口に後は当たり判定を置き、そこにTagでPlayerが付いたものがぶつかると、scene移動で建物内に入ります。
入り口用の当たり判定は、「Is Trigger」にチェックを入れておいてください。


さてここからが本題。建物から出たときに、先程のscene1でスタート地点ではなく建物入り口前に出るようにします。

建物出口のプログラムは以下。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Scene1outTATEMONO : MonoBehaviour {

    void OnTriggerEnter(Collider hit){
        if (hit.CompareTag ("Player")) {
            startOP.Cscene1 = 1;
            SceneManager.LoadScene ("Scene1"); 
        }
    }
}

ここで、最初に作った変数に1を入れます。

それ以外は入る時のプログラム・当たり判定と一緒です。


改めて、scene1のプログラムを見てみましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PositionScene1 : MonoBehaviour {

    public GameObject Player;

    // Use this for initialization
    void Start () {
        int x = startOP.Cscene1;
        Debug.Log(x);
        if (x == 1) {
            Player.transform.position = new Vector3 (0, 10, -30);
            Player.transform.rotation = Quaternion.Euler (0, -160, 0);
        }
    }
}

先程は最初に作成した変数に「0」が入っていたのでif文以下の処理は行われていませんでしたが、今回は「1」が入っています。


1が入っている場合、

  Player.transform.position = new Vector3 (0, 10, -30);
  Player.transform.rotation = Quaternion.Euler (0, -160, 0);

Playerの枠に設定されたもの、今回はプレイヤーキャラが、この場所に自動で置かれます。

まず上の文が、絶対座標での位置。カッコ内は、x、y、zの位置です。
今回は建物入り口前。

ついでに、建物が回転しているので、その向きに合わせてキャラクターを回転させます。
これもカッコ内はx、y、zです。

両カッコ内は、物の位置に合わせて置いてください。
(多分入り口の位置を取得して、そこから+幾つとかも出来るのですが、今回は割愛)


これで、建物に入ったり出たりの完成です!

今回のシステム、他にも利用法は幾つかあります。

イベント的なシーンで変数を入れ替えて、物の配置を一気に変更したり、建物の出口を別の世界にしたり。

使い方は、色々と今後も紹介できると思います。


さて今回の方法、完全にkou0128の独自方法なので、恐らくもっと簡単な方法も有るかと思います。

少しでもゲーム開発の役に立てばと思います。

案外個人開発で困るのが、情報集めだったりするので、今後はこうして作ったプログラムの紹介をしていきます。


それでは、最後まで読んで頂きありがとうございました。

Kou0128がお送りいたしました!


コメント

このブログの人気の投稿

3DCADでゲーム用の銃を作っていく ~活動報告190925~

3DCADのFusion360を使って、銃の3Dモデルを作ります。 どうも、kou0128です。 昨日、思ったよりもガチャゲーの制作に時間がかかる事が判明し、VRの制作に戻ります。 まずは、3DCADでモンスターを撃つ銃のモデルを作っていきます。 使うのはFusion360という3DCADソフトです。 作ってる途中の画像じゃなく、いきなり原型が出来てしまってますが・・・ 使い方はを細かく紹介するブログと動画は、また作ります。 さて原型を作りましたが、もう少し銃っぽさを出していきます。 グリップ部分チェッカリングを付けていきます。 実際の拳銃でも滑り止めについていることが多いし、平面な部分を減らしていくことでのっぺり感を減らせるんじゃなかろうかという感じです。 グリップのチェッカリングと、スライドの分割溝を付けることで、一気にのっぺり感が減りました。 ただ、今回作ったモデルはゲーム中にサイト覗きっぱなしなので、サイドのデザインは関係ないという。 やっぱり作るならクオリティにこだわりたいじゃないですか。 今後の練習と思えば、全然苦になりません。 サイドにデカールを貼ってみました。 簡単に絵を張り付ける機能も標準で搭載されているので、3D上でモデルとステッカーのあわせが試せるという使い方が出来ます。 3Dプリンタでモデルを出して、プリンターでシールを印刷すれば実物で再現できそう。 うーん、やっぱり3DCADでモデル作ると3Dプリンタで出してみたいという思いにもなります。 やっぱり買おうかなぁ・・・・ 閑話休題 Windows10搭載のペイント3Dで色を塗ってみました。 これでテクスチャデータが書き出せたら、神ソフトなのですが試してみた感じ、全然上手い事行きません。 やっぱりBlenderで色を付けるしかないですね・・・ そんな訳でBlenderに取り込みます。 BlenderのUV展開で色を付けることできないかなぁ・・・と以前から考えてますが、何故かペイント機能が出ない。 というか、そもそもUV展開された状態が...

SL230~リアブレーキ&シフトペダルの調整~

今回は以前より自分のライディングポジションに合わなかった、 リアブレーキペダル&シフトペダルの位置調整をしていきます。 まずは、リアブレーキの調整からしていきます。 はい、調整後です。 調整方法はいたって簡単です。 この金色のナットの位置調整をして終わりです。 ね?簡単でしょ? 流石に詳しく説明をします。 1. まず、下のねじの山を確認し、金色のナットとステン(?)のナットが近づく方と離れる方を確認します。 2. でペダルを下げたい場合は、近づく方向に回し、上げたい場合は離れる方向に回すだけです。 説明終わり。 リアブレーキペダルの調整は恐ろしく簡単でした。 注意点としては、 1. 電気をONにしてブレーキを踏んだ時、ブレーキーランプが点きっぱなしにならない事に確認する。(点きっぱなしだと、「整備不良」でお巡りさんに捕まるよ!) 2. ブレーキを踏んでいない時に、ブレーキパッドとブレーキディスクが当たってないか確認する。 この二つを確認して、試し乗りして問題なければ終了です。 これで、長距離でも疲れにくくなりましたね。 さて、次はシフトペダルの調整をしていきましょう。 シフトペダルの調整は本来、この 二つのナットの位置を変えて調整しますが、今回は、 元の接続部のとこから変えていきます。 それでは説明を。 1. まず、シリコンスプレーを吹いて、ねじを緩めます。 2. シフトペダルは横方向に遊びが有るので、そのまま取り外し。 3. ここから位置を決めながら、少しづつ角度を変えていきます。(かなり大きく変化するので良い位置を見つけるのは難しいよ) 4. で、位置が決まったらねじを付けて固定です。(締め過ぎ注意、なめたら詰みだよ!) で、あとは試し乗りして気に要らなけりゃ、変えてまた試し乗りという流れですね。 これでシフトペダルの調整は終了です。 自分がした感じだとブレーキペダルは簡単でしたが、シフトペダルは少し面倒かなという印象です。 今回自分がしたときは、...

「このカードを語りたい」第2回 クラヤミノツボ DARK MEMORY CONTAINER【デュエマ】

どうもkou0128改め、kouhei0128です。 「このカードを語りたい」第2回の今回は、なんかダメそうな見た目だなぁと思ってたら本当に禁忌レベルの使われ方になった、 クラヤミノツボ DARK MEMORY CONTAINER このカードについて語って行きたいと思います。 1.性能よりも前にまず見た目が危なそう。 このカードを見て、皆様はどんな印象を持たれましたか? 見た目・名前から「なんかDARK MATERIAL CONPLEXに似てるなぁ」そうは思いませんか? とは言え性能で見ると、あのカード程の高いパワーも持っていなければ、効果も3色5マナの割には強制2ドローと、シールド追加時に墓地から蘇生出来る効果です。 「シールド追加ってコスト高いカードが殆どだし、出した上で2ドローだから、まあそんなに大した事無いだろう」と、そんな風に考えた時期がありました。 2.ちゃんと性能全部が駄目だった このカードが出た王道Wの第2弾時点ではそれほど相性の良いカードは発見されていませんでした。 しかし、王道W第3弾にこのカードが入ってました。 前回語ったこのカード、「アンリミテッド・アヴァラルド 〜地獄帰りの騎士〜」です。 これまでのカードプールでは、墓地にクラヤミノツボを持っていく方法はエマージェンシータイフーンなど軽量なカードが有りましたが、蘇生効果を発動する為のシールド追加手段に乏しかったのが現実でした。 しかし、アンリミテッド・アヴァラルドは3ドロー2捨てして、シールド追加。 つまり3ドローした時点で、手札にクラヤミノツボが2枚存在するなら、2捨てで墓地に置くことでクラヤミノツボをシールド追加時に2体蘇生出来ます。 いや、ダメだよ。 色も全く同じなので、公式も想定済みのコンボかもしれませんが、この2体蘇生から闇王ゼーロを使うループに入るデッキが大暴れしているのは、皆様も承知の事でしょう。 特にクラヤミノツボのツボ自身が出た時に強制2ドローを持っている為、2体蘇生した段階で手札0でも、4ドローでゼーロ+闇3枚が揃ってしまえば闇王ゼーロを代替えコストを払って使うことが可能です。 余りにも闇王ゼーロの為のカードと言わんばかりの性能をしています。 これは運営の想定通りの動きなのでしょうか? この記事を書いてる最中にもハンデスを軸...