protected override IEnumerator MoveToAnchorPosition()
{
moveToAnchor = true;
anchor.position = transform.position;
anchor.rotation = transform.rotation;
myRigidbody.drag = grabbedDrag;
// LimitJoint();
myRigidbody.isKinematic = true;
// myJoint.linearLimit = new SoftJointLimit() {limit = 0.001f};
var moveToTargetPos = true;
var targetPosition = GetMoveToAnchorOffsetPosition();
while (moveToTargetPos)
{
var toTarget = targetPosition - transform.position;
var moveDistance = Mathf.Min(grabSpeed * Time.deltaTime, toTarget.magnitude);
transform.position += toTarget.normalized * moveDistance;
if (Vector3.Distance(transform.position, targetPosition) < 0.004f)
{
moveToTargetPos = false;
}
else
{
yield return new WaitForFixedUpdate();
}
}
var initRotation = transform.rotation;
var targetRotation = Quaternion.identity;
var initDist = Vector3.Distance(transform.position, gazeAnchor.position);
while (moveToAnchor)
{
var anchorPos = gazeAnchor.position + Vector3.up*-0.1f;
var toAnchor = anchorPos - transform.position;
var moveDistance = Mathf.Min(grabSpeed * Time.deltaTime, toAnchor.magnitude);
transform.position += toAnchor.normalized * moveDistance;
var dist = Vector3.Distance(transform.position, anchorPos);
var t = dist / Mathf.Max(initDist, float.Epsilon);
// var localUp = pointer.transform.InverseTransformDirection(grabbedUpAxis);
// transform.rotation = Quaternion.Slerp(targetRotation, initRotation, t);
if (dist < 0.001f)
{
moveToAnchor = false;
// anchor.parent = gazeAnchor;
transform.position = anchorPos;
myRigidbody.isKinematic = true;
FreeJoint();
anchor.position = transform.position;
transform.parent = gazeAnchor;
// myJoint.linearLimit = new SoftJointLimit();
}
else
{
yield return new WaitForFixedUpdate();
}
}
}