[Depreciated] Ultimate Replay - Complete state based replay system

**Ultimate Replay is now obsolete and has been replaced with Ultimate Replay 2.0 **

3125106--236953--Icon.png

Asset Store | Documentation

Ultimate Replay 2.0 is now in development. Learn more here

Want to try before you buy? Take a look at Ultimate Replay -Trial on the asset store!

Ultimate Replay is a complete state based replay system ideally suited to kill cams or action replay applications. Using Ultimate Replay you are able to record objects during game-play and then have them replay their actions at a later time. Due to the state based nature of the system, it is possible to view replays from any angle or even fly around the scene as playback occurs.

Features

  • Quick and easy setup / integration into existing projects.
  • Simple API for replay and playback control means that very little scripting knowledge is required.
  • Uses a state based approach meaning that you can view playback from different camera angles or even fly around as playback occurs.
  • Full support for instantiation or destruction of objects during recording.
  • Fully interpolated playback means that you can record at ultra low frames rates(5fps and less) and retain smooth and accurate replays.
  • Supports playback at any speed from ultra-slow motion to 2 or 4x.
  • Supports reverse playback which can be used to produce a rewind effect.
  • Playback can be pause and resumed at a later date.
  • Full playback seek support allows you to jump to any point in a recording.
  • Full control over recording frame rate to make sure you capture the best quality recording at the smallest memory cost.
  • Recording an object is as simple as attaching a script.
  • Built-in support for transform recording.
  • Built-in support for audio recording.
  • Easily create your own component recorders to expand the capabilities.
  • Memory recording can be setup as continuous or as a rolling butter configuration.
  • ReplayVars allow script variables to be recorded simply by adding an attribute.
  • Get useful hints about the storage requirements for all replay objects.
  • Includes example GUI controls for playback manipulation.
  • Comprehensive .chm documentation of the API for quick and easy reference.
  • Fully commented C# source code included.

Ultimate Replay is available on the Asset Store!

Developer Website | Support

3125106–236686–UserGuide.pdf (1.24 MB)

1 Like

Ultimate Replay has now been submitted to the asset store and is currently pending review.

Ultimate Replay is now available on the asset store!

I have added a demo video to the first post which shows some of the features of Ultimate Replay.

That should be fairly easy to achieve. I take it you just want to rewind the player character? If so then you can just make the character a replay object and record using a rolling memory buffer to keep the last X amount of seconds of recording. You can then rewind the player whenever you need to. Animation would take a little more work but is still achievable. We are currently waiting for a trial version of Ultimate Replay to be released which should be very soon so it may be worth having a play around when it is released.

We have now released a trial version of Ultimate Replay so you can try before you buy. You can get it for free on the asset store here.

As it is a trial version it is not meant for use in finished products and has some limitations:

  • Source code is not included.
  • Some features may be disabled or have reduced functionality.
  • Will not work in standalone players (Editor only).

We will still offer full support including feature requests, bug reports and general support for this version.

Ultimate Replay 1.0.1 has been submitted to the asset store for review and should be available within a few days.

This update includes a beta version of the ReplayFileTarget which can be used to stream recordings to and from file. It has been released as a beta version as requested by a number of users and it still under development to improve a number of aspects.

At the minute, the ReplayFileTarget is not fully optimized and there is quite a bit of room for improvement in both the performance and file size aspects. We will soon be looking into chunk prediction fetching to prevent the slight buffering effect you may see during playback. We will then look into file compression along with wasteful storage so that data is not stored if nothing has changed.

During our testing we were able to record 300 objects transforms at a record rate of 48 fps for a period of 5 minutes which resulted in a file size of approximately 100mb. Of course this is an extreme record rate and not likely to be used in the real world as you can get away with record rates as low as 6fps without noticing any measurabe difference. We will however be striving to reduce that amount in the future but for now we think it is not too bad :slight_smile:

If you are using the trial version of Ultimate Replay then the ReplayFileTarget will be accessible upon import however the recording length will be limited to 5 minutes. If you are using the full version you will need to add a pre-processor define symbol to your project called ‘ULTIMATEREPLAY_EXPERIMENTAL’ in order to enable the ReplayFileTarget.

If you do find any bugs or strange behavior do please let us know so we can get them fixed. (Contact info on first post). Also feel free to let us know of any improvements in general that you think could be made.

The asset store team seem to be on form as they have already verified the update. Give it a try and let us know what you think!

hi trivial interactive people,
I have the full version of Ultimate Replay. I was eagerly waiting for the ReplayFileTarget feature. Just downloaded the new release and have following issues:

  • I opened ReplayFileTargetTest scene from Experimental folder. From the ReplayFileTarget Script on Replay Manager object I get the yellow warning “The associated script can not be loaded. Please fix any compile errors and assign a valid script.” The mentioned scripts codes are almost completely commented out. Shall I uncomment them first?

  • As you recommend above as a full version owner I should “need to add a pre-processor define symbol to your project called ‘ULTIMATEREPLAY_EXPERIMENTAL’ in order to enable the ReplayFileTarget.” Unfortunately I dont know how to do this.

  • If I solve the issues above, I would like to know where the stream record/read file is located and whether this file can be opened by a default csv/xml/json or any other kind of text/data editor?

Thank you in advance
Mert

The ReplayFileTarget is disabled by default because it is still in beta and adding a pre-processor define symbol will enable the scripts. You can do this by going to ‘Edit->Project Settings->Player’ and looking for the field called ‘Scripting Define Symbols’ under the ‘Configuration’ header. Simply enter ‘ULTIMATEREPLAY_EXPERIMENTAL’ into that field and Unity will recompile the scripts and the ReplayFileTarget should be activated.

The location of the replay file can be set in the inspector or via a script so you can have full control over that. Also it will not be possible to open the file in a text editor as it is a binary file for best recording and streaming performance.

Unfortunately after adding the ‘ULTIMATEREPLAY_EXPERIMENTAL’ to ‘Scripting Define Symbols’, I still get the warning.

I just tried it and it did not work straight away for me either. I had to change some code in the project and then switch back to Unity and then it updated the script reference. I guess that the code needs to be changed in order for Unity to recompile and reload the scripts.

I see. It would be great, if you could share the changes or make a new update available in the asset store.
Best wishes

As soon as it is out of beta it will be included in the main package without having to do anything :slight_smile:

Version 1.0.2 of UltimateReplay has been submitted to the asset store.

This version includes some minor bug fixes including:

  • Fixed a bug in ReplayFileTarget which would sometimes cause an IOException because the stream is not writable.
  • Fixed a NullReferenceException when creating a ReplayManager via script.
  • A few other small fixes.

The trial version will now display an error when trying to build a release version to say that it is not supported as opposed to failing with an ArgumentException.

Version 1.0.3 has been submitted to the asset store. This version includes:

  • ReplayAnimator component (Experimental)
  • More optimized ReplayTransform which now includes a LowPrecision setting which will store the transform with lower accuracy and half the size.
  • A few other small bug fixes.

The ReplayAnimator as you might have guessed is designed to record and replay an Animator component so you are able to record and replay animations in your game. At the minute it is in beta and will continue to be worked on and does not support all features of the Animator yet such as cross fading.

Hello, I have the full version of this plugin and I’m trying to setup a very simple recording of a ball being instantiated and then moving. I’m getting an error whenever I run ReplayManager.BeginPlayback(true);

Error:

NullReferenceException: Object reference not set to an instance of an object
UltimateReplay.Core.DefaultReplayPreparer.PrepareComponentForPlayback (UnityEngine.Component component) (at Assets/UltimateReplay/Scripts/Core/DefaultReplayPreparer.cs:69)
UltimateReplay.Core.DefaultReplayPreparer.PrepareForPlayback (UltimateReplay.ReplayObject replayObject) (at Assets/UltimateReplay/Scripts/Core/DefaultReplayPreparer.cs:40)
UltimateReplay.Core.ReplayScene.RegisterReplayObject (UltimateReplay.ReplayObject replayObject) (at Assets/UltimateReplay/Scripts/Core/ReplayScene.cs:68)
UltimateReplay.ReplayObject.Awake () (at Assets/UltimateReplay/Scripts/ReplayObject.cs:74)
UnityEngine.Object:Instantiate(GameObject, Vector3, Quaternion)
UltimateReplay.ReplayManager:ReplayInstantiate(GameObject, Vector3, Quaternion) (at Assets/UltimateReplay/Scripts/ReplayManager.cs:933)
UltimateReplay.Storage.ReplaySnapshot:RestoreReplayObjects(ReplayScene) (at Assets/UltimateReplay/Scripts/Storage/ReplaySnapshot.cs:439)
UltimateReplay.Core.ReplayScene:RestoreSnapshot(ReplaySnapshot) (at Assets/UltimateReplay/Scripts/Core/ReplayScene.cs:174)
UltimateReplay.ReplayManager:SetPlaybackFrame(Single, PlaybackOrigin) (at Assets/UltimateReplay/Scripts/ReplayManager.cs:628)
UltimateReplay.ReplayManager:BeginPlayback(Boolean, PlaybackDirection) (at Assets/UltimateReplay/Scripts/ReplayManager.cs:742)
ReplayScript:PlayButton() (at Assets/Scripts/SkillsChallengeScripts/ReplayScript.cs:91)
ReplayScript:<Start>m__5() (at Assets/Scripts/SkillsChallengeScripts/ReplayScript.cs:39)
UnityEngine.EventSystems.EventSystem:Update()

Is this a known issue? or am I messing something?

Hi, We have not seen that error before but it seems like a null component reference is getting sent to the replay system for some reason. Looking at the code where the error is generated, I cant see how a null reference exception can be thrown because all the components come from ‘gameObject.GetComponentsInChildren’. What components do you have attached to the object you want to record? A screenshot of the inspector with the object selected would be very useful if possible.


The transform is the only thing I need recorded, and its instantiation into the world. It is one of the prefab elements in the replay manager

*Edit: I was able to get it to stop the error by deleting the render trail that wasnt being used.
I’m still having issues with getting the playback to work. Doesnt seem to want to play anything.

When I run ReplayManager.BeginPlayback(true); I can see some of the objects I recorded show up in the Hierarchy, but the objects are in strange static locations with absolutely no movement.