public static IMDrawTextMesh Create(IMDrawTextMeshComponent component) { GameObject gameObj = new GameObject(); #if UNITY_EDITOR gameObj.name = "IMDrawTextMesh"; gameObj.hideFlags = HideFlags.HideInHierarchy; #endif // UNITY_EDITOR Transform tf = gameObj.transform; MeshRenderer meshRenderer = gameObj.AddComponent <MeshRenderer>(); TextMesh textMesh = gameObj.AddComponent <TextMesh>(); IMDrawTextMesh obj = gameObj.AddComponent <IMDrawTextMesh>(); obj.m_Material = new Material(component.IMDrawCamera.MaterialTextMesh); meshRenderer.shadowCastingMode = ShadowCastingMode.Off; meshRenderer.receiveShadows = false; meshRenderer.sharedMaterial = obj.m_Material; meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; #if UNITY_5_4_OR_NEWER meshRenderer.lightProbeUsage = LightProbeUsage.Off; #if UNITY_5_5_OR_NEWER meshRenderer.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion; #else meshRenderer.motionVectors = false; #endif // UNITY_5_5_OR_NEWER #else meshRenderer.useLightProbes = false; #endif textMesh.font = component.m_Font; textMesh.richText = true; obj.m_RootGameObject = gameObj; obj.m_RootTransform = tf; obj.m_MeshRenderer = meshRenderer; obj.m_TextMesh = textMesh; obj.m_Option = IMDrawTextMeshOption.FACE_CAMERA | IMDrawTextMeshOption.DISTANCE_SCALE; obj.m_ListNode = new LinkedListNode <IMDrawTextMesh>(obj); obj.m_Visible = true; return(obj); }
public void Draw(IMDrawTextMeshComponent component) // Return true if this text mesh has expired { float screenZ = component.GetScreenZ(m_RootTransform); if (screenZ > 0f && screenZ < component.m_MaxDistance) { if ((m_Option & IMDrawTextMeshOption.DISTANCE_SCALE) != 0) { if (component.IsCameraPerspective) { float distanceScale = screenZ * component.m_DistanceScale; m_RootTransform.localScale = new Vector3(distanceScale * m_Scale.x, distanceScale * m_Scale.y, 1f); } else { m_RootTransform.localScale = new Vector3(m_Scale.x, m_Scale.y, 1f); } } if ((m_Option & IMDrawTextMeshOption.FACE_CAMERA) != 0) { component.FaceCamera(m_RootTransform); } if (component.m_DistanceFade) { m_TextMesh.color = screenZ > component.m_MinDistance ? new Color(m_Color.r, m_Color.g, m_Color.b, m_Color.a * component.GetAlpha(screenZ)) : m_Color; } if (!m_Visible) { m_Visible = true; m_RootGameObject.SetActive(true); } } else { Hide(); } }