読者です 読者をやめる 読者になる 読者になる

Unityを学ぼう【第3回】

前回を続きまして、
カメラ移動*1を進みたいと思います

今回概要

追尾カメラの実装

カメラ設定

まず、プレイヤーを見やすいように設定します

 1.[Main Camera] を選択
 2.[Inspector] -> [Transform] のパラメータ設定
   f:id:kou_yeung:20131018233852p:plain

追尾カメラ実装方法1

プレイヤーの入子にすれば、
プレイヤーが移動するとカメラも移動します

 1.[Main Camera] を [Player] にドラッグ&ドロップ
   f:id:kou_yeung:20131018234358p:plain

実行してみよう!
あれ?

  入子にすると、座標だけではなく
  角度も影響されてしまう

これは失敗例です

とりあえず、カメラを独立状態に戻します

追尾カメラ実装方法2

スクリプト作成

 1.[Main Camera] を選択
 2.[Inspector] -> [Add Component] -> [New Script]
 3.名前:CameraController
 4.[Create and Add]
 *[Assets]に保存されますので、[Scripts] に移動します

スクリプト編集

// CameraController.cs
using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour {
    public GameObject player; // ①
    private Vector3 offset;   // ②

    void Start() // ③
    {
        offset = transform.position; // ④
    }
    void LateUpdate () // ⑤
    {
        transform.position = player.transform.position + offset; // ⑥
    }
}
変数宣言
public GameObject player; // ①
private Vector3 offset;   // ②

①GameObject保存用変数、[Inspector]から設定できるように public にします
②カメラオフセット保存用変数、Start() 内初期化するので private にします

スクリプトスタート関数
void Start() // ③

スクリプト準備完了~更新関数の間に一回のみ実行されます
初期化コードはここに書くとよいでしょう

変数初期化
offset = transform.position; // ④

スタート時の座標を保存します

更新関数
void LateUpdate () // ⑤

Update() の代わりに LateUpdate() を使用します
LateUpdate()はすべてオブジェクトの Update() を実行後に呼ばれます

追尾座標設定
transform.position = player.transform.position + offset; // ⑥

GameObject座標 + カメラオフセット座標
これでGameObjectとの距離が固定されます

追尾ターゲット設定

スクリプトを保存しUnityに戻り以下操作を行います

 1.[Camera Controller] の Player 設定
   f:id:kou_yeung:20131019002913p:plainf:id:kou_yeung:20131019003120p:plain
   これで設定完了します

実行&テスト

実行して、[↑] [↓] [←] [→]を入力すると
プレイヤーが移動し、カメラはあとを追いかけます
これで追尾カメラの実装が完了です

次回予告:収集アイテム作成を学ぼう

*1:カメラ移動:http://unity3d.com/learn/tutorials/projects/roll-a-ball/moving-the-camera