public void SetDriver(IBipedDriver newDriver) { if (newDriver == driver) { return; } if (driver != null) { driver.onJump -= OnJump; } driver = newDriver; if (driver != null) { driver.onJump += OnJump; } }
void Start() { if (rootNode == null) { rootNode = transform; } if (driver == null) { driver = GetComponentInParent <IBipedDriver>(); } // Setup segments foreach (BendingSegment segment in segments) { Quaternion parentRot = segment.firstTransform.parent.rotation; Quaternion parentRotInv = Quaternion.Inverse(parentRot); segment.referenceLookDir = parentRotInv * rootNode.rotation * headLookVector.normalized; segment.referenceUpDir = parentRotInv * rootNode.rotation * headUpVector.normalized; segment.angleH = 0; segment.angleV = 0; segment.dirUp = segment.referenceUpDir; segment.chainLength = 1; Transform t = segment.lastTransform; while (t != segment.firstTransform && t != t.root) { segment.chainLength++; t = t.parent; } segment.origRotations = new Quaternion[segment.chainLength]; t = segment.lastTransform; for (int i = segment.chainLength - 1; i >= 0; i--) { segment.origRotations[i] = t.localRotation; t = t.parent; } } }
public void SetDriver(IBipedDriver driver) { this.driver = driver; }