using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Generic_WaterBob : MonoBehaviour { public float bobbingHeight = 0.08f; // The height the object will bob up and down public float bobbingSpeed = 1.5f; // The speed of the bobbing motion public float rotationAmount = 0.8f; // The amount of rotation applied to the object public bool randomOffset = true; // Determines if random offsets are applied to speed and rotation public Vector2 randomRange = new Vector2(0.1f, 1f); // The range for the random offset private Vector3 startPos; private Quaternion startRotation; void Start() { startPos = transform.position; startRotation = transform.rotation; // Save the initial rotation if (randomOffset) { bobbingSpeed += UnityEngine.Random.Range(randomRange.x, randomRange.y); rotationAmount += UnityEngine.Random.Range(randomRange.x, randomRange.y); } } void Update() { // Calculate the vertical bobbing motion float newY = startPos.y + Mathf.Sin(Time.time * bobbingSpeed) * bobbingHeight; Vector3 newPos = new Vector3(transform.position.x, newY, transform.position.z); transform.position = newPos; // Calculate rotation offsets based on time float rotationX = Mathf.Sin(Time.time * bobbingSpeed * 0.5f) * rotationAmount; float rotationY = Mathf.Sin(Time.time * bobbingSpeed * 0.7f) * rotationAmount; float rotationZ = Mathf.Sin(Time.time * bobbingSpeed * 0.9f) * rotationAmount; // Apply the incremental rotation as an offset to the existing rotation Quaternion incrementalRotation = Quaternion.Euler(rotationX, rotationY, rotationZ); transform.rotation = startRotation * incrementalRotation; } }