Unityでゲーム、アプリ開発

Unityで初めてゲームやアプリを作る人のための支援ブログです。

Unity 2Dゲームで背景を自動でスクロールさせてみよう! 2Dゲーム作り①

今回は2Dゲーム作りにおいて背景、主に地面ブロックをスクロールさせて
一定の距離まで行ったらまたループさせる様にする方法です!


2Dゲームで背景を自動でスクロールさせてみよう!

f:id:Phoenix9056:20200516043009p:plain

どうもゆうきでっす!
2Dゲームの学習は今回初めてやってみたのですが、
本読んだり、インターネットの情報を見たり考えて
インターネットの情報は本当に上の順位にあるやつ大体スクリプト使えない!笑笑

謎めきすぎて、Unityのバージョンによっては多少適当でも使えることもあったり
自分の使い方が間違っていたり、見ている記事の説明不足で自分の知識がなく
どうやって良いのか分からなかったり要因は様々です!

と言うことでやっていきましょう!


今回プロジェクトは2Dで開いてください。

f:id:Phoenix9056:20200516044735p:plain

エディタ画面上部にあるWindow⇨Asset Storeを選択してアセットストアを開いて
Rounded Blocksと検索してインポートしてください。
また、バージョンによってはブラウザからのインポートになるので下記リンクより。
assetstore.unity.com

※アセットストアの使い方が分からない方は下記記事を参考にしてください。
www.unityprogram.info



ある程度Unityを触っている方の説明になるのでご了承ください。泣

f:id:Phoenix9056:20200516045425p:plain

HierarchyをクリックしてCreate Emptyを選択して
空のGameObjectを作成してInspectorより名前をGroundに変更して
①の様に作成します。
と言うのも、地面のオブジェクトをまとめておくためなので必要ないな
と思う方は飛ばしてください。

次にProject⇨Assets内にある先程インポートした②Rounded Blocks
があるのでクリックして、③の中から配置したい好きなブロックを選んで
④のScene画面にドラッグしてドロップしましょう。

Hierarchy内の⑤の様に先程作成した①Groundにブロックオブジェクトを
重ねる様にドラッグ&ドロップして子要素にしてまとめていきます。
なんでまとめるかと言うとコレから色んな作業をしていく中で楽になるからです。

シーンにブロックを配置するともちろんぐちゃぐちゃのままなので
各ブロックのInspector内にある⑥のTransform内にあるPosition
最初の一つはX0、Y-5にしますがYは高さになるので自分が好きな位置を
入力して全て高さを均一にしましょう。
Zは奥行きになるのでにします。

⑦のBox Collider 2DInspector内の一番下にあるAdd Componentから検索して
追加するとそのオブジェクトの幅がSizeXの値から分かります。
今回使うブロックの幅は5.12と微妙な数字になるのですが、
ブロックを並べる時最初のブロックを軸にしてPositionXの値を左に並べるなら5.12にして
右に並べるときは-5.12にして綺麗に並べていきましょう。

今回Box Collider2Dコンポーネントを追加したのは大きさを測るためにも必要なのですが
キャラクターをコレから使用した時の当たり判定に使用する為が1番の要素です。


次にスクロールするためのスクリプトを作っていきます。

f:id:Phoenix9056:20200516052218p:plain


Hierarchy内にある①のブロック達に
②のスクリプトを追加していきます。

Project⇨Asset内で、右クリック⇨Create⇨C# Scriptを選択して
名前をScrollにしましょう。
次のコードをコピー&ペーストするか同じ記述にしてください。

using UnityEngine;
using System.Collections;


public class Scroll : MonoBehaviour
{
    //スピードをインスペクターから選べる様にするよ!
    public float scrollSpeed = 1.0f;
    //float型をstartとendで宣言します。
    public float start;
    public float end;

    private void Update()
    {
        //スクロールの処理を計算。
        transform.Translate(-1 * scrollSpeed * Time.deltaTime, 0, 0);
        //スクロール終了の判定を新しく作った関数ScrollEndで参照します。
        if (transform.position.x <= end) ScrollEnd();
    }

    void ScrollEnd ()
    {
        //スクロールした分だけ距離を戻します。
        transform.Translate(-1 * (end - start), 0, 0);
       
    }


}

出来上がったスクリプトをスクロールしたいブロックに
全てドラッグ&ドロップしてアタッチしてください。

Inspector内のスクリプトの設定ですが、
スクロールスピードは好きな数字にしてください。
スタートとエンドは今回5.12の幅のブロックを5個配置していて
5.12✖️5=25.6になるのでそれを➗2した数12.8を
startに入れてendには-12.8を入力してください。

あまりにもブロックの数が多すぎたり大きいオブジェクトを
使うとエラーを起こしてしまいます。

と言うのも背景もスクロールさせようと思ったのですが
幅が大きすぎてある一定の所までいくとこれ以上無理!!って
Unityに言われました笑笑

ってな感じで今日は終わりたいと思います。

ご視聴ありがとうございました!!


ゆうきさんの今日の妄想動画!

youtu.be



※他のオススメアセットをお探しの方は下記カテゴリから覗いて見てください。
www.unityprogram.info

※Unityを学習していきたい方は下記カテゴリから。少しめんどくさくなってきます。
www.unityprogram.info

※本格的に3Dゲームを作っていきたい方は下記カテゴリより。
www.unityprogram.info

※実際に使って見たオススメの学習本は下記カテゴリから見てください。
www.unityprogram.info

※初心者に向けた簡単な記事は下記カテゴリを参考にしてください。
www.unityprogram.info