WindDirectionController.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using UnityEngine;
  2. namespace Kamgam.SkyClouds
  3. {
  4. public class WindDirectionController : MonoBehaviour
  5. {
  6. public Vector3 Direction => transform.TransformDirection(Vector3.forward);
  7. public float Sensitivity = 0.1f;
  8. public Material[] Materials;
  9. private Vector3 _lastMousePosition;
  10. private bool _isDragging = false;
  11. void Update()
  12. {
  13. if (Input.GetMouseButtonDown(0))
  14. {
  15. RaycastHit hit;
  16. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  17. if (Physics.Raycast(ray, out hit))
  18. {
  19. if (hit.collider.gameObject == gameObject)
  20. {
  21. _isDragging = true;
  22. _lastMousePosition = Input.mousePosition;
  23. }
  24. }
  25. }
  26. if (Input.GetMouseButtonUp(0))
  27. {
  28. _isDragging = false;
  29. }
  30. if (_isDragging)
  31. {
  32. Vector3 deltaMousePosition = Input.mousePosition - _lastMousePosition;
  33. float rotationX = deltaMousePosition.y * Sensitivity; // Adjust sensitivity as needed
  34. float rotationY = -deltaMousePosition.x * Sensitivity; // Adjust sensitivity as needed
  35. Quaternion rotation = Quaternion.Euler(rotationX, rotationY, 0);
  36. transform.rotation = rotation * transform.rotation;
  37. _lastMousePosition = Input.mousePosition;
  38. }
  39. foreach (var material in Materials)
  40. {
  41. if (material == null)
  42. continue;
  43. material.SetVector("_WindDirection", Direction);
  44. }
  45. }
  46. }
  47. }