【Unity8】ユニティちゃんをカメラが追う!Camera.main.ViewportToWorldPoint【横スクロールユニティちゃん3】
Unity5.1.0f3 Personal(2015年6月)
このコンテンツは、『ユニティちゃんライセンス』で提供されています
【目標】ユニティちゃん前進時にカメラを追従させる
①ユニティちゃんの位置を変更する
まずはユニティちゃんのPositionを、カメラの少し後ろにして、地面に着地している状態にしましょう〜
下の画像はX:-4、Y:-2になっています〜
ユニティちゃんの位置を変更
②Main Cameraにユニティちゃんを追いかけさせる
前回までに作成しておいたPlayerScriptに処理を追加し、ユニティちゃんが前進するとカメラも一緒に移動するようにします〜以下ソースです〜
using UnityEngine; using System.Collections; public class PlayerScript : MonoBehaviour { public float speed = 4f; //********** 開始 **********// public GameObject mainCamera; //********** 終了 **********// private Rigidbody2D rigidbody2D; private Animator anim; void Start () { anim = GetComponent<Animator>(); rigidbody2D = GetComponent<Rigidbody2D>(); } void FixedUpdate () { float x = Input.GetAxisRaw ("Horizontal"); if (x != 0) { rigidbody2D.velocity = new Vector2 (x * speed, rigidbody2D.velocity.y); Vector2 temp = transform.localScale; temp.x = x; transform.localScale = temp; anim.SetBool ("Dash", true); //********** 開始 **********// //画面中央から左に4移動した位置をユニティちゃんが超えたら if (transform.position.x > mainCamera.transform.position.x - 4) { //カメラの位置を取得 Vector3 cameraPos = mainCamera.transform.position; //ユニティちゃんの位置から右に4移動した位置を画面中央にする cameraPos.x = transform.position.x + 4; mainCamera.transform.position = cameraPos; } //カメラ表示領域の左下をワールド座標に変換 Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0)); //カメラ表示領域の右上をワールド座標に変換 Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1)); //ユニティちゃんのポジションを取得 Vector2 pos = transform.position; //ユニティちゃんのx座標の移動範囲をClampメソッドで制限 pos.x = Mathf.Clamp(pos.x, min.x + 0.5f, max.x); transform.position = pos; //********** 終了 **********// } else { rigidbody2D.velocity = new Vector2 (0, rigidbody2D.velocity.y); anim.SetBool ("Dash", false); } } }
PlayerScript.cs
まずは新しく作ったpublic変数mainCameraに、Main Cameraを指定します〜
ドラッグ&ドロップ!
画面中央から4離れた位置をユニティちゃんが超えると、Main Cameraもそれに合わせて移動するようになりました〜
赤線の辺りを超えた時にカメラが移動するので、左に戻った時はカメラ位置は変わりません〜
そしてClampメソッドにてカメラ表示範囲で移動制限しているため、画面からはみ出すこともありません〜
画面からはみ出さずに止まってくれる
ちなみにClampメソッドを別の書き方で表すと
if (pos.x < min.x) { pos.x = min.x } else if (pos.x > max.x) { pos.x = max.x }
こんな感じになります〜
それでは、今回はここまでです〜
ありがとうございました〜
【Unity開発8】ユニティちゃんを表示させる【横スクロールユニティちゃん1】
【Unity開発8】ユニティちゃんを歩かせる【横スクロールユニティちゃん2】
【Unity開発8】カメラにユニティちゃんを追いかけさせる【横スクロールユニティちゃん3】
【Unity開発8】ユニティちゃんをジャンプさせる【横スクロールユニティちゃん4】
【Unity開発8】ユニティちゃんバスターで攻撃する【ユニティちゃん横スクロール5】
【Unity開発8】走っている時やジャンプ中にも弾を撃つ【横スクロールユニティちゃん6】
【Unity開発8】弾を当てて敵を倒す【横スクロールユニティちゃん7】
【Unity開発8】uGUIでライフを作り、ダメージを実装する【横スクロールユニティちゃん8】
【Unity開発8】ダメージを食らった時、一定時間無敵状態にする【横スクロールユニティちゃん9】
【Unity開発8】アイテムを取得して体力回復する【横スクロールユニティちゃん10】
【Unity開発8】敵キャラを倒した時にアイテムを落とさせる【横スクロールユニティちゃん11】
【Unity開発8】Main Cameraに映るまで敵キャラを待機させておく【横スクロールユニティちゃん12】