Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Cloth not updated in builds
#4
(29-12-2020, 01:00 AM)fluidman84 Wrote: My apologies, but I'm not finding the Obi solver manual update methods as I am the Final IK examples for disabling / enabling. I've tried this, but it does not appear to have solved the issue. 

Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RootMotion.FinalIK;
using Obi;

public class IK_LateUpdate : MonoBehaviour
{

    // Array of IK components that you can assign from the inspector.
    // IK is abstract, so it does not matter which specific IK component types are used.
    public IK[] components;
    public ObiFixedUpdater obifixedupdater;

    void Start()
    {
        // Disable all the IK components so they won't update their solvers. Use Disable() instead of enabled = false, the latter does not guarantee solver initiation.
        foreach (IK component in components) component.enabled = false;
        ObiProfiler.DisableProfiler();
    }

    void FixedUpdate()
    {
        // Updating the IK solvers in a specific order.
        foreach (IK component in components) component.GetIKSolver().Update();
        ObiProfiler.EnableProfiler();
    }

}

In your code, you’re just enabling/disabling Obi’s built in profiler. Needless to say that won’t update the simulation. (Or profile it, as there’s nothing to profile there Guiño )

You can derive from the ObiUpdater class to update Obi whenever you want, as suggested in thr manual:
http://obi.virtualmethodstudio.com/tutor...aters.html

To do this, just look up ObiUpdater in the API docs:
http://obi.virtualmethodstudio.com/api.html

You'll see it has several methods to advance the simulation: BeginStep, Substep, EndStep, and Interpolate. You can also check the different existing subclasses of ObiUpdater (ObiFixedUpdater, ObiLateUpdater, etc) for examples on how/when to call these methods. The typical pattern would be:

Code:
BeginStep();
Substep();
Substep();
.
.
.
Substep();
EndStep();
Interpolate();

So: one call to BeginStep() (performs collision detection and clears up cached data), one or more calls to Substep() (advances simulation), one call to EndStep(); (calls collision callbacks) and one call to Interpolate(); (interpolates physics state and triggers rendering).

The simplest thing for you to do is to just make a copy of ObiFixedUpdater, and then insert the FinalIK update code
in the appropiate place.

Note this isn’t the only possible solution. You just need things to update in a specific order, so you can also use Unity’s script execution order to explicitly set the order in which components should be updated, instead of writing a single component that updates both Obi and FinalIK. See: https://docs.unity3d.com/Manual/class-MonoManager.html
Reply


Messages In This Thread
Cloth not updated in builds - by fluidman84 - 25-12-2020, 12:47 AM
RE: Cloth not updated in builds - by josemendez - 28-12-2020, 05:18 PM
RE: Cloth not updated in builds - by fluidman84 - 29-12-2020, 01:00 AM
RE: Cloth not updated in builds - by josemendez - 29-12-2020, 09:26 AM
RE: Cloth not updated in builds - by fluidman84 - 30-12-2020, 10:47 PM
RE: Cloth not updated in builds - by josemendez - 30-12-2020, 11:56 PM
RE: Cloth not updated in builds - by fluidman84 - 31-12-2020, 09:08 AM