Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!

unity

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

投稿日:

Pocket

 

うも、チャーさんです。

 

あなたは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用の3Dモデルを探してる方、欲しい方ご注目!

自作のUnity用3Dモデルをリーズナブルな価格で販売してますので、以下のリンクより一度ご覧ください。

Unity用3Dモデルを見てみる

==========


スポンサードサーチ

関連記事

no image

unityでコンポーネントを取得する方法を詳しく解説

どうも、チャーさんです。 あなたはunityでコンポーネントを取得する方法を 探していますか?   この記事ではコンポーネントを取得する方法、 その際の変数宣言の書き方や、 コンポーネント名 …

no image

unityでキー入力で攻撃する方法(3分以内にできます)

どうも、チャーさんです。   あなたはunityでキー入力による攻撃を したいですか?   この記事ではunityでキー入力で攻撃を する方法を書いてますので、あなたがこれを読めば …

no image

unityでのダンジョンの簡単な作り方(コードコピペで作れます)

どうも、チャーさんです。   あなたは、unityでダンジョンを作りたいと 思っていませんか?   この記事ではunityでのダンジョンの作り方を 説明してまして、本記事を読めば …

no image

[unity]foreach内でget componentを使う方法

どうも、チャーさんです。   この記事ではunityのforeachループで get componentする方法を書きます。     なのでこの記事を読めば、 &nbsp …

no image

unityでオブジェクトを移動させたい人は読んでください。

どうも、チャーさんです。   あなたはunityでオブジェクトや、 プレイヤーなど自由自在に移動させたい、 そう思っていませんか?     キーボードの上下左右の矢印ボタ …

no image

unityでoculus questの開発をしたい方必見!手順まとめました

どうも、チャーさんです。   あなたはunityでoculus questの 開発をしたい、そう思ってませんか?     この記事ではunityでoculus quest …

no image

unity上でblender作成モデルが透ける時の解決法

どうも、チャーさんです。   あなたはunityにblenderで作ったモデルを 持ってきたものの、面が透ける現象が起こって 困っていませんか?     この記事は、透け …

no image

unityでマウスの座標を取得する方法(超簡単です)

どうも、大石です。   あなたはunityでマウスの座標を取得したい ですか?   この記事を読めば、あなたはすぐに マウスの座標を取得できますよ。   スポンサードサー …

no image

unityで敵を移動させる方法(詳細にわかりやすく説明します)

どうも、チャーさんです。   あなたはunityで敵を移動させたい、 そう思っていませんか?   コライダーなどでもできるが、他の方法が ないかと探してませんか?   & …

no image

unityでオブジェクトを回転させる方法「1分でできます」

どうも、チャーさんです。   あなたはunityでオブジェクトを回転させたいですか?   unityでゲームなど作るとオブジェクトを 回転させたい場面がありますよね。   …

no image

unityで弾の発射位置をコントロールする方法

どうも、大石です。 あなたはunityで弾の発射位置を自由に コントロールしたいですか?   この記事を読めばあなたの好きな位置から 弾を発射できるようになりますよ。   スポンサ …

no image

unityで攻撃に当たり判定をつける方法

どうも、チャーさんです。 あなたはunityで攻撃に当たり判定をつけたいですか?   この記事では、当たり判定をつける 方法を書いてるので、読めば当たり判定をつけれます。   とい …

no image

unityアセットの使い方を初心者でもわかるように説明。

  どうも、チャーさんです。   あなたはunityのアセットの使い方が、 わからず困ってませんか?   この記事ではunityのアセットの使い方を、 1から説明してます …

no image

unityで弾を発射する方法(簡単3ステップ)

どうも、大石です。   あなたは、unityで弾を発射したいですか? この記事を読めば、あなたはunityで弾を発射 できるようになります。   なので、弾を発射したければ、 この …

no image

blenderで作ったモデルをunityにインポートする方法「簡単です」

どうも、チャーさんです。   あなたはblenderで作ったものを、 unityで表示(インポート)したいと、 思っていませんか?   この記事では、あなたが作ったblenderの …

最新記事

チャーさん

プログラミング・筋トレ・unity系の記事などを書いてます。

大学卒業後→開業→個人事業主7年目ぐらいです。webサイト制作したり、unityでゲーム開発しております。

youtubeもやってまして、主にプログラミング動画とかunity系の動画をあげてるので見てください。