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

Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity8】ユニティちゃんをカメラが追う!Camera.main.ViewportToWorldPoint【横スクロールユニティちゃん3】

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

Unity5.1.0f3 Personal(2015年6月)

f:id:hiyotama:20150618122504p:plain


このコンテンツは、『ユニティちゃんライセンス』で提供されています

ユニティちゃんライセンス

前回の続きです〜今回はユニティちゃんが前に進んだ時のみ、カメラがユニティちゃんを追いかける処理を追加していきます〜

【目標】ユニティちゃん前進時にカメラを追従させる

①ユニティちゃんの位置を変更する
まずはユニティちゃんのPositionを、カメラの少し後ろにして、地面に着地している状態にしましょう〜
下の画像はX:-4、Y:-2になっています〜


f:id:hiyotama:20150614144850p:plain
ユニティちゃんの位置を変更


②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を指定します〜


f:id:hiyotama:20150614173336p:plain
ドラッグ&ドロップ!


画面中央から4離れた位置をユニティちゃんが超えると、Main Cameraもそれに合わせて移動するようになりました〜


f:id:hiyotama:20150614152709p:plain


赤線の辺りを超えた時にカメラが移動するので、左に戻った時はカメラ位置は変わりません〜

f:id:hiyotama:20150614172334p:plain


そしてClampメソッドにてカメラ表示範囲で移動制限しているため、画面からはみ出すこともありません〜


f:id:hiyotama:20150614172555p:plain
画面からはみ出さずに止まってくれる


ちなみに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】

【Unity開発8】タイトル・ステージ紹介・ゲームオーバー・ゲームクリアー画面を作る【横スクロールユニティちゃん13】

【Unity開発8】バーチャルパッドを付けてモバイル対応する【横スクロールユニティちゃん14】