- Home /
Set the Tile Palette's 'Active Tilemap' value via code
Hello all, I am trying to change this value
via script, for a tool I am writing that manages multiple tilemaps. Using
Selection.activeObject = tilemap
does not seem to do the trick, even every frame.
I have also used This link to manage to get a working reflection based approach with
public static void SelectPalette(GameObject palette)
{
try
{
var assembly = Assembly.Load(new AssemblyName("UnityEditor"));
var windowType = assembly.GetType("UnityEditor.GridPaintPaletteWindow");
var paletteWindow = UnityEditor.EditorWindow.GetWindow(windowType, false, "Tile Palette", false);
PropertyInfo scenePaintTargetProperty = windowType.GetProperty(
"palette",
BindingFlags.Instance | BindingFlags.Public);
scenePaintTargetProperty.SetValue(paletteWindow, palette, null);
}
catch (NullReferenceException e)
{
}
}
Which works but throws two errors. One I managed to catch but the other is a
FindAllObjectsOfType: Invalid Type
error on the 'GetWindow' line.
Normally this will be one of those 'well unity throws a fit when I try to do it but I get the intended behavior I need so i'll deal with it', but I am planning to release this tool and don't want the future users to get spammed with this error.
In another forum post, a Unity employee said this value would be set public in the future, but I have not been able to find any way to access it. Does anyone know a workaround?
Your answer
Follow this Question
Related Questions
Save Components setting for reuse 1 Answer
How do you run File->Build Settings... from code? 0 Answers
How does conrolID work with ShowObjectPicker? 1 Answer
Unity UI 4.6 - Programmatically adding events - EventTrigger.delegates is null 0 Answers
How to add a component on a GameObject in Custom Inspector 1 Answer