| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | using UnityEngine;namespace Kamgam.SkyClouds{    public class WindSpeedController : MonoBehaviour    {        public float MaxDistance = 10f;        public float MaxSpeed = 100f;        public Material[] Materials;        private Vector3 _initialPosition;        private bool _isDragging = false;        private Vector3 _offset;        void Start()        {            _initialPosition = transform.position;        }        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;                        _offset = transform.position - hit.point;                    }                }            }            if (Input.GetMouseButtonUp(0))            {                _isDragging = false;            }            if (_isDragging)            {                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);                Plane dragPlane = new Plane(Vector3.up, _initialPosition);                if (dragPlane.Raycast(ray, out float distance))                {                    Vector3 hitPoint = ray.GetPoint(distance) + _offset;                    float clampedX = Mathf.Clamp(hitPoint.x, _initialPosition.x, _initialPosition.x + MaxDistance);                    transform.position = new Vector3(clampedX, _initialPosition.y, _initialPosition.z);                }            }            foreach (var material in Materials)            {                if (material == null)                    continue;                material.SetFloat("_WindSpeed", GetNormalizedValue() * MaxSpeed);            }        }        private float GetNormalizedValue()        {            float distanceMoved = transform.position.x - _initialPosition.x;            return Mathf.InverseLerp(0, MaxDistance, distanceMoved);        }    }}
 |