LoginSignup
7
1

More than 5 years have passed since last update.

[初心者向け]キャラの動きに合わせてカメラを追従させる

Posted at

qnote Advent Calendar 16日目は新人のチベが担当します。
早いもので12月も半月が過ぎました。
リア充と呼ばれる方たちは次の休日に恋人へのクリスマスプレゼントなんかを買いに行く頃でしょうか。
リア充爆発しろ!!
おっと、口が滑るところでした。(滑ってます)

今回やること

前回はキャラをジャンプさせてみました。
うっかりジャンプしているスクショをあげ忘れました、申し訳ないです。
前回もそうですが、Unity初心者なので初心者目線で書いております。
今回はキャラの動きに合わせてカメラを追従させてみたいと思います。
カメラを追従させるためにキャラを動かす必要があるのでそこも含めて説明していきます。

キャラを動かしてみた

まずはキャラを動かしてみます。

Charamove.cs
Rigidbody2D rb;

[SerializeField]
int moveSpeed = 5;

void Start()
{
   rb = GetComponent<Rigidbody2D>();
}

void Update()
{
   rb.velocity = new Vector2(moveSpeed, rb.velocity.y);
}

このスクリプトをロボットくんに追加するだけでロボットくんが自動で動いてくれます!
rb.velocity = new Vector2(moveSpeed, rb.velocity.y);
この一文本来は
rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y);
となります。
x座標にmoveSpeedを入れているのでx座標の正方向に進むというわけです。

動く速さはロボットくんに追加した後InspectorにmoveSpeedの項目があるのでそこをいじれば変わります。

カメラを追従させてみた

早速キャラに合わせてカメラを追わせたいと思います。

TrackingCamera.cs
using UnityEngine;
using System.Collections;

public class TrackingCamera : MonoBehaviour
{

  [SerializeField]
  GameObject player;

  void Start()
  {

  }

  void Update()
  {
     transform.position = new Vector3(player.transform.position.x + 9, 0, -2);
  }

私は最初、GameObject?のplayer?なにそれ!?これをプレイヤーに追加するの!?カメラに追加するの!?と色々わかりませんでした。
でも、大丈夫!このスクリプトをカメラに追加します。
カメラに追加してInspectorを見ると、、、
スクリーンショット 2016-12-15 12.29.45.png
「Player」って項目が。そうです!先ほどのGameObjectのPlayerですね!
ここ、初めは何もない(Noneになっているかと思います)ので右にある白丸をポチッと押します。
スクリーンショット 2016-12-15 12.36.05.png
こんな画面が出てくると思います。
Sceneに追加しているオブジェクトはScene項目に出てくるのでカメラを追従させたいキャラクター名をダブルクリックしてplayerに追加。ロボットくんは「RobotBoyRun00」なのでそれを選択してあります。

では、これで一度動かしてみましょう!
あれ?カメラの位置がおかしい!と思う人もいるでしょう。
実は上のスクリプトはロボットくんが画面の左側に来るように設定してあります。
言葉で説明しても分かりにくいと思いますのでコードとスクショを張って比べてみたいと思います。
まず
transform.position = new Vector3(player.transform.position.x + 9, 0, -2);
この一文ですが、上のスクリプトと同じです。動かしてみると。
スクリーンショット 2016-12-15 14.48.50.png
このようにロボットくんが画面内左端にいるのがわかります。
次に
transform.position = new Vector3(player.transform.position.x, 0, -2);
この一文、どこが変わったかと言いますと、player.transform.position.x + 9の + 9を消しました。これで実行してみると。
スクリーンショット 2016-12-15 14.52.31.png
ロボットくんが中央にいるのがわかります。

つまり + 9をなくしたplayer.transform.position.xだけにするとプレイヤーを中心に映すのでカメラの位置がおかしい!ということはなくなると思います。

では、player.transform.position.xだけで実行してみましょう。
これでキャラがカメラ内に収まり、カメラは追従してるかと思います。

※ロボットくん=キャラ=プレイヤーです。

まとめ

私がまだまだプログラミングについての知識に乏しい時(今も大概ですが)ネットで調べ物をしていると参考にできるコードは見つかってもコードの内容まで理解できないことがしばしばありました。そうなるとコピペして終わり、になったり同じように書いてエラーを吐くなんてことがあり、知識として身についていないと感じておりました。
私のような経験の方が他にもいた時少しでも理解できたらいいなと少し掘り下げて書いてみました。
まだまだ書き慣れないのでうまく説明が書けていない部分も多いかと思いますが、少しでも役に立ててもらえれば嬉しいです。

さて、今回はキャラが自動で移動し、カメラも追従するようになりましたが、歩かせるだけの地面がないと面白くないですね!手で追加してもいいのですがそれだと大変です。
次回は地面の自動生成について書ければと思います。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1