Skip to content

Commit

Permalink
Fix bug that would change IK target positions if sitting was preceded…
Browse files Browse the repository at this point in the history
… by GoTo Task
  • Loading branch information
lenalinke committed Oct 2, 2024
1 parent 7a5ba5a commit 5f43fc2
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,7 @@ AnimatorState:
- {fileID: -4743300286174424125}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 1
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
Expand Down Expand Up @@ -700,49 +700,49 @@ AnimatorController:
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: ShakeHead
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: WaveLeft
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: WaveRight
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: NoAnimation
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: PointingLeft
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: PointingRight
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: Sitting
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,15 @@ public override void StartExecution(Agent agent)
hipConstraint = agent.transform.Find("AnimationRigging/CharacterRig/Hip Constraint").GetComponent<MultiParentConstraint>();
hipIKTarget = hipConstraint.transform.Find("Hip IK_target").gameObject;

// set the target positions to the agents current position
leftLegIK.transform.position = rightLegIK.transform.position = agent.transform.position;
hipIKTarget.transform.position = agent.transform.position;

// case: sitting down
if (currentState)
{
agent.transform.rotation = Chair.transform.rotation;
Debug.Log("Setting footrest and sitposition");
leftLegIKTarget.transform.position = rightLegIKTarget.transform.position = footrest;
hipIKTarget.transform.position = sitPosition;

Expand Down Expand Up @@ -118,17 +123,24 @@ private IEnumerator FadeIKAndPosition(Agent agent, bool fadeIn)
Vector3 endPosition = fadeIn ? sitPosition : feetPosition;
while (time < duration)
{
rightLegIK.gameObject.transform.position = leftLegIK.gameObject.transform.position = footrest;
time += Time.deltaTime;
leftLegIK.weight = Mathf.Lerp(startWeight, endWeight, time / duration);
rightLegIK.weight = Mathf.Lerp(startWeight, endWeight, time / duration);

// move ik target when standing up, to avoid, that the agent suddenly completely stretches their feet
leftLegIKTarget.transform.position = fadeIn
? rightLegIKTarget.transform.position = ikPosition
: rightLegIKTarget.transform.position = Vector3.Lerp(footrest, feetPosition, time / duration);

spineAim.weight = Mathf.Lerp(startWeight, endWeight, time / duration);
hipConstraint.weight = Mathf.Lerp(startWeight, endWeight, time / duration);
agent.transform.position = Vector3.Lerp(startPosition, endPosition, time / duration);
leftLegIKTarget.transform.position = rightLegIKTarget.transform.position = ikPosition;
hipIKTarget.transform.position = sitPosition;
yield return null;
}

rightLegIK.gameObject.transform.position = leftLegIK.gameObject.transform.position = footrest;
leftLegIKTarget.transform.position = rightLegIKTarget.transform.position = ikPosition;
hipIKTarget.transform.position = sitPosition;
finished = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,18 @@ protected override void Start()


AgentSittingTask sittingTaskStool = new AgentSittingTask(Stool, SittingDirection.SITDOWN);
// AgentSittingTask sittingTaskStool2 = new AgentSittingTask(Stool, SittingDirection.SITDOWN);
AgentSittingTask standingTaskStool = new AgentSittingTask(Stool, SittingDirection.STANDUP);

// add a sitting task
taskSystem.ScheduleTask(sittingTask);
taskSystem.Tasks.WaitForSeconds(3);
Debug.Log("2nd Sitting Task Scheduled");
taskSystem.ScheduleTask(standingTask);
Vector3 destination = Stool.transform.Find("FeetPosition").position;
taskSystem.Tasks.GoTo(destination);

GameObject destination = Stool.transform.Find("FeetPosition").gameObject;
taskSystem.Tasks.GoTo(destination, Vector3.zero, 0, true);
taskSystem.Tasks.WaitForSeconds(1);
taskSystem.ScheduleTask(sittingTaskStool);
taskSystem.Tasks.WaitForSeconds(3);
taskSystem.ScheduleTask(standingTaskStool);
Expand Down
Loading

0 comments on commit 5f43fc2

Please sign in to comment.