feat: updated sway

now contains sway children that swing alongside the root object
This commit is contained in:
Chris
2026-01-01 20:59:04 -05:00
parent 9cad319f09
commit 5e770613bc

View File

@@ -1,4 +1,9 @@
using System;
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.InputSystem.Editor;
using Random = UnityEngine.Random;
public class SwayMovement : MonoBehaviour{
Vector3 originalRot;
@@ -6,8 +11,30 @@ public class SwayMovement : MonoBehaviour{
public Vector3 swaySpeed;
private Vector3 offset;
[ShowInInspector, SerializeField]
internal List<SwayChildren> swayChildren;
[Serializable]
internal class SwayChildren{
public GameObject rootObject;
[SerializeField]
public Vector3 originalRot;
public float delay;
public Vector3 rotMultiplier = new Vector3(1f, 1f, 1f);
private Vector3 offset;
}
void Start(){
foreach (SwayChildren swayChild in swayChildren) {
SetChildOrigins(swayChild);
}
void SetChildOrigins(SwayChildren inputChild){
inputChild.originalRot = inputChild.rootObject.transform.localEulerAngles;
}
originalRot = transform.rotation.eulerAngles;
offset = new Vector3(Random.Range(-5, 1), Random.Range(-1, 5), Random.Range(-3, 1));
}
@@ -21,5 +48,24 @@ public class SwayMovement : MonoBehaviour{
);
transform.rotation = Quaternion.Euler(sway);
foreach (SwayChildren swayChild in swayChildren) {
CheckSwayChildren(swayChild);
}
void CheckSwayChildren(SwayChildren inputChild){
Vector3 childSway = new Vector3(
inputChild.originalRot.x + Mathf.Sin((Time.time + offset.x - inputChild.delay) * swaySpeed.x) * swayAmount.x * inputChild.rotMultiplier.x,
inputChild.originalRot.y + Mathf.Sin((Time.time + offset.y - inputChild.delay) * swaySpeed.y) * swayAmount.y * inputChild.rotMultiplier.y,
inputChild.originalRot.z + Mathf.Sin((Time.time + offset.z - inputChild.delay) * swaySpeed.z) * swayAmount.z * inputChild.rotMultiplier.z
);
inputChild.rootObject.transform.rotation = Quaternion.Euler(childSway);
}
}
}