Skip to content

Instantly share code, notes, and snippets.

@Redhucules
Last active August 29, 2015 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Redhucules/504b7efbcd4ae984d6c8 to your computer and use it in GitHub Desktop.
Save Redhucules/504b7efbcd4ae984d6c8 to your computer and use it in GitHub Desktop.
using UnityEngine;
using System.Collections;
public class PlayerCamera : MonoBehaviour {
private float RotateX = 0;
private float AngleX = 0;
private float AngleY = 0;
private float MouseY = 0;
private float MouseX = 0;
private float YawSpeed = 1.0f;
private GameObject Player ;
private GameObject MainCameraBox ;
private GameObject MainCamera ;
private Vector3 MainCameraPosition = new Vector3(-3f,5f,-11f) ;
private float MainCameraPositionX = 0;
private float CameraLerpSpeed = 6.0f;
private Vector3 CameraPosition = new Vector3(0,0,0);
private bool IsCameraSideL = true;
void Awake ()
{
Player = this.gameObject;
MainCameraBox = GameObject.Find("MainCameraBox");
MainCamera = GameObject.Find("MainCameraBox/MainCamera");
}
// Use this for initialization
void Start ()
{
//カメラ基点の初期位置合わせ
if (MainCameraBox != null)
{
MainCameraBox.transform.position = Player.transform.position;
}
//メインカメラの初期位置合わせ
if (MainCamera != null)
{
MainCamera.transform.localPosition = MainCameraPosition;
MainCameraPositionX = MainCameraPosition.x;
}
}
// Update is called once per frame
void FixedUpdate ()
{
//マウスの移動量測定と限界設定
MouseY = Input.GetAxis("Mouse Y");
MouseY = Mathf.Clamp(MouseY,- 5f, 5f);
MouseX = Input.GetAxis("Mouse X");
MouseX = Mathf.Clamp(MouseX,- 10f, 10f);
//カメラ基点がプレイヤー位置追従
if (Player != null && MainCameraBox != null)
{
CameraPosition = Vector3.Lerp (MainCameraBox.transform.position, Player.transform.position, CameraLerpSpeed * Time.deltaTime);
//縦方向へは遅延追従なしにする
CameraPosition.y = Player.transform.position.y;
MainCameraBox.transform.position = CameraPosition;
Player.transform.Rotate (0, MouseX * YawSpeed, 0);
AngleY = Player.transform.eulerAngles.y;
//カメラの旋回方向とカメラ位置調整
if (MouseX >= 5f) {
IsCameraSideL = false;
} else if (MouseX <= -5f) {
IsCameraSideL = true;
}
//旋回方向によってカメラ位置を切り替える
if (IsCameraSideL) {
MainCameraPosition.x = Mathf.MoveTowards (MainCameraPosition.x, Mathf.Abs (MainCameraPositionX) * -1f, CameraLerpSpeed * Time.deltaTime);
} else if (!IsCameraSideL) {
MainCameraPosition.x = Mathf.MoveTowards (MainCameraPosition.x, Mathf.Abs (MainCameraPositionX), CameraLerpSpeed * Time.deltaTime);
}
MainCamera.transform.localPosition = MainCameraPosition;
//カメラ基点仰角操作取得
MainCameraBox.transform.Rotate (MouseY * -1, 0, 0);
//仰角の変換と限界設定
if (MainCameraBox.transform.eulerAngles.x > 180) {
RotateX = MainCameraBox.transform.eulerAngles.x - 360;
} else {
RotateX = MainCameraBox.transform.eulerAngles.x;
}
AngleX = Mathf.Clamp (RotateX, - 50, 50);
if (AngleX < 0) {
AngleX = AngleX + 360;
}
MainCameraBox.transform.eulerAngles = new Vector3 (AngleX, AngleY, 0);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment