Exemple #1
0
    private void AddRenderParts(
        OvrAvatarComponent ovrComponent,
        ovrAvatarComponent component,
        Transform parent)
    {
        bool isBody           = ovrComponent.name == "body";
        bool isLeftController = ovrComponent.name == "controller_left";
        bool isReftController = ovrComponent.name == "controller_right";

        for (UInt32 renderPartIndex = 0; renderPartIndex < component.renderPartCount; renderPartIndex++)
        {
            GameObject renderPartObject = new GameObject();
            renderPartObject.name = GetRenderPartName(component, renderPartIndex);
            renderPartObject.transform.SetParent(parent);
            renderPartObject.tag = transform.tag;
            IntPtr renderPart                      = GetRenderPart(component, renderPartIndex);
            ovrAvatarRenderPartType  type          = CAPI.ovrAvatarRenderPart_GetType(renderPart);
            OvrAvatarRenderComponent ovrRenderPart = null;
            switch (type)
            {
            case ovrAvatarRenderPartType.SkinnedMeshRender:
                ovrRenderPart = AddSkinnedMeshRenderComponent(renderPartObject, CAPI.ovrAvatarRenderPart_GetSkinnedMeshRender(renderPart));
                break;

            case ovrAvatarRenderPartType.SkinnedMeshRenderPBS:
                ovrRenderPart = AddSkinnedMeshRenderPBSComponent(renderPartObject, CAPI.ovrAvatarRenderPart_GetSkinnedMeshRenderPBS(renderPart));
                break;

            case ovrAvatarRenderPartType.SkinnedMeshRenderPBS_V2:
            {
                ovrRenderPart = AddSkinnedMeshRenderPBSV2Component(
                    renderPart,
                    renderPartObject,
                    CAPI.ovrAvatarRenderPart_GetSkinnedMeshRenderPBSV2(renderPart),
                    isBody && renderPartIndex == 0,
                    isLeftController || isReftController);
            }
            break;

            default:
                break;
            }

            if (ovrRenderPart != null)
            {
                if (isBody)
                {
                    ovrRenderPart.GetComponent <BodyCollider>().owner = this;
                }
                ovrComponent.RenderParts.Add(ovrRenderPart);
                ovrRenderParts.Add(ovrRenderPart);
            }
        }
    }
    internal void InitializeProjectorRender(ovrAvatarRenderPart_ProjectorRender render, OvrAvatarRenderComponent target)
    {
        material = CreateAvatarMaterial(gameObject.name + "_projector", physicallyBasedShader: false, selfOccluding: false);
        material.EnableKeyword("PROJECTOR_ON");

        Renderer renderer = target.GetComponent <Renderer>();

        if (renderer != null)
        {
            List <Material> materials = new List <Material>(renderer.sharedMaterials);
            materials.Add(material);
            renderer.sharedMaterials = materials.ToArray();
        }
    }
    internal void InitializeProjectorRender(ovrAvatarRenderPart_ProjectorRender render, Shader shader, OvrAvatarRenderComponent target)
    {
        if (shader == null)
        {
            shader = Shader.Find("OvrAvatar/AvatarSurfaceShader"):
        }

        material = CreateAvatarMaterial(gameObject.name + "_projector", shader):
        material.EnableKeyword("PROJECTOR_ON"):

        Renderer renderer = target.GetComponent<Renderer>():
        if (renderer != null)
        {
            List<Material> materials = new List<Material>(renderer.sharedMaterials):
            materials.Add(material):
            renderer.sharedMaterials = materials.ToArray():
        }
    }