【Unity2D 入門】横スクロールアクションゲームを作ってみたい -カメラを追尾させる

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

さて、敵もできたし、はよ他の方に行きたいんですけど、
ちょっとやり残している事があるのでそこら編を微調整していきたいですね。

プレイヤーにカメラを自動追尾させる

今はプレイヤをちょっと引いた位置から見ているだけのカメラですけど、
プレイヤーが右左に動いたら、カメラのx軸を自動追尾してくれるようにします。

カメラObjectにC#Scriptを追加して、camera.csを作ります。
中身はこんな感じ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;
using System.Collections;

public class camera : MonoBehaviour {

    public GameObject player;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        transform.position = new Vector3(player.transform.position.x, 5, -10);
    }
}

new Vector3(player.transform.position.x, 5, -10);
このx軸がplayerのx軸と連動する訳です。(y、zは自分のtransformの値が入っています。)

このスクリプトの public GameObject player; この宣言でplayerObjectを扱えるようになるのですが、実際まだ何もセットされていないのでInspctorから playerObjectをセットしてあげます。

f:id:raharu0425:20140110140330p:plain

背景の無いところが見えないようにする

カメラが自動追尾してくれるのはうれしいのですが、
左右端に行くと背景の無いところが見えてしまって格好悪いのでこれをなおしたいですね。

f:id:raharu0425:20140110172205p:plain

プレイヤーに追尾していった為におきてしまったのでこれをマップの端が見切れるタイミングで
自動追尾しないようにすればいいのです。なのでcamera.csを修正します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using UnityEngine;
using System.Collections;

public class camera : MonoBehaviour {

    public GameObject player;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        transform.position = new Vector3(player.transform.position.x, 5, -10);

        if(transform.position.x < 0){
            transform.position = new Vector3(0, 5, -10);
        }

        if(transform.position.x >= 18){
            transform.position = new Vector3(18, 5, -10);
        }
    }
}

さあこれでエミュレートしてみましょう!

f:id:raharu0425:20140110200311p:plain

はいバッチリです!これで後ろの背景が無い場所が表示されなくなりました。

さて番外編のやり残した事を消化して所で次の難関、HPバーでもつけてみますか?に入ります。