123456789101112131415161718192021222324252627282930313233343536373839 |
- using UnityEngine;
- public class IK
- {
- private TBody body;
- private Quaternion defHipQ;
- private Quaternion defKneeQ;
- private float defLEN1;
- private float defLEN2;
- private Vector3 knee_old;
- private Vector3 vechand;
- public void Init(Transform hip, Transform knee, Transform ankle, TBody b)
- {
- body = b;
- defLEN1 = (hip.position - knee.position).magnitude;
- defLEN2 = (ankle.position - knee.position).magnitude;
- knee_old = knee.position;
- defHipQ = hip.localRotation;
- defKneeQ = knee.localRotation;
- vechand = Vector3.zero;
- }
- public void Porc(Transform hip, Transform knee, Transform ankle, Vector3 tgt, Vector3 vechand_offset)
- {
- knee_old = knee_old * 0.5f + knee.position * 0.5f;
- Vector3 normalized1 = (knee_old - tgt).normalized;
- knee_old = tgt + normalized1 * defLEN2;
- Vector3 normalized2 = (knee_old - hip.position).normalized;
- knee_old = hip.position + normalized2 * defLEN1;
- new Quaternion().SetLookRotation(normalized2);
- hip.transform.rotation =
- Quaternion.FromToRotation(knee.transform.position - hip.transform.position, knee_old - hip.transform.position)
- * hip.transform.rotation;
- knee.transform.rotation =
- Quaternion.FromToRotation(ankle.transform.position - knee.transform.position, tgt - knee.transform.position)
- * knee.transform.rotation;
- }
- }
|