Skip to content

Instantly share code, notes, and snippets.

@kalineh
Created January 9, 2019 06:36
Show Gist options
  • Save kalineh/68edeb72f0630992ebdacd6af25c8f22 to your computer and use it in GitHub Desktop.
Save kalineh/68edeb72f0630992ebdacd6af25c8f22 to your computer and use it in GitHub Desktop.
PortraitRender.cs
private void RenderPortrait()
{
if (regiment == null)
return;
// TODO: portrait to config
var first = regiment.xGetFirstNonNullUnit();
if (first == null)
return;
var rendererCenter = Vector3.zero;
var rendererLargest = 0.0f;
var renderers = first.gameObject.GetComponentsInChildren<Renderer>();
var layers = new Dictionary<Renderer, LayerMask>();
foreach (var renderer in renderers)
{
layers.Add(renderer, renderer.gameObject.layer);
renderer.gameObject.layer = LayerMask.NameToLayer("Portrait");
rendererCenter += renderer.bounds.center;
rendererLargest = renderer.bounds.size.magnitude;
}
rendererCenter /= Mathf.Max(1.0f, (float)renderers.Length);
var firstLayer = first.gameObject.layer;
first.gameObject.layer = LayerMask.NameToLayer("Portrait");
portraitCamera.gameObject.SetActive(true);
var camPos = rendererCenter + regiment.centerTransform.forward * rendererLargest * 1.2f;
var camLook = rendererCenter;
portraitCamera.transform.position = camPos;
portraitCamera.transform.LookAt(camLook);
portraitCamera.targetTexture = portraitRT;
portraitCamera.Render();
RenderTexture.active = portraitRT;
portraitTexture.ReadPixels(new Rect(0, 0, 128, 128), 0, 0, true);
portraitTexture.Apply(true, false);
RenderTexture.active = null;
portraitCamera.targetTexture = null;
portraitCamera.gameObject.SetActive(false);
portraitSprite = Sprite.Create(portraitTexture, new Rect(0, 0, 128, 128), Vector2.zero);
imagePortrait.sprite = portraitSprite;
imagePortrait.overrideSprite = portraitSprite;
first.gameObject.layer = firstLayer;
foreach (var renderer in renderers)
renderer.gameObject.layer = layers[renderer];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment