123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using UnityEngine;
- namespace Kamgam.SkyClouds
- {
- public class WindDirectionController : MonoBehaviour
- {
- public Vector3 Direction => transform.TransformDirection(Vector3.forward);
- public float Sensitivity = 0.1f;
- public Material[] Materials;
- private Vector3 _lastMousePosition;
- private bool _isDragging = false;
- void Update()
- {
- if (Input.GetMouseButtonDown(0))
- {
- RaycastHit hit;
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- if (Physics.Raycast(ray, out hit))
- {
- if (hit.collider.gameObject == gameObject)
- {
- _isDragging = true;
- _lastMousePosition = Input.mousePosition;
- }
- }
- }
- if (Input.GetMouseButtonUp(0))
- {
- _isDragging = false;
- }
- if (_isDragging)
- {
- Vector3 deltaMousePosition = Input.mousePosition - _lastMousePosition;
- float rotationX = deltaMousePosition.y * Sensitivity; // Adjust sensitivity as needed
- float rotationY = -deltaMousePosition.x * Sensitivity; // Adjust sensitivity as needed
- Quaternion rotation = Quaternion.Euler(rotationX, rotationY, 0);
- transform.rotation = rotation * transform.rotation;
- _lastMousePosition = Input.mousePosition;
- }
- foreach (var material in Materials)
- {
- if (material == null)
- continue;
- material.SetVector("_WindDirection", Direction);
- }
- }
- }
- }
|