realvirtualBehavior Lifetime Methods

When you inherit from realvirtualBehavior in your scripts, the realvirtualController automatically invokes several core lifecycle methods at key moments. This mechanism ensures a consistent flow for starting, stopping, and updating your simulation logic.


Overview of Methods

  1. AwakeAlsoDeactivated()

    • Called by realvirtualController in its own Awake() method.

    • Runs even if the realvirtualBehavior component (or its GameObject) is not active.

    • Ideal for any early setup logic that normally would run in Awake(), but needs to occur even if disabled.

  2. PreStartSim()

    • Called once realvirtualController is ready to start the simulation.

    • Use this to finalize any pre-simulation configuration, such as resetting positions or clearing caches.

  3. StartSim()

    • Immediately after PreStartSim().

    • Begin your runtime logic here—start animations, open connections, spawn objects, etc.

  4. StopSim()

    • Called when the simulation is being paused or stopped (for instance, via the pause button).

    • Ideal for halting coroutines, stopping movements, and closing any active connections.


Typical Flow

  1. realvirtualController.Awake()

    • Calls AwakeAlsoDeactivated() on every realvirtualBehavior.

  2. realvirtualController.Start()

    • Eventually calls StartSim() (after running PreStartSim()).

  3. realvirtualController.Pause() / StopSim()

    • Invokes StopSim() on every realvirtualBehavior.

Here’s a simplified timeline:

Unity Loads Scene
└──> realvirtualController: Awake()
     ├──> Calls AwakeAlsoDeactivated() on all realvirtualBehavior scripts
     └──> Additional Initialization Steps

Later, realvirtualController: Start()
├──> PreStartSim() on all realvirtualBehavior
└──> StartSim() on all realvirtualBehavior

When Pausing or Stopping:
└──> StopSim() on all realvirtualBehavior

Example Script

Below is an example of how you might extend realvirtualBehavior to respond to these calls:

using UnityEngine;

namespace realvirtual
{
    // Inherit from realvirtualBehavior
    public class MyMachine : realvirtualBehavior
    {
        // Called by the controller in Awake(), even if 'MyMachine' is not active
        public override void AwakeAlsoDeactivated()
        {
            base.AwakeAlsoDeactivated();
            Debug.Log("MyMachine: AwakeAlsoDeactivated - Basic setup done.");
        }

        // Called just before the simulation actually starts
        public override void PreStartSim()
        {
            Debug.Log("MyMachine: PreStartSim - Final checks before sim begins.");
        }

        // Called immediately after PreStartSim
        public override void StartSim()
        {
            Debug.Log("MyMachine: StartSim - Simulation logic begins.");
        }

        // Called when the simulation is being paused or stopped
        public override void StopSim()
        {
            Debug.Log("MyMachine: StopSim - Cleaning up and halting movements.");
        }
    }
}

When to Use These Methods

  • AwakeAlsoDeactivated()

    • Use for setting references or configuration that must exist regardless of the GameObject’s active state.

    • Useful for bridging dependencies or preparing data needed by other scripts.

  • PreStartSim()

    • Use for last-minute preparation just before the simulation becomes “live.”

    • E.g., ensuring internal caches or object pools are ready, resetting the environment, etc.

  • StartSim()

    • Your “go” signal for the main logic—starting animations, enabling physics-based behaviors, or beginning timers.

  • StopSim()

    • Graceful shutdown: stopping animations, saving states, cleaning up.

    • Called when the user pauses, or the simulation is otherwise halted by realvirtualController.


Debugging with DebugMode

By enabling DebugMode on the realvirtualController, you will see logs in the Unity console showing precisely when each of these methods is invoked. This is an excellent way to confirm:

  • Whether your scripts are receiving these calls in the expected order.

  • If certain scripts remain disabled and thus never receive the calls.

Last updated