74 lines
1.8 KiB
C#
74 lines
1.8 KiB
C#
/*
|
|
* Copyright (c) 2014 - 2022 t_saki@serenegiant.com
|
|
*/
|
|
using Serenegiant;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using static Serenegiant.TouchEventManager;
|
|
|
|
public class CameraController : MonoBehaviour
|
|
{
|
|
/**
|
|
* このスクリプトで操作するカメラ(GameObject)
|
|
* 未割り当ての場合はこのスクリプトがセットされているGameObjectを使う
|
|
*/
|
|
public GameObject TargetCamera;
|
|
|
|
private TouchEventManager manager;
|
|
private Transform taregtTransform;
|
|
private Vector3 force = new Vector3();
|
|
private Vector2 touchPosition = new Vector2();
|
|
|
|
private const float FACTOR = 0.2f;
|
|
private const float DECAY_RATE = 0.95f;
|
|
private const float FORCE_LIMIT = 50;
|
|
private const float FORCE_LIMIT2 = FORCE_LIMIT * FORCE_LIMIT;
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
if (TargetCamera == null)
|
|
{ // TargetObjectが割り当てられていないときは
|
|
// このスクリプトがセットされているゲームオブジェクトを使う
|
|
TargetCamera = gameObject;
|
|
}
|
|
taregtTransform = TargetCamera.transform;
|
|
manager = new TouchEventManager();
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
manager.Update();
|
|
|
|
var touch = manager.GetTouch();
|
|
|
|
switch (touch.state) {
|
|
case TouchState.Began:
|
|
touchPosition.Set(touch.position.x, touch.position.y);
|
|
break;
|
|
case TouchState.Moved:
|
|
var delta = touch.position - touchPosition;
|
|
// 移動量に応じて角度計算
|
|
float xAngle = delta.y * FACTOR;
|
|
float yAngle = -delta.x * FACTOR;
|
|
|
|
force.Set(xAngle, yAngle, 0.0f);
|
|
if (force.sqrMagnitude > FORCE_LIMIT2)
|
|
{
|
|
force = force.normalized * FORCE_LIMIT;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void FixedUpdate()
|
|
{
|
|
// 回転させる
|
|
taregtTransform.Rotate(force * Time.deltaTime, Space.World);
|
|
// 減衰させる
|
|
force *= DECAY_RATE;
|
|
}
|
|
|
|
}
|