• Which the release of FS2020 we see an explosition of activity on the forun and of course we are very happy to see this. But having all questions about FS2020 in one forum becomes a bit messy. So therefore we would like to ask you all to use the following guidelines when posting your questions:

    • Tag FS2020 specific questions with the MSFS2020 tag.
    • Questions about making 3D assets can be posted in the 3D asset design forum. Either post them in the subforum of the modelling tool you use or in the general forum if they are general.
    • Questions about aircraft design can be posted in the Aircraft design forum
    • Questions about airport design can be posted in the FS2020 airport design forum. Once airport development tools have been updated for FS2020 you can post tool speciifc questions in the subforums of those tools as well of course.
    • Questions about terrain design can be posted in the FS2020 terrain design forum.
    • Questions about SimConnect can be posted in the SimConnect forum.

    Any other question that is not specific to an aspect of development or tool can be posted in the General chat forum.

    By following these guidelines we make sure that the forums remain easy to read for everybody and also that the right people can find your post to answer it.

MSFS20 Multiple AnimGraph animations

Messages
935
Country
ca-ontario
I am working on a piece of code that has been stumping me for a while now. Basically, I have two separate animations that I am controlling with 2 separate LVARS to trigger them. Each animation has an "in" and "out" state. They are simple animations of rocket launch tower arms: they have a default "IN" state, and they have an "OUT" state where they rotate by 90 degrees on z axis. I have a WASM module that controls these by setting 2 LVARS, one for each anim, to 0 or 1, to indicate states IN and OUT.

1738651717642.png
1738651753482.png



Here is my code:
Code:
<?xml version="1.0" encoding="utf-8"?>
<ModelInfo guid="{31b46dbf-0c30-4970-bd69-78209e43a9f0}" version="1.1">
  <LODS>
    <LOD minSize="30" ModelFile="KSC_LUT_APOLLO_0.gltf"/>
    <LOD minSize="15" ModelFile="KSC_LUT_APOLLO_1.gltf"/>
    <LOD minSize="5" ModelFile="KSC_LUT_APOLLO_2.gltf"/>
    <LOD minSize="1" ModelFile="KSC_LUT_APOLLO_3.gltf"/>
  </LODS>

    <Animation name="CraneOut"         guid="4c624960-4a31-4e9e-ba6f-16f792e40133" type="Standard" />
    <Animation name="CraneIn"         guid="93b9d5d2-70cf-45ee-b1ad-10ba5964c06f" type="Standard" />
    <Animation name="SWINGARM9_OUT"     guid="d23000d4-7d10-4717-af5b-e2a1704a54bb" type="Standard" />
    <Animation name="SWINGARM9_IN"         guid="302d1215-5af7-4c37-8909-e16b2f8cb2ed" type="Standard" />

<AnimGraph>
        <DefaultState name="CraneIn"/>
        <BlendTreeState name="CraneIn">
          <Animations>
            <Animation guid="93b9d5d2-70cf-45ee-b1ad-10ba5964c06f" loop="false" speed="2" />
          </Animations>
        </BlendTreeState>   
        <BlendTreeState name="CraneOut">
          <Animations>
            <Animation guid="4c624960-4a31-4e9e-ba6f-16f792e40133" loop="false" speed="2" />
          </Animations>
        </BlendTreeState>
        <Transition start="CraneIn" end ="CraneOut">
          <Condition>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, number) 1.0 == </Condition>
        </Transition>
        <Transition start="CraneOut" end ="CraneIn">
          <Condition>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, number) 0.0 == </Condition>
        </Transition>

        <DefaultState name="SWINGARM9_IN"/>
        <BlendTreeState name="SWINGARM9_IN">
          <Animations>
            <Animation guid="302d1215-5af7-4c37-8909-e16b2f8cb2ed" loop="false" speed="0.001" />
          </Animations>
        </BlendTreeState>   
        <BlendTreeState name="SWINGARM9_OUT">
          <Animations>
            <Animation guid="d23000d4-7d10-4717-af5b-e2a1704a54bb" loop="false" speed="0.001" />
          </Animations>
        </BlendTreeState>
        <Transition start="SWINGARM9_IN" end ="SWINGARM9_OUT">
          <Condition>(L:LVAR_TB_KSC_APOLLO_LUT_SWINGARM9_IN_OUT, number) 1.0 == </Condition>
        </Transition>
        <Transition start="SWINGARM9_OUT" end ="SWINGARM9_IN">
          <Condition>(L:LVAR_TB_KSC_APOLLO_LUT_SWINGARM9_IN_OUT, number) 0.0 == </Condition>
        </Transition>
</AnimGraph>

</ModelInfo>

The problem is, as it is structured above, only the top part (CraneIn/CraneOut) works. The Bottom Part (SWINGARM9_IN/SWINGARM9_OUT) works, but only if I comment out the top part (CraneIn/CraneOut). I tried placing them in separate <AnimGraph> blocks, but that didn't work either.

So, the in/out animations work when they are alone in the <AnimGraph> block, but if I want to have the multiple objects/parts with in/out animations, only the top most part works. Since the animations work perfectly when they are alone in the AnimGraph block, obviously there is a structure problem here.

Any Idea what is wrong with the above structure or how I can get this to work?
 
Last edited:
Lvar states trigger animations, so I'm having trouble understanding why you have a reverse direction GUID. When LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT is 0, the animation is also at 0. When LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT is 1, the animation is at full range.
Anyway I'm probably missing something, but to do what you want to do, one way would be to nest helper nodes. It is how I animated a ruddervator. One node rotates both mesh and inner node, the inner node rotates only the mesh. Outer is the elevator, inner is the rudder and in your case, the alternate direction reversals. This imo will leave all the animation returns unset in your code, LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT_OUTER swings the crane out, but it never returns to 0 in the code, because LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT_INNER swings it back in, I believe using single reversing animations is optimal.
 
Lvar states trigger animations, so I'm having trouble understanding why you have a reverse direction GUID. When LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT is 0, the animation is also at 0. When LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT is 1, the animation is at full range.
Anyway I'm probably missing something, but to do what you want to do, one way would be to nest helper nodes. It is how I animated a ruddervator. One node rotates both mesh and inner node, the inner node rotates only the mesh. Outer is the elevator, inner is the rudder and in your case, the alternate direction reversals. This imo will leave all the animation returns unset in your code, LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT_OUTER swings the crane out, but it never returns to 0 in the code, because LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT_INNER swings it back in, I believe using single reversing animations is optimal.

Hi Rick,

I based this on a similar, very simple cases given here and here. All I need are these simple animations to play on demand, conditionally:
  • When LVAR condition is true, play animation forward.
  • When LVAR condition is false, play animation backward.
  • Be able to do this on multiple parts of the object with separate animations and conditions.
That's it. That's all I need 🤷‍♂️

Is there a better, simpler way to do it? If there is a batter way to just play an animation forward when condition is true, and backward when condition is false, I'll gladly switch to it. I know the above code is for transitioning from one anim to another, but other than the code above, I haven't seen even a single shred of code that conditionally triggers an animation, not in the SDK, nor here on this forum.

I've seen code samples with people agonizing over a simple task of opening hangar doors on demand. FSX/P3D had this implemented within one simple call. Why does this have to be so difficult?
 
Ok - let's rewind a bit - I need to do something simple, and I am making it overly complicated.

First: I have this animation below (without any other code), and when I have the typeParam="AutoPlay" in it:

Code:
    <Animation name="CraneOut"         guid="4c624960-4a31-4e9e-ba6f-16f792e40133" type="Standard" typeParam="AutoPlay" />

The animation works as it should, obviously, animating in the loop.

Next, taking the typeParam="AutoPlay" out, I have the following code inside <Behaviors> block:
Code:
    <Include ModelBehaviorFile="Asobo\Generic\Animations.xml"/>

    <Component ID="Colby Crane Out In" >
        <UseTemplate Name="ASOBO_GT_Anim">
            <ANIM_NAME>CraneOut</ANIM_NAME>
            <ANIM_CODE>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, bool)</ANIM_CODE>
            <ANIM_LENGTH>100</ANIM_LENGTH>
        </UseTemplate>
    </Component>

And this results in no movement at all. I tried all kinds of permutations in the <ANIM_CODE> block, but nothing results in any movement. L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT is set from 0.0 to 1.0.

AND, to test if L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT is coming through correctly, I have inserted this code is well:
Code:
    <Include ModelBehaviorFile="Asobo\Generic\Visibility.xml"/>

<Component ID="crane_visible" Node="Housing">
    <UseTemplate Name="ASOBO_GT_Visibility">
        <VISIBILITY_CODE>
            (L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT)
        </VISIBILITY_CODE>         
    </UseTemplate>
</Component>

And this works perfectly, as the "Housing" component is visible/invisible as I set the L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT to 0.0 or 1.0.

So, the animation is valid, and the LVAR is valid. Why isn't anything moving? What am I doing wrong in the animation block?
 
Try this:
Code:
    <Component ID="Colby Crane Out In" >

        <UseTemplate Name="ASOBO_GT_Anim_Code">

            <ANIM_NAME>CraneOut</ANIM_NAME>

            <ANIM_CODE>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, bool)</ANIM_CODE>

            <ANIM_LENGTH>100</ANIM_LENGTH>

        </UseTemplate>

    </Component>
 
ChatGPT tries to push the ASOBO_GT_Anim template on me all the time and whenever notice and change it, it works. Try this:
Code:
    <Component ID="Colby Crane Out In" >

        <UseTemplate Name="ASOBO_GT_Anim_Code">

            <ANIM_NAME>CraneOut</ANIM_NAME>

            <ANIM_CODE>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, bool)</ANIM_CODE>

            <ANIM_LENGTH>100</ANIM_LENGTH>

        </UseTemplate>

    </Component>
 
Thanks, Rick.

No joy. Nothing is moving. The "Housing" part is being hidden/unhidden, so the LVAR is working. Here is my code again, all of it:


Code:
<?xml version="1.0" encoding="utf-8"?>
<ModelInfo guid="{31b46dbf-0c30-4970-bd69-78209e43a9f0}" version="1.1">
  <LODS>
    <LOD minSize="30" ModelFile="KSC_LUT_APOLLO_0.gltf"/>
    <LOD minSize="15" ModelFile="KSC_LUT_APOLLO_1.gltf"/>
    <LOD minSize="5" ModelFile="KSC_LUT_APOLLO_2.gltf"/>
    <LOD minSize="1" ModelFile="KSC_LUT_APOLLO_3.gltf"/>
  </LODS>

    <Animation name="CraneOut"         guid="4c624960-4a31-4e9e-ba6f-16f792e40133" type="Standard" />
    <Animation name="CraneIn"         guid="93b9d5d2-70cf-45ee-b1ad-10ba5964c06f" type="Standard" />
    <Animation name="SWINGARM9_OUT"     guid="d23000d4-7d10-4717-af5b-e2a1704a54bb" type="Standard" />
    <Animation name="SWINGARM9_IN"         guid="302d1215-5af7-4c37-8909-e16b2f8cb2ed" type="Standard" />

<Behaviors>
    <Include ModelBehaviorFile="Asobo\Generic\Visibility.xml"/>
    <Include ModelBehaviorFile="Asobo\Generic\Animations.xml"/>

    <Component ID="Colby Crane Out In" >
        <UseTemplate Name="ASOBO_GT_Anim_Code">
            <ANIM_NAME>CraneOut</ANIM_NAME>
            <ANIM_CODE>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, bool)</ANIM_CODE>
            <ANIM_LENGTH>100</ANIM_LENGTH>
        </UseTemplate>
    </Component>

<Component ID="crane_visible" Node="Housing">
    <UseTemplate Name="ASOBO_GT_Visibility">
        <VISIBILITY_CODE>
            (L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT)
        </VISIBILITY_CODE>          
    </UseTemplate>
</Component>
</Behaviors>
</ModelInfo>

I really am stumped. It shouldn't be that hard. BTW, the animation is running from keyframe 0 to keyframe 49.

Also, am I including the right Animation template?
Code:
<Include ModelBehaviorFile="Asobo\Generic\Animations.xml"/>
 
The Behaviors file you should link should be the one that contains the templates you call. However ASOBO_GT_Anim_Code works with only Asobo\Exterior and possibly not even that because the include appears to be invalid, it is <Include Path="Asobo\Exterior.xml"/> and it should be <Include ModelBehaviorFile="Asobo\Exterior.xml"/>, so I don't think any include is actually required.

I think might be what you compile it as, this is a SimObject/Aircraft and it works exactly as expected. The wings deploy and the engine is illuminated when ENG COMBUSTION is 1 and everything is undeployed and dark when ENG COMBUSTION is 0.

XML:
<?xml version="1.0" encoding="utf-8"?>
<ModelInfo version="1.1" guid="{3a9f5aa7-6d46-44ca-9878-9d6c2f1d942a}">

    <LODS>
        <LOD minSize="0" ModelFile="Shadow.gltf"/>
    </LODS>

    <Animation name="Wings" guid="3a9f5aa7-6d46-44ca-9878-9d6c2f1d942a" length="200" type="Standard"/>

    <Behaviors>
    
        <Include ModelBehaviorFile="Asobo\Generic\FX.xml"/>
        <Include Path="Asobo\Exterior.xml"/>
        
        <Component ID="Wings" Node="Hips">
            <UseTemplate Name="ASOBO_GT_Anim_Code">
                <NODE_ID>Hips</NODE_ID>
                <ANIM_NAME>Wings</ANIM_NAME>
                <ANIM_CODE>(A:GENERAL ENG COMBUSTION:1, Bool)</ANIM_CODE>
                <ANIM_LENGTH>1</ANIM_LENGTH>
            </UseTemplate>
        </Component>

        <Component ID="Flame_Visibility" Node="Flame">
            <UseTemplate Name="ASOBO_GT_Visibility_Code">
                <VISIBILITY_CODE>
                    (A:GENERAL ENG COMBUSTION:1, Bool)
                </VISIBILITY_CODE>
            </UseTemplate>
        </Component>
        
        <Component ID="Fire">
            <UseTemplate name="ASOBO_GT_Anim_Code">
                <PART_ID>1</PART_ID>
                <ANIM_NAME>Flame</ANIM_NAME>
                <ANIM_CODE>(A:GENERAL ENG COMBUSTION:1, Bool)</ANIM_CODE>            
                <ANIM_LENGTH>100</ANIM_LENGTH>
            </UseTemplate>
        </Component>        

        <Component ID="Exhaust" Node="Exhaust">
          <UseTemplate Name="ASOBO_GT_FX">
            <FX_CODE>
                    (A:GENERAL ENG COMBUSTION:1, Bool)
            </FX_CODE>
            <FX_GUID>{9354E612-1B80-4EDE-BA73-A3146E0322B3}</FX_GUID>
          </UseTemplate>
        </Component>        
        
    </Behaviors>

</ModelInfo>

Here you can see the animation run just after spawning.

 
Yeah - I don't get it. My launch tower is a "StaticObject", but again, the AnimGraph approach worked. I checked, I DO have to have the Visibility.xml path to have the visibility code working . In my original post with AnimGraph, animation works (except I can only have one part anim), although it is a different approach. This should be far simpler, and yet, nothing is moving. I am really at a loss with this one.

Added all these, didn't help:
Code:
    <Include ModelBehaviorFile="Asobo\Generic\Visibility.xml"/>
    <Include ModelBehaviorFile="Asobo\Generic\Animations.xml"/>
    <Include ModelBehaviorFile="Asobo\Exterior.xml"/>
    <Include Path="Asobo\Exterior.xml"/>

That's a nice setup BTW! - I will have the rocket engines working on my rockets soon too! I am trying to figure out how to use Afterburner FX thing... but if not, it will be some fresnel/emissive trick.
 
Last edited:
If this is an animated static object, then many of the variables don't work as expected. LVars are usually pointed to an aircraft, defaulting to the users aircraft. Also, each type of SimObject has limitations as to what can be referenced. You might try to compile it as an aircraft type SimObject. That gives you a greater range of variables to work with.
 
If this is an animated static object, then many of the variables don't work as expected. LVars are usually pointed to an aircraft, defaulting to the users aircraft. Also, each type of SimObject has limitations as to what can be referenced. You might try to compile it as an aircraft type SimObject. That gives you a greater range of variables to work with.
Thanks! But, I am using the same LVAR for visibility code and that part works no problem! And, AnimGraph code worked no problem! (See my top post). So, both the LVAR and the animation are valid.
 
Last edited:
Thanks! But, I am using the same LVAR for visibility code and that part works no problem! And, AnimGraph code worked no problem! (See my top post). So, both the LVAR and the animation are valid.
It is not a matter whether the Lvar is valid and granted an Lvar is simply a state, like SimVars. Just because your static object responds to visibility triggered Lvars, does not equate to the same response for animations. Clearly we know they do not use the same templates. Additionally, it was you yourself that plotted that table of the various objects in relation to how they responded to SimConnect modules. The same could be extended to component .xml and how objects respond to it.
It is my understanding that AnimGraph is largely for AnimAls, they go from walking to pacing etc and not that we shouldn't use it, if it works ride it, but I interpret the fact that it works for the static object to be a fluke and not necessarily an intended feature. What kind of static object, Landmark?
 
It is not a matter whether the Lvar is valid and granted an Lvar is simply a state, like SimVars. Just because your static object responds to visibility triggered Lvars, does not equate to the same response for animations. Clearly we know they do not use the same templates. Additionally, it was you yourself that plotted that table of the various objects in relation to how they responded to SimConnect modules. The same could be extended to component .xml and how objects respond to it.
It is my understanding that AnimGraph is largely for AnimAls, they go from walking to pacing etc and not that we shouldn't use it, if it works ride it, but I interpret the fact that it works for the static object to be a fluke and not necessarily an intended feature. What kind of static object, Landmark?
I see what you are saying. My launch tower is a "StaticObject" ("Landmark" is not a valid SimObject class, but more of a folder group classification for SimObjects. Also, a "Landmark" is one type of a POI "pin" object, which are also inserted as scenery objects.)
Code:
[VERSION]
Major=1
Minor=0

[fltsim.0]
title=KSC LUT APOLLO
model=
texture=

[General]
category=StaticObject
DistanceToNotAnimate=2000

It is my understanding that AnimGraph is largely for AnimAls, they go from walking to pacing etc and not that we shouldn't use it, if it works ride it, but I interpret the fact that it works for the static object to be a fluke and not necessarily an intended feature.
No, that's not the case. A "Windsock" sample in the SDK is a StaticObject, and AnimGraph is precisely what makes it work, so I would say it is not a fluke that it works, if they included it as one of the samples.

Ok, I compiled the launch tower as GroundVehicle: No change (and it did compile as a GroundVehicle because I saw it settle vertically to it's default contact points)

I also compiled it as an "Animal": No change.
 
No, that's not the case. A "Windsock" sample in the SDK is a StaticObject, and AnimGraph is precisely what makes it work, so I would say it is not a fluke that it works, if they included it as one of the samples.
I should think you'd want to swap your model into the windsock sample project and get right to the bottom of it, is why I asked. I get very different results between the SimObject sub groups.
 
I should think you'd want to swap your model into the windsock sample project and get right to the bottom of it, is why I asked. I get very different results between the SimObject sub groups.
Yes, but Windsock sample is using AnimGraph method, which I started with but abandoned. :) I mentioned it only because you said AnimGraph may be a fluke with "StaticObject" types.

Ok, I made a bit of progress. I looked at your code again, and included a node label (in 2 places). I also extended my anim from 49 frames to 100, and I scaled up my LVAR from 0.0-1.0 range to 0.0-100.0 range:
Code:
    <Animation name="CraneOut"         guid="4c624960-4a31-4e9e-ba6f-16f792e40133" length="100" type="Standard" />

<Behaviors>
    <Include ModelBehaviorFile="Asobo\Generic\Visibility.xml"/>
    <Include ModelBehaviorFile="Asobo\Generic\Animations.xml"/>
    <Include ModelBehaviorFile="Asobo\Exterior.xml"/>
    <Include Path="Asobo\Exterior.xml"/>

    <Component ID="ColbyCrane_IN_OUT" Node="ColbyCrane_Top_Level">
        <UseTemplate Name="ASOBO_GT_Anim_Code">
        <NODE_ID>ColbyCrane_Top_Level</NODE_ID>
            <ANIM_NAME>CraneOut</ANIM_NAME>
            <ANIM_CODE>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, Number) 100 *</ANIM_CODE>
            <ANIM_LENGTH>100</ANIM_LENGTH>
        </UseTemplate>
    </Component>
</Behaviors>

What I am getting now, is an instantaneous 90 degree rotation, without animation. Obviously, I have a mismatch somewhere in the LVAR to frames correlation, somewhere in these lines:

Code:
<Animation name="CraneOut"         guid="4c624960-4a31-4e9e-ba6f-16f792e40133" length="100" type="Standard" />
ANIM_CODE>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, Number) 100 *</ANIM_CODE>
<ANIM_LENGTH>100</ANIM_LENGTH>
 
<Component ID="ColbyCrane_IN_OUT" Node="ColbyCrane_Top_Level">
<UseTemplate Name="ASOBO_GT_Anim_Code">
<NODE_ID>ColbyCrane_Top_Level</NODE_ID>
<ANIM_NAME>CraneOut</ANIM_NAME>
<ANIM_CODE>(L:LVAR_TB_KSC_APOLLO_LUT_CRANE_IN_OUT, Number) 100 *</ANIM_CODE>
<ANIM_LENGTH>100</ANIM_LENGTH>
<ANIM_LAG>25</ANIM_LAG>
</UseTemplate>
</Component>


What I am getting now, is an instantaneous 90 degree rotation, without animation. Obviously, I have a mismatch somewhere in the LVAR to frames correlation, somewhere in these lines:
Anim_lag is measured as a percentage of the whole. All component animation modifiers work on a percentage basis and this is irregardless of the actual model frame numbers btw. So a two frame switch animation can be "slowed down" and a value of 25 represents 1/4 speed.
 
Anim_lag is measured as a percentage of the whole. All component animation modifiers work on a percentage basis and this is irregardless of the actual model frame numbers btw. So a two frame switch animation can be "slowed down" and a value of 25 represents 1/4 speed.
THAT DID IT!!! 😍 THANKS!!

Ok - but - why did that work? Why don't you have the same parameter in your code?
 
I don't care that they snap out, it is a 50 frame animation, but this model is really only a proof of concept. I'm shooting for a simulated loyal wingman and so far he works great when I'm in a helicopter but he can't quite keep up when I'm in a jet for whatever reason, still cool watching him zip around in the vfr window, he'll follow when I teleport! I've managed to target AI aircraft as well, but I can't yet get the missile to steer toward it, despite the fact the wingman will steer to me when I call it, baby steps. Once I get the missile to converge on the target, then I'll see about removing it from flight, shouldn't be too hard.
 
but he can't quite keep up when I'm in a jet for whatever reason
That reason, my friend, is object's speed. I know what you are trying to do, and I don't mean to discourage you, but fast moving objects will be a showstopper, the way SimConnect is structured right now...That's why attaching SimObjects to fast moving aircraft is still a holy grail with devs. Did you notice that no one yet developed TacPack style addon for a true, independent physics based weapons add on? If you want, I can give you a simple, plain English rundown of what the problem is, and perhaps you can think about it and come up with something I haven't thought of.

I am doing something similar with my Crawler/Platform/Tower/Rocket "assembly". Crawler is a leader, and Platform/Tower/Rocket are followers. But, it works only if they move slowly, and even then, you can see little lags and gaps between the objects.
 
That reason, my friend, is object's speed.
I'm pretty sure it's specific to my wingman. I know this because the missiles he fires are set to 1000 mph and you can watch them go all the way to the range limit of the vfr window. I thought I'd linked the Ukraine video, that missile is also the Storm Shadow and it is set to go at 3x user aircraft speed, which you can also track in the vfr window. I am pretty sure the thing that slows down the wingman are the constant updates, I changed the timing to once per second and that helped a lot, I'd like to try 2 seconds, but it seems like a lot can happen in 2 seconds at 400 kts. Part of the problem is that I'm still working with CGPT, I've started brushing up on C++ so I can more effectively tune these modules, but my learning curve is pretty jagged these days.

The goal is to have it appear on a trailer with jatos and a launch ramp climb up and form on your wing, fire three missiles at you command and then rtb deploying parachutes and airbags to land. One big sticking point is that the ramp start would have very different contact points from the airbag landing and I already have those things modeled to deform under weight, sad face.

221215-F-F3962-0506.jpg
230130-F-F3962-0509.jpg
230130-F-F3962-0508.jpg



I am doing something similar with my Crawler/Platform/Tower/Rocket "assembly". Crawler is a leader, and Platform/Tower/Rocket are followers. But, it works only if they move slowly, and even then, you can see little lags and gaps between the objects.

Ok so I'd like to do an X-15, but it absolutely must drop from an Edwards B-52. I know how I'd do it and I'd use the same system for your rig. The B-52 is simply a node of the X-15 controlled by a visibility component that is tied to the drop event. At that moment, the attached mesh vanishes and a B-52 flying level spawns from that spot.

So the same with your rig. It is all part of the final spacecraft, layered in visibility nodes. As each stage, launch tower whatever is left behind, the mesh vanishes and is instantly replaced by the simobject version that has its own agenda. Your stage separator rings can fall away with the gentle tumble you animated them to have, with little blinking maneuvering jet effects. That's how I'd do it or at least try.
 
Back
Top