Do you know how to do it with VisualEffect instead of ParticleSystem? I’ve tried to change every particle method by its equivalent in visual effect but the Simulate method has different arguments.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.VFX;
using RootMotion.FinalIK;
public class ParticleController : MonoBehaviour
{
public IK lastSolvedIK;
//public ParticleSystem particles;
public VisualEffect vfx;
private void Awake()
{
lastSolvedIK.GetIKSolver().OnPostUpdate += AfterIK;
vfx.Stop();
//particles.Stop();
}
private void Update()
{
vfx.pause = true;
//particles.Pause();
}
void AfterIK()
{
vfx.Simulate(Time.deltaTime);
vfx.Play();
//particles.Simulate(Time.deltaTime, true, false, false);
//particles.Play(true);
}
private void OnDestroy()
{
if (lastSolvedIK != null) lastSolvedIK.GetIKSolver().OnPostUpdate -= AfterIK;
}
}
Thank you for teaching me a new method. If I want to animate parameters like the weight of each chain in CCDIK, I find that using a List or an array ([ ]) doesn’t allow for animation, even if I set them as public or SerializedField.
if I let Unity auto update them, I am not certain of how true the changes stay to the original intent.
IKExecutionOrder.cs for example, Unity auto updater changes “return animator.updateMode == AnimatorUpdateMode.AnimatePhysics;” to “return animator.updateMode == AnimatorUpdateMode.Fixed;”
Wouldn’t it make more sense if it were replaced with “return animator.updateMode == AnimatorUpdateMode.Fixed && animator.animatePhysics;” to better preserve the original logic?
Any plans to release an update to Final IK supporting more recent Unity versions?
Hey,
Looks like I uploaded a package for Unity 6000, but forgot about 2023.. Anyway, this auto update is correct. don’t worry about it. It just needs to know if Animator is updated at fixed frames only or all of them.
Hey,
I don’t know, I never used VisualEffect. I just tried to create a simple fx with it in Unity6, but for the life of me I can’t figure out how to get some damn particles spawning. Created a “simple loop” object, but it’s just dead.
Hi!
I’m currently doing a multiplayer VR game setup, where the remote characters are carrying a two handed (shotgun) weapon. What would be the best setup for this solution?
Is it possible to do a hybrid setup between Aim IK and VR IK? And if so - is there any documentation or tutorials about that somewhere?
Hello~! Could you please help me?
Problem : When switching camera (cinemachine), Look At IK does not work for some frames.
I changed update methods of cinemachine brain (both brain update and blend update), but it was in vain. So I tried below script after changing to manual update in cinemachine brain, but no help as well.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RootMotion.FinalIK;
using Cinemachine;
public class LookAtIKSolverUpdater : MonoBehaviour
{
public LookAtIK look;
public CinemachineBrain cinemachineBrain;
// Update is called once per frame
void Update()
{
look.solver.Update();
cinemachineBrain.ManualUpdate();
}
}
I saw similar issue in Google, but still too hard to solve for me.. Please help..!
Send that over to the remotes along with the view ID of the object he is holding.
The remote avatar then finds their local instance of that object and tells the IK to place the hands relative to that:
It would help to play an animation on the remote avatar that’s similar to a character holding a shotgun, standing 1 leg in front of the other, not parallel to shoulders. “Root Heading Offset” in VRIK’s spine settings can help with that too.
Hey,
When manually updating an IK component, you have to disable it at Start too.. Otherwise it keeps updating when it normally updates (in LateUpdate) too.
So try adding:
[ISSUE] When there is a frame drop, the Look At IK stops functioning (for about ~0.1 sec) immediately after switching the camera with a Cinemachine cut blend.
As a test, I did the manual updates to run Look At IK before cinemachine brain, but there was no improvement.
Hey,
I’m sorry, all out of ideas. What I do know for sure is when you call look.solver.Update(), it will update, so the problem must be somewhere else. If you could send me some kind of a repro, I’d take a look.
I have been using FinalIK for a long time in my project and I have no issues at all with it until I move from OculusXR to OpenXR as a Unity plugin for XR. The problem that I am having is that simply keeping the same code and moving to OpenXR I have lot of stuttering in all Meta Quest Devices when not reaching 72fps, although with OculusXR the app is rendering at 24fps and there is no stuttering at all.
At first I though that the problem was OpenXR by itself but was strange, then I reduce the issue to the minimum creating a project with just FinalIK and OpenXR and the stuttering appears. I found that if the camera was parented as a child of the Head bone of a VRIK animated avatar the stuttering appears, but when having the camera free of the avatar hierarchy the stuttering is completely fixed.
I suspect that the update transform loop of OpenXR and the one from FinalIK are maybe afecting each other in some way, as if they work separated they seem to work fine but not together. Funny thing is that this problem is not happening (or at least very mitigated) when using OculusXR as a plugin.
Any recomendations or someone that has the same problem? I based my code and systems on placing the camera at any avatar at any position in the environment so having to change everything to not place the camera as a child is not very desirable for me, but any help is appreciated!
Usually it’s because “Update Type” is set to “Update And Before Render” in the Tracked Pose Driver. That means the plugin will update the transforms of the tracked objects once more before the Camera renders, which is after the IK has already updated so you’ll likely see something like the IK hands lagging behind the controllers. Please try changing update type to “Update”.
Hello, I am not sure, so I need to ask .. I am just a hobby guy. ( and can not code ) .. I have had Final IK for years, but never used it. I see Puppet Master is on sale too. I have asked Chat , he said there
is interrogation between Final IK and Puppet Master , But I can not really find any information on how to do that.. SO , I have a couple of questions.
1: since I am hobby only and I doubt I will never release a game, should I get Puppet Master ? I tend to collect assets .. more then use them ..
2: IF there is Integration , is it like a one click integration, if you own both assets ?
From what I can tell, it seems like Final IK is the main most productive to have in most cases ?
And is the Rag doll Pupet Mater, meant for more realistic collisions ? like say where a boxing game or down hill skiing where you might need more realistic ?
3: while I do know some of Unity.. the last question might be ..would you use just Puppet Master, with Amimancer ?
Thanks os much for any light you can shin on this for me
Hey,
I want to add IK to the right hand which holds reel handle. (Left hand is on the rod itseld from animation)
And when reeling, right hand is always on the the handle and rotate based on that.
For that, I should use Limb IK ? I can’t get right look in some rotations when reeling.
I am having some troubles getting the Grounders to function how I would expect. The execution order is simply: Apply animation state to transforms → Update BipedIK with a GrounderBipedIK. Now, this works fine for things like slopes. The feet correctly orient to prevent clipping. However, it does NOT work if the animation itself has foot clipping baked directly into the animation. To be specific: no slopes involved, just the animation causing the character to descend a bit into the ground. I have debugged the code quite a bit and have concluded that all the casts / hit points are correct in the Grounder, but the vector math simply doesn’t result in the foot being placed on the ground in this case. I have tried changing which bone is considered the root, where the feet bones are located, and various other minor changes, but it is always the same. Is there some other component I should be using? I would think that, since the Grounder already does the casts necessary to solve this, it would be the component to use, but maybe this isn’t a supported feature and I have to make my own version of the Grounder?