CameraController.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright (c) 2014 - 2022 t_saki@serenegiant.com
  3. */
  4. using Serenegiant;
  5. using UnityEngine;
  6. using UnityEngine.EventSystems;
  7. using static Serenegiant.TouchEventManager;
  8. public class CameraController : MonoBehaviour
  9. {
  10. /**
  11. * このスクリプトで操作するカメラ(GameObject)
  12. * 未割り当ての場合はこのスクリプトがセットされているGameObjectを使う
  13. */
  14. public GameObject TargetCamera;
  15. private TouchEventManager manager;
  16. private Transform taregtTransform;
  17. private Vector3 force = new Vector3();
  18. private Vector2 touchPosition = new Vector2();
  19. private const float FACTOR = 0.2f;
  20. private const float DECAY_RATE = 0.95f;
  21. private const float FORCE_LIMIT = 50;
  22. private const float FORCE_LIMIT2 = FORCE_LIMIT * FORCE_LIMIT;
  23. // Start is called before the first frame update
  24. void Start()
  25. {
  26. if (TargetCamera == null)
  27. { // TargetObjectが割り当てられていないときは
  28. // このスクリプトがセットされているゲームオブジェクトを使う
  29. TargetCamera = gameObject;
  30. }
  31. taregtTransform = TargetCamera.transform;
  32. manager = new TouchEventManager();
  33. }
  34. // Update is called once per frame
  35. void Update()
  36. {
  37. manager.Update();
  38. var touch = manager.GetTouch();
  39. switch (touch.state) {
  40. case TouchState.Began:
  41. touchPosition.Set(touch.position.x, touch.position.y);
  42. break;
  43. case TouchState.Moved:
  44. var delta = touch.position - touchPosition;
  45. // 移動量に応じて角度計算
  46. float xAngle = delta.y * FACTOR;
  47. float yAngle = -delta.x * FACTOR;
  48. force.Set(xAngle, yAngle, 0.0f);
  49. if (force.sqrMagnitude > FORCE_LIMIT2)
  50. {
  51. force = force.normalized * FORCE_LIMIT;
  52. }
  53. break;
  54. }
  55. }
  56. void FixedUpdate()
  57. {
  58. // 回転させる
  59. taregtTransform.Rotate(force * Time.deltaTime, Space.World);
  60. // 減衰させる
  61. force *= DECAY_RATE;
  62. }
  63. }