Last active
August 29, 2015 14:25
-
-
Save Redhucules/504b7efbcd4ae984d6c8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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