このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。
Unityを自由に使いこなせる方にとっても、ちょっとお役に立つ情報を掲載していますので、もしよければご参照ください。
前回までの記事でキャラクターが前進、左右に向きを変えるプログラムができています。ここまで出来たらカメラがPlayerを追いかけるプログラムを作ってみたいですね。
今回はターゲット追従カメラの作成(3D編)として、3Dでプロジェクトを作成した際の追従方法について、いくつかご紹介いたします。
下の動画は「一分間Unity講座 スクリプトファイルで左右の回転を実現する方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!
説明をする前に、追従の状況がわかりやすくなるように、対象となるオブジェクトを作成しておきましょう。サンプルでは3D
1,Targetの子要素にする方法
下の図の様に、MainCamera を追従したいターゲットの子要素として配置します。
Inspectorでターゲットとの相対的位置を指定。サンプルでは上方向に2,前後方向にマイナス5,つまり5つ後方、2つ上部からターゲットを捉えるように指定します。Rotationのx軸に15度の角度を与えることで、カメラを水平方向に捉えるのではなく、15度だけ下方向に回転させた角度でとらえています。
これで下のような距離感で、ターゲットを常にとらえることができるようになっています。これはもっとも単純な方法ですが、常に同じ距離感、角度でとらえているので躍動感にかけたり、カメラとターゲットの間に壁があった時などはTargetが見えなくなってしまうなどの課題も残ります。
2,スクリプトファイルでコントロールする方法
今回の動画で基本となるプログラムをご紹介しています。
2.1、スクリプトファイルの作成とアタッチ
Asset内で右クリック(または+ボタン)、Create ⇒ C#Script
「CameraFollow」などの任意の名前のスクリプトファイルを作成します。
作成したスクリプトファイルを MainCamera にアタッチします。
2.2、プログラムの作成
まずは追従対象となるGameObject型の変数:target を宣言します。
Start関数内で、targetに初期値を代入します。サンプルでは「unitychan」という名前のオブジェクトなので、GameObject.Find()関数で対象のオブジェクトを名前で探します。
GameObject target; //追従対象のオブジェクト
void Start()
{
target = GameObject.Find("unitychan"); //target を取得
}
続いて追従プログラムを作成します。
カメラはターゲットが向いている方向の5つ後方、2つ上方向からターゲットを捉えたいと思います。
座標の値(x、y、z)はベクトルなので、足したり引いたりすることができます。
void Update()
{
transform.position = //座標を指定
target.transform.position //Targetの座標
- target.transform.forward * 5 //Targetの5つ後方
+ transform.up * 2; //targetの2つ上方
transform.rotation = target.transform.rotation; //Targetと同じ向きに
}
3,CinemaSceneの活用
Unityにはカメラの動きを管理するCinemaSceneという機能があります。3つ目はこの活用です。
※この内容は近日(次回のショート動画で)公開予定!
ファイブボックスでは、Unityの個別指導オンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
Comments