カメラを作成する
視点移動カメラ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMoveController : MonoBehaviour {
public GameObject player;
public float rotateSpeed;
// (ポイント)「const」 の意味を確認(ヒント;「定数」とは何か?)
private const float angleLimitUp = 30f;
private const float angleLimitDown = -60f;
void Update () {
// カメラの位置とプレーヤーの位置を同期させる。
transform.position = player.transform.position;
// マウスの左ボタンをクリック中のみカメラの角度を変更できる(テクニック)
if(Input.GetMouseButton(0)){
RotateCameraAngle ();
}
// (ポイント)視点移動の可能範囲を制限する。
// (発展)「三項演算子(?:)」をグーグルで調べてみよう。
float angle_x = 180f <= transform.eulerAngles.x ? transform.eulerAngles.x - 360f : transform.eulerAngles.x;
// (ポイント)「Clamp」関数の意味をグーグルで調べてみよう。
transform.eulerAngles = new Vector3(Mathf.Clamp(angle_x, angleLimitDown, angleLimitUp), transform.eulerAngles.y, transform.eulerAngles.z);
}
void RotateCameraAngle(){
// Mouse Xはマウスを横方向に動かした場合の移動量(入力値)を取得する。
// Mouse Yはマウスを縦方向に動かした場合の移動量(入力値)を取得する。
Vector3 angle = new Vector3(Input.GetAxis("Mouse X") * rotateSpeed, -Input.GetAxis("Mouse Y") *rotateSpeed, 0);
// angle.y とangle.xの順序に注意!
transform.eulerAngles += new Vector3(angle.y, angle.x, 0);
}
}
2台のカメラを切り替える
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMoveController : MonoBehaviour {
public GameObject player;
public float rotateSpeed;
private const float angleLimitUp = 30f;
private const float angleLimitDown = -60f;
// ★追加
public Camera mainCamera;
public Camera subCamera;
private Vector3 angle;
// ★追加
void Start(){
mainCamera.enabled = true;
subCamera.enabled = false;
}
void Update () {
transform.position = player.transform.position;
// ★追加
// メインカメラとサブカメラのY軸の向きを同期させる。
angle = player.transform.eulerAngles;
transform.eulerAngles = new Vector3 (transform.eulerAngles.x, angle.y, transform.eulerAngles.z);
// ★追加(コードを追加しましょう。)
if (Input.GetMouseButton (0)) {
RotateCameraAngle ();
mainCamera.enabled = false;
subCamera.enabled = true;
} else {
mainCamera.enabled = true;
subCamera.enabled = false;
}
float angle_x = 180f <= transform.eulerAngles.x ? transform.eulerAngles.x - 360f : transform.eulerAngles.x;
transform.eulerAngles = new Vector3(Mathf.Clamp(angle_x, angleLimitDown, angleLimitUp), transform.eulerAngles.y, transform.eulerAngles.z);
}
void RotateCameraAngle(){
Vector3 angle = new Vector3(Input.GetAxis("Mouse X") * rotateSpeed, -Input.GetAxis("Mouse Y") *rotateSpeed, 0);
transform.eulerAngles += new Vector3(angle.y, angle.x, 0);
}
}
EscapeCombat(メモ)
他のコースを見る視点移動カメラ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMoveController : MonoBehaviour {
public GameObject player;
public float rotateSpeed;
// (ポイント)「const」 の意味を確認(ヒント;「定数」とは何か?)
private const float angleLimitUp = 30f;
private const float angleLimitDown = -60f;
void Update () {
// カメラの位置とプレーヤーの位置を同期させる。
transform.position = player.transform.position;
// マウスの左ボタンをクリック中のみカメラの角度を変更できる(テクニック)
if(Input.GetMouseButton(0)){
RotateCameraAngle ();
}
// (ポイント)視点移動の可能範囲を制限する。
// (発展)「三項演算子(?:)」をグーグルで調べてみよう。
float angle_x = 180f <= transform.eulerAngles.x ? transform.eulerAngles.x - 360f : transform.eulerAngles.x;
// (ポイント)「Clamp」関数の意味をグーグルで調べてみよう。
transform.eulerAngles = new Vector3(Mathf.Clamp(angle_x, angleLimitDown, angleLimitUp), transform.eulerAngles.y, transform.eulerAngles.z);
}
void RotateCameraAngle(){
// Mouse Xはマウスを横方向に動かした場合の移動量(入力値)を取得する。
// Mouse Yはマウスを縦方向に動かした場合の移動量(入力値)を取得する。
Vector3 angle = new Vector3(Input.GetAxis("Mouse X") * rotateSpeed, -Input.GetAxis("Mouse Y") *rotateSpeed, 0);
// angle.y とangle.xの順序に注意!
transform.eulerAngles += new Vector3(angle.y, angle.x, 0);
}
}
2台のカメラを切り替える
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMoveController : MonoBehaviour {
public GameObject player;
public float rotateSpeed;
private const float angleLimitUp = 30f;
private const float angleLimitDown = -60f;
// ★追加
public Camera mainCamera;
public Camera subCamera;
private Vector3 angle;
// ★追加
void Start(){
mainCamera.enabled = true;
subCamera.enabled = false;
}
void Update () {
transform.position = player.transform.position;
// ★追加
// メインカメラとサブカメラのY軸の向きを同期させる。
angle = player.transform.eulerAngles;
transform.eulerAngles = new Vector3 (transform.eulerAngles.x, angle.y, transform.eulerAngles.z);
// ★追加(コードを追加しましょう。)
if (Input.GetMouseButton (0)) {
RotateCameraAngle ();
mainCamera.enabled = false;
subCamera.enabled = true;
} else {
mainCamera.enabled = true;
subCamera.enabled = false;
}
float angle_x = 180f <= transform.eulerAngles.x ? transform.eulerAngles.x - 360f : transform.eulerAngles.x;
transform.eulerAngles = new Vector3(Mathf.Clamp(angle_x, angleLimitDown, angleLimitUp), transform.eulerAngles.y, transform.eulerAngles.z);
}
void RotateCameraAngle(){
Vector3 angle = new Vector3(Input.GetAxis("Mouse X") * rotateSpeed, -Input.GetAxis("Mouse Y") *rotateSpeed, 0);
transform.eulerAngles += new Vector3(angle.y, angle.x, 0);
}
}
カメラを作成する