ict.shenzhi/Assets/Samples/uLipSync/3.0.2/00. Common/UnityChan/Scripts/ThirdPersonCamera.cs

83 lines
2.5 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
// スムーズに繋がない時(クイック切り替え)用のブーリアンフラグ
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;
//カメラをスタートする
transform.position = standardPos.position;
transform.forward = standardPos.forward;
}
void FixedUpdate () // このカメラ切り替えはFixedUpdate()内でないと正常に動かない
{
if (Input.GetButton ("Fire1")) { // left Ctlr
// Change Front Camera
setCameraPositionFrontView ();
} else if (Input.GetButton ("Fire2")) { //Alt
// Change Jump Camera
setCameraPositionJumpView ();
} else {
// return the camera to standard position and direction
setCameraPositionNormalView ();
}
}
void setCameraPositionNormalView ()
{
if (bQuickSwitch == false) {
// the camera to standard position and direction
transform.position = Vector3.Lerp (transform.position, standardPos.position, 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;
transform.position = frontPos.position;
transform.forward = frontPos.forward;
}
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);
}
}
}