50 lines
1.3 KiB
C#
50 lines
1.3 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace BITKit.Physics
|
||
|
{
|
||
|
[Serializable]
|
||
|
public class JointConfigure
|
||
|
{
|
||
|
public Transform animate;
|
||
|
public ConfigurableJoint joint;
|
||
|
public Quaternion InitialRotation { get; set; }
|
||
|
}
|
||
|
public class PhysicsBasedAnimation : MonoBehaviour
|
||
|
{
|
||
|
[Range(0, 1)] public float Blend;
|
||
|
[SerializeField] private JointConfigure[] jointConfigures;
|
||
|
[SerializeField] private float positionSpring;
|
||
|
[SerializeField] private float positionDamper;
|
||
|
[SerializeField] private float maximumForce;
|
||
|
|
||
|
private void Start()
|
||
|
{
|
||
|
foreach (var x in jointConfigures)
|
||
|
{
|
||
|
x.InitialRotation=x.animate.localRotation;
|
||
|
}
|
||
|
}
|
||
|
private void FixedUpdate()
|
||
|
{
|
||
|
//var spring = Mathf.Lerp(Blend,0,angularSprint);
|
||
|
var drive = new JointDrive
|
||
|
{
|
||
|
positionDamper = positionDamper,
|
||
|
positionSpring = positionSpring,
|
||
|
maximumForce = maximumForce,
|
||
|
};
|
||
|
foreach (var jointConfigure in jointConfigures)
|
||
|
{
|
||
|
jointConfigure.joint.angularXDrive = drive;
|
||
|
jointConfigure.joint.angularYZDrive = drive;
|
||
|
jointConfigure.joint.targetRotation = Quaternion.Inverse(jointConfigure.animate.localRotation) *
|
||
|
jointConfigure.InitialRotation;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|