Files
project-reset/Assets/Scripts/Units/UnitAnimation.cs
Chris 49862b5de1 feat: add shuriken weapon
add shuriken weapon model, 3 animations
change move speed triggers animation
2026-01-09 01:14:14 -05:00

74 lines
3.2 KiB
C#

using System;
using UnityEngine;
namespace Reset.Units{
public class UnitAnimation : UnitComponent{
public Animator modelAnimator;
public Transform headBone;
public Transform neckBone;
public Vector3 headRotOffset;
public Vector3 neckRotOffset;
public Vector3 rotationLimit;
public float moveSpeed;
// Temporary
private float inputMagnitude;
void Update(){
// Temporary
// try {
// inputMagnitude = Mathf.MoveTowards(inputMagnitude, GetComponent<PlayerControls>().rawMoveInput.magnitude * 2f, 6f * Time.deltaTime);
//
// modelAnimator.SetFloat("Move Direction X", Unit.Movement.GetResolvedDirectionLocal().x * inputMagnitude);
// modelAnimator.SetFloat("Move Direction Y", Unit.Movement.GetResolvedDirectionLocal().y * inputMagnitude);
// } catch (Exception e) {
// Debug.LogError($"Failed in setting X and Y move direction floats: {e.Message}");
// }
modelAnimator.SetFloat("Move Direction X", moveSpeed);
}
private void LateUpdate(){
// TurnHead();
}
void TurnHead(){
var targetObject = (Unit.Combat as EnemyCombat).UnitTarget;
if (targetObject) {
Vector3 headDirToTarget = headBone.position.DirectionTo(targetObject.transform.position);
Vector3 neckDirToTarget = neckBone.position.DirectionTo(targetObject.transform.position);
Quaternion newHeadRot = Quaternion.LookRotation(headDirToTarget);
Quaternion newNeckRot = Quaternion.LookRotation(neckDirToTarget);
Quaternion offsetHeadRot = Quaternion.Euler(headRotOffset);
Quaternion offsetNeckRot = Quaternion.Euler(neckRotOffset);
Debug.Log(offsetNeckRot.eulerAngles);
Vector3 clampedHeadRot = new Vector3(
Mathf.Clamp(newHeadRot.eulerAngles.x, -rotationLimit.x, rotationLimit.x),
Mathf.Clamp(newHeadRot.eulerAngles.y, -rotationLimit.y, rotationLimit.y),
Mathf.Clamp(newHeadRot.eulerAngles.z, -rotationLimit.z, rotationLimit.z)
);
Vector3 clampedNeckRot = new Vector3(
Mathf.Clamp(newNeckRot.eulerAngles.x, -rotationLimit.x, rotationLimit.x),
Mathf.Clamp(newNeckRot.eulerAngles.y, -rotationLimit.y, rotationLimit.y),
Mathf.Clamp(newNeckRot.eulerAngles.z, -rotationLimit.z, rotationLimit.z)
);
Quaternion outputHeadRot = Quaternion.Lerp(headBone.transform.rotation, Quaternion.Euler(clampedHeadRot), .8f);
Quaternion outputNeckRot = Quaternion.Lerp(neckBone.transform.rotation, Quaternion.Euler(clampedNeckRot), .2f);
headBone.transform.rotation = offsetHeadRot * headBone.transform.rotation * outputHeadRot;
neckBone.transform.rotation = (offsetNeckRot * neckBone.transform.rotation * outputNeckRot);
}
}
}
}