Hdg Remote Debug is a live update and debug tool for Unity 3D that lets you inspect the GameObjects, components, and serialized fields in your game after it has been deployed onto a device. It is an alternative to the Unity Remote that actually works! You can tweak fields on the live build while sitting in the Unity editor, and it’s great for quickly iterating on settings like UI layout and touch controls.
This tool is a great time saver when you want to tweak things on the device without having to go through the rebuild and redeploy cycle (which is particularly slow on iOS and HoloLens). It’s also a great help when debugging device-specific bugs.
Features
Simple to use.
Runs on most platforms that Unity supports (tested extensively in the Mac and Windows editor, and with Android, iPhone, and Windows 10 (UWP) devices).
Works with micro mscorlib!
Iterate on touch controls on the device.
Works with Unity free or Pro.
Workflow
Drop the provided prefab into your scene.
Build and deploy to your device.
Bring up the Hdg Remote Debug window by clicking on “Window > Hdg Remote Debug”.
Click the “Active Player” button and your device should appear in the list.
Can Hdg Remote be used for debugging a client EXE in a multiplayer game running on one PC?
Example: I have a multiplayer game and am running the host for player#1 in the Unity editor.
The client is running on a compiled version of the EXE for player #2.
Can Hdg Remote connect to the client EXE so I can see what’s going on in the client in real-time?
Yes you can do that! You can place the Hdg Remote Debug server component in your game, build out to exe, then run. Then in the Unity editor, disable the Hdg Remote Debug server component before you run it in the editor.
You have to disable the component in the editor because you can’t have two debug server components running on the one machine because they would both try to listen on the same TCP port which is not allowed. I want to fix this by assigning a randomised port but I’m not sure how high priority this is because typically you wouldn’t be running multiple copies on one machine. But it sounds like your type of use case would benefit (e.g. if you ran more than two clients on the one machine).
Hope that makes sense, and thanks for your interest!
If Unity can show it in its own inspector, then it should also show up in Hdg Remote Debug. That means that as long as your class is serialisable it should work. Actually I think there might be a bug where the List type is currently not working, but arrays work. List was working at one stage, so I need to investigate that; I think I broke it somewhere along the line!
Sam,
The lists I would want to display require a custom inspector in Unity.
Based on your response, Hdg Remote would not work with lists that require a custom inspector, correct?
That’s right, unfortunately we can’t show custom inspectors. The class would just appear as a set of fields, just like it would in the Unity inspector if there were no custom inspector.
Sam,
It seems like a great product, but I typically spend the majority of my debugging time on edge cases with lists of classes.
If you ever add the ability to display a list of classes, I’ll buy it in a hot dang minute!
– Paul
This tool will be very useful for profiling: rebuilding a large game to test a small modification is a huge waste of time. May I suggest that you add the following features in a future iteration of your tool?
Multiple Selection: When profiling, one may want to disable multiple GameObjects or components at once. This would also be useful to modify settings on multiple components.
DontDestroyOnLoad: Although this has been (unofficially?) deprecated, this is still used a lot. Generally, this is used on managers (that have crucial settings that we might want to modify).* These objects should be inspectable.
Multi Scene: GameObjects in other loaded scenes (ex: additively loaded scenes) should be inspectable too.
*When DontDestroyOnLoad is applied on a GameObject, it is moved to a special scene that cannot be queried directly through the SceneManager. A workaround to get the scene, consists to move a given GameObject (ex: kind of singleton) to this scene by calling DontDestroyOnLoad on it. Then, you can use the scene property of the GameObject to get the DontDestroyOnLoad scene. From there, you can query the other GameObjects of that scene with GetRootGameObjects and loop through their children.
Thanks for the suggestions! I like the DontDestroyOnLoad idea, that’s a nice workaround. I’m working on some bug fixes at the moment to do with lists of user-defined structs. I’m hoping to release an update late this week, then I can look into some enhancements!
Hey that’s cool, I didn’t know the Unity profiler supported a connection over ADB. Looking at the Unity profiler docs it looks like it’s just some adb command-line settings to forward a network connection over the ADB connection so it might not require me to make any code changes. I’ll look into it. Thanks!
I did some ADB forwarding but it didn’t seem to detect my device, let me know if you have a successful solution, really love to have solid low latency wired connection