diff options
| author | chai <chaifix@163.com> | 2022-07-02 18:23:46 +0800 | 
|---|---|---|
| committer | chai <chaifix@163.com> | 2022-07-02 18:23:46 +0800 | 
| commit | f0f1d830651f3737030e258dc86b42a37baa1bca (patch) | |
| tree | 386946c608ec02094c81253872e890615e0c3807 /JamHelper/Assets/JamUtils/FastIK/Scripts | |
| parent | e7e9156b0e4d180f8f9e291eb5ccfb08847e6269 (diff) | |
* change directory
Diffstat (limited to 'JamHelper/Assets/JamUtils/FastIK/Scripts')
14 files changed, 0 insertions, 547 deletions
diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK.meta deleted file mode 100644 index a9848af..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 69d93e855b2f3534f90112f45a5e2180 -folderAsset: yes -DefaultImporter: -  externalObjects: {} -  userData:  -  assetBundleName:  -  assetBundleVariant:  diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKCCD.cs b/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKCCD.cs deleted file mode 100644 index 9fb4883..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKCCD.cs +++ /dev/null @@ -1,95 +0,0 @@ -using UnityEngine; -/* -public class IKCCD : MonoBehaviour -{ -    public int ChainLength = 2; -    public Transform Target; -    protected Quaternion TargetInitialRotation; -    protected Quaternion EndInitialRotation; -    public Transform Pole; -    protected float CompleteLength; - -    public int Iterations = 10; -    public float Delta = 0.001f; - -    protected Transform[] Bones; -    //protected Quaternion[] InitialRotation; - - -    // Start is called before the first frame update -    void Awake() -    { -        //initial length -        Bones = new Transform[ChainLength + 1]; -        //InitialRotation = new Quaternion[ChainLength + 1]; -        TargetInitialRotation = Target.rotation; -        EndInitialRotation = transform.rotation; - -        var current = transform; -        CompleteLength = 0; -        for (int i = ChainLength - 1; i >= 0; i--) -        { -            CompleteLength += (current.position - current.parent.position).magnitude; -            Bones[i + 1] = current; -            Bones[i] = current.parent; -            //InitialRotation[i + 1] = current.rotation; -            //InitialRotation[i] = current.parent.rotation; -            current = current.parent; -        } -        if (Bones[0] == null) -            throw new UnityException("The chain value is longer than the ancestor chain!"); -    } - -    // Update is called once per frame -    void LateUpdate() -    { -        //CCD -        var lastBone = Bones[Bones.Length - 1]; - -        //for (var i = 0; i < Bones.Length; i++) -        //  Bones[i].rotation = InitialRotation[i]; - -        for (int iteration = 0; iteration < Iterations; iteration++) -        { -            for (var i = Bones.Length - 1; i >= 0; i--) -            { -                //https://www.youtube.com/watch?v=MA1nT9RAF3k - -                if (i == Bones.Length - 1) -                { -                    Bones[i].rotation = Target.rotation * Quaternion.Inverse(TargetInitialRotation) * EndInitialRotation; -                } -                else -                { -                    Bones[i].rotation = Quaternion.FromToRotation(lastBone.position - Bones[i].position, Target.position - Bones[i].position) * Bones[i].rotation; - -                    //jitter to solve strait line -                    //if (iteration == 5 && i == 0 && (Target.position - lastBone.position).sqrMagnitude > 0.01f && (Target.position - Bones[i].position).sqrMagnitude < CompleteLength * CompleteLength) -                    //    Bones[i].rotation = Quaternion.AngleAxis(10, Vector3.up) * Bones[i].rotation; - -                    //move towards pole -                    if (Pole != null && i + 2 <= Bones.Length - 1) -                    { -                        var plane = new Plane(Bones[i + 2].position - Bones[i].position, Bones[i].position); -                        var projectedPole = plane.ClosestPointOnPlane(Pole.position); -                        var projectedBone = plane.ClosestPointOnPlane(Bones[i + 1].position); -                        if ((projectedBone - Bones[i].position).sqrMagnitude > 0.01f) -                        { -                            var angle = Vector3.SignedAngle(projectedBone - Bones[i].position, projectedPole - Bones[i].position, plane.normal); -                            Bones[i].rotation = Quaternion.AngleAxis(angle, plane.normal) * Bones[i].rotation; -                        } -                    } -                } - - -                //close enough? -                if ((lastBone.position - Target.position).sqrMagnitude < Delta * Delta) -                    break; -            } -        } - -    } -     - -} -*/
\ No newline at end of file diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKCCD.cs.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKCCD.cs.meta deleted file mode 100644 index c7c447c..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKCCD.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 12ebedeac55c4bb4aa003bfe2e00556e -MonoImporter: -  externalObjects: {} -  serializedVersion: 2 -  defaultReferences: [] -  executionOrder: 0 -  icon: {instanceID: 0} -  userData:  -  assetBundleName:  -  assetBundleVariant:  diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKFabric.cs b/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKFabric.cs deleted file mode 100644 index a9f6ee1..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKFabric.cs +++ /dev/null @@ -1,250 +0,0 @@ -#if UNITY_EDITOR -using UnityEditor; -#endif -using UnityEngine; - -namespace DitzelGames.FastIK -{ -    /// <summary> -    /// Fabrik IK Solver -    /// </summary> -    public class FastIKFabric : MonoBehaviour -    { -        /// <summary> -        /// Chain length of bones -        /// </summary> -        public int ChainLength = 2; - -        /// <summary> -        /// Target the chain should bent to -        /// </summary> -        public Transform Target; -        public Transform Pole; - -        /// <summary> -        /// Solver iterations per update -        /// </summary> -        [Header("Solver Parameters")] -        public int Iterations = 10; - -        /// <summary> -        /// Distance when the solver stops -        /// </summary> -        public float Delta = 0.001f; - -        /// <summary> -        /// Strength of going back to the start position. -        /// </summary> -        [Range(0, 1)] -        public float SnapBackStrength = 1f; - - -        protected float[] BonesLength; //Target to Origin -        protected float CompleteLength; -        protected Transform[] Bones; -        protected Vector3[] Positions; -        protected Vector3[] StartDirectionSucc; -        protected Quaternion[] StartRotationBone; -        protected Quaternion StartRotationTarget; -        protected Transform Root; - - -        // Start is called before the first frame update -        void Awake() -        { -            Init(); -        } - -        void Init() -        { -            //initial array -            Bones = new Transform[ChainLength + 1]; -            Positions = new Vector3[ChainLength + 1]; -            BonesLength = new float[ChainLength]; -            StartDirectionSucc = new Vector3[ChainLength + 1]; -            StartRotationBone = new Quaternion[ChainLength + 1]; - -            //find root -            Root = transform; -            for (var i = 0; i <= ChainLength; i++) -            { -                if (Root == null) -                    throw new UnityException("The chain value is longer than the ancestor chain!"); -                Root = Root.parent; -            } - -            //init target -            if (Target == null) -            { -                Target = new GameObject(gameObject.name + " Target").transform; -                SetPositionRootSpace(Target, GetPositionRootSpace(transform)); -            } -            StartRotationTarget = GetRotationRootSpace(Target); - - -            //init data -            var current = transform; -            CompleteLength = 0; -            for (var i = Bones.Length - 1; i >= 0; i--) -            { -                Bones[i] = current; -                StartRotationBone[i] = GetRotationRootSpace(current); - -                if (i == Bones.Length - 1) -                { -                    //leaf -                    StartDirectionSucc[i] = GetPositionRootSpace(Target) - GetPositionRootSpace(current); -                } -                else -                { -                    //mid bone -                    StartDirectionSucc[i] = GetPositionRootSpace(Bones[i + 1]) - GetPositionRootSpace(current); -                    BonesLength[i] = StartDirectionSucc[i].magnitude; -                    CompleteLength += BonesLength[i]; -                } - -                current = current.parent; -            } - - - -        } - -        // Update is called once per frame -        void LateUpdate() -        { -            ResolveIK(); -        } - -        private void ResolveIK() -        { -            if (Target == null) -                return; - -            if (BonesLength.Length != ChainLength) -                Init(); - -            //Fabric - -            //  root -            //  (bone0) (bonelen 0) (bone1) (bonelen 1) (bone2)... -            //   x--------------------x--------------------x---... - -            //get position -            for (int i = 0; i < Bones.Length; i++) -                Positions[i] = GetPositionRootSpace(Bones[i]); - -            var targetPosition = GetPositionRootSpace(Target); -            var targetRotation = GetRotationRootSpace(Target); - -            //1st is possible to reach? -            if ((targetPosition - GetPositionRootSpace(Bones[0])).sqrMagnitude >= CompleteLength * CompleteLength) -            { -                //just strech it -                var direction = (targetPosition - Positions[0]).normalized; -                //set everything after root -                for (int i = 1; i < Positions.Length; i++) -                    Positions[i] = Positions[i - 1] + direction * BonesLength[i - 1]; -            } -            else -            { -                for (int i = 0; i < Positions.Length - 1; i++) -                    Positions[i + 1] = Vector3.Lerp(Positions[i + 1], Positions[i] + StartDirectionSucc[i], SnapBackStrength); - -                for (int iteration = 0; iteration < Iterations; iteration++) -                { -                    //https://www.youtube.com/watch?v=UNoX65PRehA -                    //back -                    for (int i = Positions.Length - 1; i > 0; i--) -                    { -                        if (i == Positions.Length - 1) -                            Positions[i] = targetPosition; //set it to target -                        else -                            Positions[i] = Positions[i + 1] + (Positions[i] - Positions[i + 1]).normalized * BonesLength[i]; //set in line on distance -                    } - -                    //forward -                    for (int i = 1; i < Positions.Length; i++) -                        Positions[i] = Positions[i - 1] + (Positions[i] - Positions[i - 1]).normalized * BonesLength[i - 1]; - -                    //close enough? -                    if ((Positions[Positions.Length - 1] - targetPosition).sqrMagnitude < Delta * Delta) -                        break; -                } -            } - -            //move towards pole -            if (Pole != null) -            { -                var polePosition = GetPositionRootSpace(Pole); -                for (int i = 1; i < Positions.Length - 1; i++) -                { -                    var plane = new Plane(Positions[i + 1] - Positions[i - 1], Positions[i - 1]); -                    var projectedPole = plane.ClosestPointOnPlane(polePosition); -                    var projectedBone = plane.ClosestPointOnPlane(Positions[i]); -                    var angle = Vector3.SignedAngle(projectedBone - Positions[i - 1], projectedPole - Positions[i - 1], plane.normal); -                    Positions[i] = Quaternion.AngleAxis(angle, plane.normal) * (Positions[i] - Positions[i - 1]) + Positions[i - 1]; -                } -            } - -            //set position & rotation -            for (int i = 0; i < Positions.Length; i++) -            { -                if (i == Positions.Length - 1) -                    SetRotationRootSpace(Bones[i], Quaternion.Inverse(targetRotation) * StartRotationTarget * Quaternion.Inverse(StartRotationBone[i])); -                else -                    SetRotationRootSpace(Bones[i], Quaternion.FromToRotation(StartDirectionSucc[i], Positions[i + 1] - Positions[i]) * Quaternion.Inverse(StartRotationBone[i])); -                SetPositionRootSpace(Bones[i], Positions[i]); -            } -        } - -        private Vector3 GetPositionRootSpace(Transform current) -        { -            if (Root == null) -                return current.position; -            else -                return Quaternion.Inverse(Root.rotation) * (current.position - Root.position); -        } - -        private void SetPositionRootSpace(Transform current, Vector3 position) -        { -            if (Root == null) -                current.position = position; -            else -                current.position = Root.rotation * position + Root.position; -        } - -        private Quaternion GetRotationRootSpace(Transform current) -        { -            //inverse(after) * before => rot: before -> after -            if (Root == null) -                return current.rotation; -            else -                return Quaternion.Inverse(current.rotation) * Root.rotation; -        } - -        private void SetRotationRootSpace(Transform current, Quaternion rotation) -        { -            if (Root == null) -                current.rotation = rotation; -            else -                current.rotation = Root.rotation * rotation; -        } - -        void OnDrawGizmos() -        { -#if UNITY_EDITOR -            var current = this.transform; -            for (int i = 0; i < ChainLength && current != null && current.parent != null; i++) -            { -                var scale = Vector3.Distance(current.position, current.parent.position) * 0.1f; -                Handles.matrix = Matrix4x4.TRS(current.position, Quaternion.FromToRotation(Vector3.up, current.parent.position - current.position), new Vector3(scale, Vector3.Distance(current.parent.position, current.position), scale)); -                Handles.color = Color.green; -                Handles.DrawWireCube(Vector3.up * 0.5f, Vector3.one); -                current = current.parent; -            } -        } -#endif - -    } -}
\ No newline at end of file diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKFabric.cs.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKFabric.cs.meta deleted file mode 100644 index 05db1b4..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKFabric.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 03ca45bb53dc94f478358a1b6475653d -MonoImporter: -  externalObjects: {} -  serializedVersion: 2 -  defaultReferences: [] -  executionOrder: 200 -  icon: {instanceID: 0} -  userData:  -  assetBundleName:  -  assetBundleVariant:  diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKLook.cs b/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKLook.cs deleted file mode 100644 index 54ed1ed..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKLook.cs +++ /dev/null @@ -1,40 +0,0 @@ -using UnityEngine; - -namespace DitzelGames.FastIK -{ -    public class FastIKLook : MonoBehaviour -    { -        /// <summary> -        /// Look at target -        /// </summary> -        public Transform Target; - -        /// <summary> -        /// Initial direction -        /// </summary> -        protected Vector3 StartDirection; - -        /// <summary> -        /// Initial Rotation -        /// </summary> -        protected Quaternion StartRotation; - -        void Awake() -        { -            if (Target == null) -                return; - -            StartDirection = Target.position - transform.position; -            StartRotation = transform.rotation; -        } - -        void Update() -        { -            if (Target == null) -                return; - - -            transform.rotation = Quaternion.FromToRotation(StartDirection, Target.position - transform.position) * StartRotation; -        } -    } -} diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKLook.cs.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKLook.cs.meta deleted file mode 100644 index fa801cd..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/FastIK/FastIKLook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5db2cc9d15d8e1c4e81fbc747c163d99 -MonoImporter: -  externalObjects: {} -  serializedVersion: 2 -  defaultReferences: [] -  executionOrder: 0 -  icon: {instanceID: 0} -  userData:  -  assetBundleName:  -  assetBundleVariant:  diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample.meta deleted file mode 100644 index 2fef29e..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f9ac29da80c8cfe4084775ebe4166f24 -folderAsset: yes -DefaultImporter: -  externalObjects: {} -  userData:  -  assetBundleName:  -  assetBundleVariant:  diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleProcedualAnimation.cs b/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleProcedualAnimation.cs deleted file mode 100644 index 01e38ff..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleProcedualAnimation.cs +++ /dev/null @@ -1,45 +0,0 @@ -using UnityEngine; - -namespace DitzelGames.FastIK -{ -    class SampleProcedualAnimation :  MonoBehaviour -    { -        public Transform[] FootTarget; -        public Transform LookTarget; -        public Transform HandTarget; -        public Transform HandPole; -        public Transform Step; -        public Transform Attraction; - -        public void LateUpdate() -        { -            //move step & attraction -            Step.Translate(Vector3.forward * Time.deltaTime * 0.7f); -            if (Step.position.z > 1f) -                Step.position = Step.position + Vector3.forward * -2f; -            Attraction.Translate(Vector3.forward * Time.deltaTime * 0.5f); -            if (Attraction.position.z > 1f) -                Attraction.position = Attraction.position + Vector3.forward * -2f; - -            //footsteps -            for(int i = 0; i < FootTarget.Length; i++) -            { -                var foot = FootTarget[i]; -                var ray = new Ray(foot.transform.position + Vector3.up * 0.5f, Vector3.down); -                var hitInfo = new RaycastHit(); -                if(Physics.SphereCast(ray, 0.05f, out hitInfo, 0.50f)) -                    foot.position = hitInfo.point + Vector3.up * 0.05f; -            } - -            //hand and look -            var normDist = Mathf.Clamp((Vector3.Distance(LookTarget.position, Attraction.position) - 0.3f) / 1f, 0, 1); -            HandTarget.rotation = Quaternion.Lerp(Quaternion.Euler(90, 0, 0), HandTarget.rotation, normDist); -            HandTarget.position = Vector3.Lerp(Attraction.position, HandTarget.position, normDist); -            HandPole.position = Vector3.Lerp(HandTarget.position + Vector3.down * 2, HandTarget.position + Vector3.forward * 2f, normDist); -            LookTarget.position = Vector3.Lerp(Attraction.position, LookTarget.position, normDist); - - -        } - -    } -} diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleProcedualAnimation.cs.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleProcedualAnimation.cs.meta deleted file mode 100644 index 7f3ffb6..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleProcedualAnimation.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1c9cd2c593f693345ad26b97d5a0d43f -MonoImporter: -  externalObjects: {} -  serializedVersion: 2 -  defaultReferences: [] -  executionOrder: 100 -  icon: {instanceID: 0} -  userData:  -  assetBundleName:  -  assetBundleVariant:  diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleRotator.cs b/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleRotator.cs deleted file mode 100644 index 62f201d..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleRotator.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEngine; - -namespace DitzelGames.FastIK -{ -    public class SampleRotator : MonoBehaviour -    { -         -        void Update() -        { -            //just rotate the object -            transform.Rotate(0, Time.deltaTime * 90, 0); -        } -    } -} diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleRotator.cs.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleRotator.cs.meta deleted file mode 100644 index 5fd4b94..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleRotator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e9a7a99d0dda4cf438c3fd3db6627c08 -MonoImporter: -  externalObjects: {} -  serializedVersion: 2 -  defaultReferences: [] -  executionOrder: 0 -  icon: {instanceID: 0} -  userData:  -  assetBundleName:  -  assetBundleVariant:  diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleSinMover.cs b/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleSinMover.cs deleted file mode 100644 index 0607082..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleSinMover.cs +++ /dev/null @@ -1,21 +0,0 @@ -using UnityEngine; - -namespace DitzelGames.FastIK -{ -    public class SampleSinMover : MonoBehaviour -    { -        public Vector3 Dir; -        public Vector3 Start; - -        private void Awake() -        { -            Start = transform.position; -        } - -        void Update() -        { -            //just move the object from a to b and back -            transform.position = Start + Dir * Mathf.Sin(Time.timeSinceLevelLoad); -        } -    } -} diff --git a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleSinMover.cs.meta b/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleSinMover.cs.meta deleted file mode 100644 index 9095f54..0000000 --- a/JamHelper/Assets/JamUtils/FastIK/Scripts/Sample/SampleSinMover.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf9a667200f2ae8459b397bc03e59350 -MonoImporter: -  externalObjects: {} -  serializedVersion: 2 -  defaultReferences: [] -  executionOrder: 0 -  icon: {instanceID: 0} -  userData:  -  assetBundleName:  -  assetBundleVariant:   | 
