139 lines
4.3 KiB
C#
139 lines
4.3 KiB
C#
//
|
|
// Unityちゃん用の三人称カメラ
|
|
//
|
|
// 2013/06/07 N.Kobyasahi
|
|
//
|
|
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
namespace UnityChan
|
|
{
|
|
public class ThirdPersonCamera : MonoBehaviour
|
|
{
|
|
public float smooth = 3f; // カメラモーションのスムーズ化用変数
|
|
Transform standardPos; // the usual position for the camera, specified by a transform in the game
|
|
Transform frontPos; // Front Camera locater
|
|
Transform jumpPos; // Jump Camera locater
|
|
|
|
|
|
// Sreed333
|
|
// Added this for additional lookAt position when holding RMB
|
|
Transform lookAt; // lookAt position
|
|
|
|
|
|
// Sreed33
|
|
// Removed this from logic to simplify code
|
|
// bool bQuickSwitch = false; //Change Camera Position Quickly
|
|
|
|
|
|
void Start()
|
|
{
|
|
// 各参照の初期化
|
|
standardPos = GameObject.Find("CamPos").transform;
|
|
|
|
if (GameObject.Find("FrontPos"))
|
|
frontPos = GameObject.Find("FrontPos").transform;
|
|
|
|
if (GameObject.Find("JumpPos"))
|
|
jumpPos = GameObject.Find("JumpPos").transform;
|
|
|
|
|
|
// Sreed33
|
|
// Added a position for a top-down view on the player
|
|
if (GameObject.Find("LookAtPos"))
|
|
lookAt = GameObject.Find("LookAtPos").transform;
|
|
|
|
|
|
//カメラをスタートする
|
|
transform.position = standardPos.position;
|
|
transform.forward = standardPos.forward;
|
|
}
|
|
|
|
void FixedUpdate() // このカメラ切り替えはFixedUpdate()内でないと正常に動かない
|
|
{
|
|
// Sreed33
|
|
// Make sure player controls are enabled
|
|
if (!UnityChan.UnityChanControlScriptWithRgidBody.controlsActive) return;
|
|
|
|
if (Input.GetButton("Fire1"))
|
|
{ // left Ctlr
|
|
// Change Front Camera
|
|
setCameraPositionFrontView();
|
|
}
|
|
else if (Input.GetButton("Fire2"))
|
|
{ //Alt
|
|
|
|
|
|
// Sreed33
|
|
// Call my function instead of setPositionJumpView
|
|
//setCameraPositionJumpView();
|
|
setLookAtView();
|
|
}
|
|
else
|
|
{
|
|
// return the camera to standard position and direction
|
|
setCameraPositionNormalView();
|
|
}
|
|
}
|
|
|
|
void setCameraPositionNormalView()
|
|
{
|
|
// if (bQuickSwitch == false) {
|
|
// the camera to standard position and direction
|
|
// print("False")
|
|
transform.position = Vector3.Lerp(transform.position, standardPos.position, Time.fixedDeltaTime * smooth);
|
|
|
|
|
|
// Sreed33
|
|
// Replace commented Vector3.Lerp with Quaternion.Lerp to rotate camera correctly when moving through portals
|
|
// + I did something similar in all the setCameraPosition functions
|
|
transform.rotation = Quaternion.Lerp(transform.rotation, standardPos.rotation, Time.fixedDeltaTime * smooth);
|
|
// transform.forward = Vector3.Lerp (transform.forward, standardPos.forward, Time.fixedDeltaTime * smooth);
|
|
|
|
|
|
|
|
// } else {
|
|
// the camera to standard position and direction / Quick Change
|
|
// transform.position = standardPos.position;
|
|
// transform.forward = standardPos.forward;
|
|
// bQuickSwitch = false;
|
|
// }
|
|
}
|
|
|
|
void setCameraPositionFrontView()
|
|
{
|
|
// Change Front Camera
|
|
// bQuickSwitch = true;
|
|
|
|
|
|
// Sreed33
|
|
// Replace commented frontPos.forward with Quaternion.Lerp to rotate camera according to gravity direction
|
|
transform.position = Vector3.Lerp(transform.position, frontPos.position, Time.fixedDeltaTime * smooth);
|
|
// transform.position = frontPos.position;
|
|
transform.rotation = Quaternion.Lerp(transform.rotation, frontPos.rotation, Time.fixedDeltaTime * smooth);
|
|
// transform.forward = frontPos.forward;
|
|
}
|
|
|
|
|
|
// Sreed33
|
|
// This function is no longer in use anywhere
|
|
void setCameraPositionJumpView()
|
|
{
|
|
// Change Jump Camera
|
|
// bQuickSwitch = false;
|
|
transform.position = Vector3.Lerp(transform.position, jumpPos.position, Time.fixedDeltaTime * smooth);
|
|
transform.forward = Vector3.Lerp(transform.forward, jumpPos.forward, Time.fixedDeltaTime * smooth);
|
|
}
|
|
|
|
|
|
// Sreed33
|
|
// Added function to change to top-down camera view
|
|
// Makes it easier to avoid meteors when there is a lot of them
|
|
void setLookAtView()
|
|
{
|
|
transform.position = Vector3.Lerp(transform.position, lookAt.position, Time.fixedDeltaTime * smooth);
|
|
transform.rotation = Quaternion.Lerp(transform.rotation, lookAt.rotation, Time.fixedDeltaTime * smooth);
|
|
}
|
|
|
|
}
|
|
} |