CameraController.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.EventSystems;
  6. /// <summary>
  7. /// Отслеживание объекта
  8. /// </summary>
  9. public class CameraController : MonoBehaviour
  10. {
  11. public enum RotationAxes { Mouse, TrackMarker }
  12. public RotationAxes axes = RotationAxes.Mouse;
  13. public float movementSpeed = 0.1f;
  14. public int mouseSpeed = 10;
  15. public float smoothness = 0.85f;
  16. Vector3 targetPosition;
  17. private Vector3 dragOrigin;
  18. public Transform target;
  19. void Start()
  20. {
  21. targetPosition = transform.position;
  22. }
  23. void Update()
  24. {
  25. switch (axes)
  26. {
  27. case RotationAxes.Mouse:
  28. MouseCommands();
  29. break;
  30. case RotationAxes.TrackMarker:
  31. TrackMarker();
  32. break;
  33. }
  34. }
  35. void ShowAndUnlockCursor()
  36. {
  37. Cursor.lockState = CursorLockMode.None;
  38. Cursor.visible = true;
  39. }
  40. void HideAndLockCursor()
  41. {
  42. Cursor.lockState = CursorLockMode.Locked;
  43. Cursor.visible = false;
  44. }
  45. private void MouseCommands()
  46. {
  47. //if (Input.GetKey(KeyCode.W))
  48. //{
  49. // targetPosition += transform.forward * movementSpeed;
  50. // Camera.main.orthographicSize++;
  51. //}
  52. if (Input.GetKey(KeyCode.LeftArrow))
  53. targetPosition -= transform.right * movementSpeed;
  54. //if (Input.GetKey(KeyCode.S))
  55. //{
  56. // targetPosition -= transform.forward * movementSpeed;
  57. // if (Camera.main.orthographicSize > 1) Camera.main.orthographicSize--;
  58. //}
  59. if (Input.GetKey(KeyCode.RightArrow))
  60. targetPosition += transform.right * movementSpeed;
  61. if (Input.GetKey(KeyCode.DownArrow))
  62. targetPosition -= transform.up * movementSpeed;
  63. if (Input.GetKey(KeyCode.UpArrow))
  64. targetPosition += transform.up * movementSpeed;
  65. if (Input.GetMouseButtonDown(2))
  66. {
  67. dragOrigin = Input.mousePosition;
  68. }
  69. if (Input.GetMouseButton(1))
  70. {
  71. Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - dragOrigin);
  72. if (pos.x < 0)
  73. targetPosition -= transform.right * movementSpeed * 0.1f;
  74. if (pos.x > 0)
  75. targetPosition += transform.right * movementSpeed * 0.1f;
  76. if (pos.y < 0)
  77. targetPosition -= transform.up * movementSpeed * 0.1f;
  78. if (pos.y > 0)
  79. targetPosition += transform.up * movementSpeed * 0.1f;
  80. }
  81. if (Input.GetAxis("Mouse ScrollWheel") > 0)
  82. {
  83. targetPosition += transform.forward * movementSpeed* mouseSpeed;
  84. if (Camera.main.orthographicSize > 1) Camera.main.orthographicSize--;
  85. }
  86. else if (Input.GetAxis("Mouse ScrollWheel") < 0)
  87. {
  88. targetPosition -= transform.forward * movementSpeed*mouseSpeed;
  89. Camera.main.orthographicSize++;
  90. }
  91. transform.position = Vector3.Lerp(transform.position, targetPosition, (1.0f - smoothness));
  92. }
  93. private Vector3 screenPoint;
  94. private Vector3 offset;
  95. private Vector3 curScreenPoint;
  96. private Vector3 curPosition;
  97. void OnMouseDown()
  98. {
  99. //Debug.Log(StagesEditorController.indexCursor);
  100. screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
  101. offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
  102. }
  103. private void OnMouseDrag()
  104. {
  105. switch (axes)
  106. {
  107. case RotationAxes.Mouse:
  108. curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
  109. curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
  110. transform.position = curPosition;
  111. break;
  112. }
  113. }
  114. void TrackMarker()
  115. {
  116. //if (Input.GetKey(KeyCode.W))
  117. //{
  118. // targetPosition += transform.forward * movementSpeed;
  119. // Camera.main.orthographicSize++;
  120. //}
  121. //if (Input.GetKey(KeyCode.S))
  122. //{
  123. // targetPosition -= transform.forward * movementSpeed;
  124. // if (Camera.main.orthographicSize > 1) Camera.main.orthographicSize--;
  125. //}
  126. if (Input.GetAxis("Mouse ScrollWheel") > 0)
  127. {
  128. targetPosition += transform.forward * movementSpeed* mouseSpeed;
  129. if(Camera.main.orthographicSize > 1) Camera.main.orthographicSize--;
  130. }
  131. else if (Input.GetAxis("Mouse ScrollWheel") < 0)
  132. {
  133. targetPosition -= transform.forward * movementSpeed* mouseSpeed;
  134. Camera.main.orthographicSize++;
  135. }
  136. var marker_offset = new Vector3(target.position.x, targetPosition.y, target.position.z);
  137. targetPosition =Vector3.Lerp(transform.position, /*targetPosition + target.position - */marker_offset, (1.0f - smoothness));
  138. transform.position = targetPosition;
  139. if (Input.GetMouseButton(1)) axes = RotationAxes.Mouse;
  140. }
  141. }