Skip to content

Instantly share code, notes, and snippets.

@cjacobwade
Created October 12, 2017 01:20
Show Gist options
  • Save cjacobwade/2ab13f6dd406c32095e90ec596d4e156 to your computer and use it in GitHub Desktop.
Save cjacobwade/2ab13f6dd406c32095e90ec596d4e156 to your computer and use it in GitHub Desktop.
[MenuItem("Sausage Soccer/Screenshot Characters")]
static void ScreenshotCharacters()
{
SkinData[] skinData = Resources.LoadAll<SkinData>("Characters/SkinData");
Transform pivotRoot = Selection.activeGameObject.transform;
bool prevRootActive = pivotRoot.gameObject.activeSelf;
pivotRoot.gameObject.SetActive(false);
string directory = Application.dataPath + "/../CharacterUI/";
if (Directory.Exists(directory))
Directory.Delete(directory, true);
Directory.CreateDirectory(directory);
foreach (CharacterType charEnum in System.Enum.GetValues(typeof(CharacterType)))
{
if (charEnum == CharacterType.None)
continue;
PlayerPhysics playerPrefab = Resources.Load<PlayerPhysics>("Characters/Player/" + charEnum.ToString() + "Player");
PlayerPhysics spawnedPlayer = MonoBehaviour.Instantiate<PlayerPhysics>(playerPrefab);
spawnedPlayer.transform.SetParent(pivotRoot);
spawnedPlayer.transform.ResetLocals();
spawnedPlayer.transform.SetParent(null);
var skinnedMesh = spawnedPlayer.GetPlayer().GetSkinnedMeshRenderer();
for (int i = 0; i < skinData.Length; i++)
{
if (skinData[i].GetCharacter() == charEnum)
{
Material prevMaterial = skinnedMesh.sharedMaterial;
skinnedMesh.sharedMaterial = skinData[i].GetMaterial();
string assetPath = directory + skinData[i].GetSkinType().ToString() + ".png";
int superSize = 4;
int width = Screen.width * superSize;
int height = Screen.height * superSize;
RenderTexture tempRT = RenderTexture.GetTemporary(width, height, 32);
Camera.main.targetTexture = tempRT;
Camera.main.Render();
RenderTexture.active = tempRT;
Texture2D screenTex = new Texture2D(width, height, TextureFormat.ARGB32, false);
screenTex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
screenTex.Apply();
RenderTexture.active = null;
Camera.main.targetTexture = null;
tempRT.Release();
byte[] screenTexBytes = screenTex.EncodeToPNG();
if (File.Exists(assetPath))
File.Delete(assetPath);
File.WriteAllBytes(assetPath, screenTexBytes);
AssetDatabase.Refresh();
skinnedMesh.sharedMaterial = prevMaterial;
}
}
GameObject.DestroyImmediate(spawnedPlayer.gameObject);
}
pivotRoot.gameObject.SetActive(prevRootActive);
UnityEngine.Debug.Log("Finished Character Screenshots");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment