チャムコード

チャーさんのUnityゲームラボです。Unityでゲーム制作する時に使うコードやノウハウをメインに発信しています。Unityでゲーム制作したいと思っているなら読んでください。

カメラ関連

unityでカメラを追従させる簡単なコードと方法の説明をする記事

投稿日:2019年3月13日 更新日:

うも、チャーさんです。

あなたはunityでカメラの追従をさせたい、

こう思ってませんか?

 

この記事ではオブジェクトをカメラで追従させる、

(カメラが追いかけてくれる)をできるようにする、

コードを説明してます。

 

なので、この記事の通りにやれば、

あなたもunityでカメラの追従ができるようになります。

 

またコードを単純に写すのでもいいですが、

カメラ追従の記述の仕組みも説明してるので、

コードの仕組みを知りたい場合も合わせて読んでみてください。

 

Unityでカメラを追従させる方法の動画バージョンはこちら

 

 

unityでカメラを追従させるコードと方法

 

で早速ですが、結論からいいます。

 

unityでカメラの追従をしたいなら、

カメラにスクリプトをつけて、

以下の記述を書けばOKです。

 

(*スクリプトはc#です)

 

 

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

public class followCamera : MonoBehaviour {

    public Transform target;
    public Vector3 offset;

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        transform.position = target.position + offset;
    }
}

 

そして、カメラを選択しインスペクタの画面の

 

 

この下から3番目のTargetのNoneのとこに、

あなたがカメラで追従したいオブジェクトを、

ヒエラルキーからドラッグ&ドロップしましょう。

 

ちなみにこれをする理由は記述だけ書いても、

この上の作業をしないとカメラで追従してくれないからです。

 

 

で、これだけでカメラは追従してくれるのですが、

ここからはなぜ上記の記述にすれば追従してくれるのか、

コードの仕組みを1から詳しく説明します。

 

 

unityでカメラで追従させるコードの理論の説明

 

それでは説明に入ります。

 

カメラで追従するターゲットの位置情報が必要

 

まずカメラで追従するには、

追従するターゲットの位置情報が必要になります。

 

(追従するターゲットの位置情報がないと

カメラはどこに行けばいいか、

わからなくなりますよね)

 

なので、ターゲットの位置情報を格納する、

変数が必要になるのです。

 

位置情報の取得のために変数を用意

 

でその位置情報の役割を果たすのが最初に宣言してる、

public Transform target;

になります。

 

これを使うことで、追従したいターゲットの

位置情報がゲットできるわけです。

 

 

ちなみに少し補足ですが、

Transformというデータ型は、

オブジェクトの位置情報を代入します。

 

(オブジェクトが動いてもその動いた位置の位置情報を代入)

 

 

そしてオブジェクトはプレイヤーとかを想定すると、

確実に動き回るので、Transformのデータ型で、

その位置情報を取得するわけです。

 

 

カメラの追従にはカメラの位置を動かす記述が必要

 

で、話を戻しまして追従したいターゲットの位置情報が、

手に入ったのはokですが、

次はカメラに移動を指示しないと行けません。

 

なぜならオブジェクトが動いたと同時に、

カメラも移動してくれなければ、

追従できませんよね。

 

なのでカメラ(というオブジェクト)の、

位置を変える記述が必要になるわけです。

 

 

そしてそのためのコードが、

 

 void Update () {
        transform.position = target.position;
    }

 

の、transform.position = target.position;

の部分になるわけです。

 

 

で transform.position という記述は、

位置情報を変えるという指示になります。

 

これをカメラにつけてるスクリプトに書くので、

カメラを移動させ追従させれるわけです。

 

 

カメラの追従先情報を指定する

 

とはいえ、この記述でカメラの位置を変えると言っても、

どの場所に?移動させるのか?となりますよね。

それも記述してあげないといけません。

 

で、それを示すのが、

= target.position; (ターゲットの位置に)

になるわけです。

 

 

targetには最初の変数宣言で、

追従したいターゲット(オブジェクト)の、

位置情報が入ります。

 

で、そのtargetのposition(位置)と指定してやることで、

カメラが常にtarget(追従したいターゲット)の位置まで、

動くわけです。

 

 

transform.position = target.position;

位置情報更新    ターゲットの位置に

 

という指示を出してるわけですね。

 

update関数の中に書く必要がある

 

でカメラで追従するためには、

フレーム毎に常に位置情報を更新する必要があります。

 

なぜならターゲットとするオブジェクトが、

動いた場合、カメラも合わせて位置情報を動かす必要が、

あるからです。

 

 

そのため以下のUpdateの関数の中に、

処理を入れることで、常にカメラがターゲットを、

追従してくれるわけです。

 

void Update () {
        transform.position = target.position;
    }

 

Updateはフレームが更新される毎に、

{}中括弧の中の処理を行う。

と言う関数です。

 

 

ちなみにフレームとはパラパラ漫画の感じで、

1枚1枚画面が高速で動いてる感じです。

 

で、これで完成かと思いきや、

そうでもありません。

 

 

確かにここまでのコードでちゃんと

カメラで追従してくれます。

 

しかし、この記述ですと、

ターゲットにしてるオブジェクトのど真ん中に

居座り、1人称視点のようなカメラの追従になります。

 

 

3人称視点でカメラを追従させるために

 

なので、少し後ろからターゲットをみて、

追いかけたい(3人称視点のような)場合、

カメラとターゲットの間に距離をあけてやる必要があります。

 

で、その距離をあけるためには、

x、y、zそれぞれにどれだけの値をたすか(距離をとる)

という情報が必要になります。

 

 

で、それを取得するために、

public Vector3 offset;

をかくわけです。

 

Vector3というデータ型は、x、y、z、

それぞれの数値を変数に代入できます。

 

なのでこの記述でoffsetという変数に、

x,y,zの値を代入しておけば、

その分だけターゲットから距離をとれると言うわけです。

 

つまり3人称視点が完成するわけです。

 

 

で、それを加味すると実際の記述が、

void Update () {
        transform.position = target.position + offset;
    }
}

になるわけです。

 

 

ターゲットの位置情報+距離の場所に移動せよ。

という記述ですね。

 

こうすることでゲームでよく見るような、

3人称型のカメラ追従をしてくれます。

 

(*ちなみにoffsetにはx,y,zに数値を代入する必要があります。

なのでインスペクタから入力しましょう。)

 

と言うわけでコードの仕組み説明を

しましたが、unityの知識がないと、

難しいですよね。

 

この説明が理解できなくても、

単純にスクリプトをコピペで動くので、

それをすればすぐカメラで追従できますよ!

 

unityでカメラで追従するまでの手順・ステップ

 

で、コードとコードの仕組みは説明したのですが、

一応カメラ追従までの全ての手順を載せておきます。

 

unityをつける

 

まずは当たり前ですが、

Unityを起動させましょう。

 

カメラとオブジェクトの用意

 

で次に、

カメラと追従したいオブジェクトを用意しましょう。

カメラは最初からあるので、オブジェクトですね。

 

オブジェクトは、

create>3D object

で作れますよ。

 

 

カメラにスクリプトをつける

 

で、次はカメラにスクリプトを追加しましょう。

(言語はc#です)

 

スクリプトを追加するにはカメラを選択した状態で、

インスペクター(デフォルトだと画面右)の下にある、

Add componentをクリックしましょう。

 

(この真上にあるAdd Component)

 

そしてその中にあるnew scriptをクリックしましょう。

スクロールすると一番下にあります。

 

でその後スクリプト名をつけることになりますが、

なんでもokです。

(一応補足するとわかりやすい名前がいいです)

 

スクリプトに記述をしよう

 

で待ってると、スクリプトのエディタが

立ち上がります。

 

macだとmono developというテキストエディターが、

たち上がるはずです。

 

で、立ち上がったら、

そこに記事冒頭のコードを記述しましょう。

 

 

一応再度載せます。

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

public class followCamera : MonoBehaviour {

    public Transform target;
    public Vector3 offset;

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        transform.position = target.position + offset;
    }
}

 

オブジェクトをドラッグ&ドロップしよう

 

で記述が終わったら、

メイン画面に戻って、

カメラを選択しインスペクターを見ましょう。

 

 

すると、しばし待つとAdd componentの上に、

Targetと、Offsetという項目が現れます。

 

このTargetのとこに、ドラッグ&ドロップで、

追従したいオブジェクトをこのNoneとなってるとこに、

画面左のヒエラルキーのとこから引っ張ってきましょう。

 

 

こうすることで、

その選んだオブジェクトの位置情報を取得できます。

 

(ちなみにこれをしないとカメラで追従できないので、

注意!)

 

offsetの値を入力しよう

 

さてこれでカメラの追従はされますが、

このままでは1人称視点になります。

 

1人称視点とはマイクラのような感じです。

 

なので3人称視点にするには、

offsetの値を入力しましょう。

 

 

下から2つ目のOffsetのとこです。

ここのx,y,zにそれぞれ値を入れるとその値の分だけ、

カメラの位置が変わります。

 

ちなみにこれは追従したいオブジェクトから、

その入力したい値の分だけ離れる。

 

という動きをするので、色々数字を入力して、

いいカメラの位置やアングルを見つけてみてください。

 

再生ボタンを押してテストしよう

 

で、それをしたら、

画面中央上にある再生ボタンをクリックしましょう。

 

 

そしてゲーム画面でカメラの位置が変われば成功です。

 

まとめ

 

unityでカメラの追従をしたいなら、

 

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

public class followCamera : MonoBehaviour {

    public Transform target;
    public Vector3 offset;

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        transform.position = target.position + offset;
    }
}

 

のコードを記述して、

targetの変数のとこに、

インスペクタでオブジェクトを代入することです。

 

そうすれば、ちゃんとカメラで追従してくれるので、

やってみてください。

 

 

また理論の説明もしましたが、

記述の仕組みを知りたい人向けに書いたので、

参考にしてみてください。

 

それでは、読んでもらってありがとうございました。

 

チャーさん

 

カメラ関連記事はこちら

Unityでカメラの切り替え機能の作り方はこちら

-カメラ関連

関連記事

Unityでカメラを回転させる方法(マウスの操作でカメラも回転します)

どうも、チャーさんです。 あなたはUnityでカメラを回転させたいですか?この記事では、 カメラをマウスで回転させる方法を書いてますので、   この記事を読めば、あなたはUnityでゲーム再 …

Unityでカメラの切り替え機能の作り方はこちら

どうも、チャーさんです。 あなたは、Unityでカメラを切り替えたいと思っていませんか?   この記事では、ゲームの再生中にキーボードの好きな キーを押したらカメラを切り替えることができる …

最新記事

チャーさん

Unityに関する記事を書いてます。

 

[簡単な経歴]

 

2018年-プログラムを始めUnityの存在を知りハマる。

2019年-エンジニアとして仕事開始(web系)

2021年-UnityでVR開発等にも手を出し始める。

現在-エンジニアとして活動しながらUnityも続行中。

 

youtubeでは、Unityに関する動画をあげてるので、

あなたのUnityスキルアップにどうぞ。