先日の記事で、爆誕したユニティちゃん。
ですがカメラが固定で、動き回ると見切っちゃいます……のでカメラをいじっていきましょう。
Contents
カメラを追従させる
まずは簡単にカメラ追従する方法です。
ヒエラルキーからメインカメラを選択すると
こんな感じでメインカメラからの視点が表示されるんですね。
この状態で、インスペクターのトランスフォームの値を変更するとカメラの初期ポジションが変更できます。
TPSっぽくなった(笑)
その上で、ヒエラルキーのメインカメラを
ユニティちゃんの子オブジェクトとなるようにドラッグすると
追従されました♪
ユニティちゃんを追従しつつも、向きが固定されたカメラ
作りたいなぁとおもっているものは、キャラを追従するものの、見下ろし型でカメラが固定されたアクションゲームっぽいものです。
実現するにはスクリプトを作る必要があるみたいで、トライしてみます。
スクリプトの作成
アセット内にオリジナルのスクリプト用のフォルダを作成して、その中にC#スクリプトのファイルを作成します。
名前は何でも大丈夫です。こちらでは、CameraTestとして作成してみました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
こんなソースが作られていると思います。
パッと見での理解ですが、MonoBehaviourクラスをオーバーライドして作るっぽく、コメントを読む限り、Startがロード時に呼ばれるコード、Updateがフレーム毎に呼ばれるコードになると思われる。
なので、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraTest : MonoBehaviour
{
private GameObject player; //ユニティちゃんのオブジェクト情報を格納
private Vector3 offset; //カメラとの相対距離を格納
// Start is called before the first frame update
void Start()
{
//ユニティちゃんのオブジェクト情報を格納
this.player = GameObject.Find("unitychan");
//メインカメラ(自身のオブジェクト)とユニティちゃんとトランスフォームの相対距離を算出
offset = transform.position - player.transform.position;
}
// Update is called once per frame
void Update()
{
//メインカメラに相対距離を反映させた新しいトランスフォームの値をセットする
transform.position = this.player.transform.position + offset;
}
}
このように書いてあげる。ちゃんとクラス名もファイル名とあわせたCameraTestに変更してあげないとアタッチできないので注意。
メインカメラを親要素に配置
先程、子要素に持っていったメインカメラを親要素に再配置しておきます。
これをしなかった場合、カメラの向きが子要素の向きに追従しちゃいます(笑)
メインカメラにスクリプトをアタッチ
これは簡単。
先程作ったスクリプトファイルをヒエラルキーのメインカメラにドラッグしてくるだけですね。
エラーなどがあれば、ここで弾かれるっぽいです。
検証
無事、向きは固定されたままキャラクターを追従するようになりした。
ここまで作ると超気になる点
次は、左右の矢印キーでの横回転。
これがどうにも初期のバイ◯ハザードを連想させる懐かしい動きです。
せっかくカメラを固定化させたので、次回以降でキャラ回転後で前後に動くのではなく、方向キーの入力で向きそのものを変えつつ、かつその方向に動く今風のスタイルへと作り変えていきたいです。
この記事はユニティちゃんライセンス条項の元に提供されています。
© Unity Technologies Japan/UCL