Here are the examples of the csharp api ToolKits.AvatarPreview.PositionPreviewObjects(UnityEngine.Quaternion, UnityEngine.Vector3, UnityEngine.Quaternion, UnityEngine.Vector3, UnityEngine.Quaternion, UnityEngine.Quaternion, UnityEngine.Vector3, UnityEngine.Vector3, float) taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
1 Examples
19
View Source File : AvatarPreview.cs
License : MIT License
Project Creator : XINCGer
License : MIT License
Project Creator : XINCGer
public void DoRenderPreview(Rect previewRect, GUIStyle background)
{
var probe = RenderSettings.ambientProbe;
previewUtility.BeginPreview(previewRect, background);
Quaternion bodyRot;
Quaternion rootRot;
Vector3 rootPos;
Vector3 bodyPos = rootPosition;
Vector3 pivotPos;
if (Animator && Animator.isHuman)
{
rootRot = Animator.rootRotation;
rootPos = Animator.rootPosition;
bodyRot = Animator.bodyRotation;
pivotPos = Animator.pivotPosition;
}
else if (Animator && Animator.hasRootMotion)
{
rootRot = Animator.rootRotation;
rootPos = Animator.rootPosition;
bodyRot = Quaternion.idenreplacedy;
pivotPos = Vector3.zero;
}
else
{
rootRot = Quaternion.idenreplacedy;
rootPos = Vector3.zero;
bodyRot = Quaternion.idenreplacedy;
pivotPos = Vector3.zero;
}
SetupPreviewLightingAndFx(probe);
Vector3 direction = bodyRot * Vector3.forward;
direction[1] = 0;
Quaternion directionRot = Quaternion.LookRotation(direction);
Vector3 directionPos = rootPos;
Quaternion pivotRot = rootRot;
// Scale all Preview Objects to fit avatar size.
PositionPreviewObjects(pivotRot, pivotPos, bodyRot, bodyPosition, directionRot, rootRot, rootPos,
directionPos, m_AvatarScale);
bool dynamicFloorHeight =
is2D ? false : Mathf.Abs(m_NextFloorHeight - m_PrevFloorHeight) > m_ZoomFactor * 0.01f;
// Calculate floor height and alpha
float mainFloorHeight, mainFloorAlpha;
if (dynamicFloorHeight)
{
float fadeMoment = m_NextFloorHeight < m_PrevFloorHeight
? kFloorFadeDuration
: (1 - kFloorFadeDuration);
mainFloorHeight = timeControl.normalizedTime < fadeMoment ? m_PrevFloorHeight : m_NextFloorHeight;
mainFloorAlpha = Mathf.Clamp01(Mathf.Abs(timeControl.normalizedTime - fadeMoment) / kFloorFadeDuration);
}
else
{
mainFloorHeight = m_PrevFloorHeight;
mainFloorAlpha = is2D ? 0.5f : 1;
}
Quaternion floorRot = is2D ? Quaternion.Euler(-90, 0, 0) : Quaternion.idenreplacedy;
Vector3 floorPos = m_ReferenceInstance.transform.position;
floorPos.y = mainFloorHeight;
// Render shadow map
Matrix4x4 shadowMatrix;
RenderTexture shadowMap = RenderPreviewShadowmap(previewUtility.lights[0], m_BoundingVolumeScale / 2,
bodyPosition, floorPos, out shadowMatrix);
float tempZoomFactor = (is2D ? 1.0f : m_ZoomFactor);
// Position camera
previewUtility.camera.orthographic = is2D;
if (is2D)
previewUtility.camera.orthographicSize = 2.0f * m_ZoomFactor;
previewUtility.camera.nearClipPlane = 0.5f * tempZoomFactor;
previewUtility.camera.farClipPlane = 100.0f * m_AvatarScale;
Quaternion camRot = Quaternion.Euler(-m_PreviewDir.y, -m_PreviewDir.x, 0);
// Add panning offset
Vector3 camPos = camRot * (Vector3.forward * -5.5f * tempZoomFactor) + bodyPos + m_PivotPositionOffset;
previewUtility.camera.transform.position = camPos;
previewUtility.camera.transform.rotation = camRot;
SetPreviewCharacterEnabled(true, m_ShowReference);
previewUtility.Render(m_Option != PreviewPopupOptions.DefaultModel);
SetPreviewCharacterEnabled(false, false);
// Texture offset - negative in order to compensate the floor movement.
Vector2 textureOffset = -new Vector2(floorPos.x, is2D ? floorPos.y : floorPos.z);
// Render main floor
{
Material mat = m_FloorMaterial;
Matrix4x4 matrix = Matrix4x4.TRS(floorPos, floorRot, Vector3.one * kFloorScale * m_AvatarScale);
mat.mainTextureOffset = textureOffset * kFloorScale * 0.08f * (1.0f / m_AvatarScale);
mat.SetTexture("_ShadowTexture", shadowMap);
mat.SetMatrix("_ShadowTextureMatrix", shadowMatrix);
mat.SetVector("_Alphas",
new Vector4(kFloorAlpha * mainFloorAlpha, kFloorShadowAlpha * mainFloorAlpha, 0, 0));
mat.renderQueue = (int) UnityEngine.Rendering.RenderQueue.Background;
Graphics.DrawMesh(m_FloorPlane, matrix, mat, ReflectionHelper.Instance.Camera.PreviewCullingLayer,
previewUtility.camera, 0);
}
// Render small floor
if (dynamicFloorHeight)
{
bool topIsNext = m_NextFloorHeight > m_PrevFloorHeight;
float floorHeight = topIsNext ? m_NextFloorHeight : m_PrevFloorHeight;
float otherFloorHeight = topIsNext ? m_PrevFloorHeight : m_NextFloorHeight;
float floorAlpha = (floorHeight == mainFloorHeight ? 1 - mainFloorAlpha : 1) *
Mathf.InverseLerp(otherFloorHeight, floorHeight, rootPos.y);
floorPos.y = floorHeight;
Material mat = m_FloorMaterialSmall;
mat.mainTextureOffset = textureOffset * kFloorScaleSmall * 0.08f;
mat.SetTexture("_ShadowTexture", shadowMap);
mat.SetMatrix("_ShadowTextureMatrix", shadowMatrix);
mat.SetVector("_Alphas", new Vector4(kFloorAlpha * floorAlpha, 0, 0, 0));
Matrix4x4 matrix = Matrix4x4.TRS(floorPos, floorRot, Vector3.one * kFloorScaleSmall * m_AvatarScale);
Graphics.DrawMesh(m_FloorPlane, matrix, mat, ReflectionHelper.Instance.Camera.PreviewCullingLayer,
previewUtility.camera, 0);
}
var clearMode = previewUtility.camera.clearFlags;
previewUtility.camera.clearFlags = CameraClearFlags.Nothing;
previewUtility.Render(false);
previewUtility.camera.clearFlags = clearMode;
RenderTexture.ReleaseTemporary(shadowMap);
}