示例#1
0
        protected override void OnTouched(Collider collider)
        {
            if ((!VRTK_PlayerObject.IsPlayerObject(collider.gameObject) || VRTK_PlayerObject.IsPlayerObject(collider.gameObject, VRTK_PlayerObject.ObjectTypes.Controller)) && collider.GetComponent <VRTK_InteractNearTouchCollider>() == false)
            {
                base.OnTouched(collider);

                if (!isMoving)
                {
                    Vector3 targetPosition = (!stayPressed && AtPressedPosition() ? originalLocalPosition : PressedPosition());
                    float   targetSpeed    = (!stayPressed && AtPressedPosition() ? returnSpeed : pressSpeed);
                    if (!AtTargetPosition(targetPosition))
                    {
                        positionLerpRoutine = StartCoroutine(PositionLerp(targetPosition, targetSpeed));
                    }
                }
                isTouched = true;
            }
        }
    protected virtual void CreateCollider()
    {
        generateRigidbody = false;

        if (playArea == null)
        {
            VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.SDK_OBJECT_NOT_FOUND, "PlayArea", "Boundaries SDK"));
            return;
        }

        VRTK_PlayerObject.SetPlayerObject(playArea.gameObject, VRTK_PlayerObject.ObjectTypes.CameraRig);

        GenerateRigidbody();
        GenerateBodyCollider();

        if (playArea.gameObject.layer == 0)
        {
            playArea.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
        }
        TogglePhysics(enableBodyCollisions);
    }
        protected virtual GameObject CreateHighlightModel(GameObject givenOutlineModel, string givenOutlineModelPath)
        {
            if (givenOutlineModel != null)
            {
                givenOutlineModel = (givenOutlineModel.GetComponent <Renderer>() ? givenOutlineModel : givenOutlineModel.GetComponentInChildren <Renderer>().gameObject);
            }
            else if (givenOutlineModelPath != "")
            {
                var getChildModel = transform.FindChild(givenOutlineModelPath);
                givenOutlineModel = (getChildModel ? getChildModel.gameObject : null);
            }

            GameObject copyModel = givenOutlineModel;

            if (copyModel == null)
            {
                copyModel = (GetComponent <Renderer>() ? gameObject : GetComponentInChildren <Renderer>().gameObject);
            }

            if (copyModel == null)
            {
                Debug.LogError("No Renderer has been found on the model to add highlighting to");
                return(null);
            }

            GameObject highlightModel = new GameObject(name + "_HighlightModel");

            highlightModel.transform.SetParent(copyModel.transform.parent, false);
            highlightModel.transform.localPosition = copyModel.transform.localPosition;
            highlightModel.transform.localRotation = copyModel.transform.localRotation;
            highlightModel.transform.localScale    = copyModel.transform.localScale;
            highlightModel.transform.SetParent(transform);

            foreach (var component in copyModel.GetComponents <Component>())
            {
                if (Array.IndexOf(copyComponents, component.GetType().ToString()) >= 0)
                {
                    VRTK_SharedMethods.CloneComponent(component, highlightModel);
                }
            }

            var copyMesh      = copyModel.GetComponent <MeshFilter>();
            var highlightMesh = highlightModel.GetComponent <MeshFilter>();

            if (highlightMesh)
            {
                if (enableSubmeshHighlight)
                {
                    List <CombineInstance> combine = new List <CombineInstance>();

                    for (int i = 0; i < copyMesh.mesh.subMeshCount; i++)
                    {
                        CombineInstance ci = new CombineInstance();
                        ci.mesh         = copyMesh.mesh;
                        ci.subMeshIndex = i;
                        ci.transform    = copyMesh.transform.localToWorldMatrix;
                        combine.Add(ci);
                    }

                    highlightMesh.mesh = new Mesh();
                    highlightMesh.mesh.CombineMeshes(combine.ToArray(), true, false);
                }
                else
                {
                    highlightMesh.mesh = copyMesh.mesh;
                }

                highlightModel.GetComponent <Renderer>().material = stencilOutline;
            }
            highlightModel.SetActive(false);

            VRTK_PlayerObject.SetPlayerObject(highlightModel, VRTK_PlayerObject.ObjectTypes.Highlighter);

            return(highlightModel);
        }
示例#4
0
        // Token: 0x06001D3B RID: 7483 RVA: 0x00095A7C File Offset: 0x00093C7C
        protected virtual GameObject CreateHighlightModel(GameObject givenOutlineModel, string givenOutlineModelPath)
        {
            if (givenOutlineModel != null)
            {
                givenOutlineModel = (givenOutlineModel.GetComponent <Renderer>() ? givenOutlineModel : givenOutlineModel.GetComponentInChildren <Renderer>().gameObject);
            }
            else if (givenOutlineModelPath != "")
            {
                Transform transform = base.transform.Find(givenOutlineModelPath);
                givenOutlineModel = (transform ? transform.gameObject : null);
            }
            GameObject gameObject = givenOutlineModel;

            if (gameObject == null)
            {
                gameObject = (base.GetComponent <Renderer>() ? base.gameObject : base.GetComponentInChildren <Renderer>().gameObject);
            }
            if (gameObject == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, new object[]
                {
                    "VRTK_OutlineObjectCopyHighlighter",
                    "Renderer",
                    "the same or child",
                    " to add the highlighter to"
                }));
                return(null);
            }
            GameObject gameObject2 = new GameObject(base.name + "_HighlightModel");

            gameObject2.transform.SetParent(gameObject.transform.parent, false);
            gameObject2.transform.localPosition = gameObject.transform.localPosition;
            gameObject2.transform.localRotation = gameObject.transform.localRotation;
            gameObject2.transform.localScale    = gameObject.transform.localScale;
            gameObject2.transform.SetParent(base.transform);
            foreach (Component component in gameObject.GetComponents <Component>())
            {
                if (Array.IndexOf <string>(this.copyComponents, component.GetType().ToString()) >= 0)
                {
                    VRTK_SharedMethods.CloneComponent(component, gameObject2, false);
                }
            }
            MeshFilter component2 = gameObject.GetComponent <MeshFilter>();
            MeshFilter component3 = gameObject2.GetComponent <MeshFilter>();

            if (component3)
            {
                if (this.enableSubmeshHighlight)
                {
                    List <CombineInstance> list = new List <CombineInstance>();
                    for (int j = 0; j < component2.mesh.subMeshCount; j++)
                    {
                        list.Add(new CombineInstance
                        {
                            mesh         = component2.mesh,
                            subMeshIndex = j,
                            transform    = component2.transform.localToWorldMatrix
                        });
                    }
                    component3.mesh = new Mesh();
                    component3.mesh.CombineMeshes(list.ToArray(), true, false);
                }
                else
                {
                    component3.mesh = component2.mesh;
                }
                gameObject2.GetComponent <Renderer>().material = this.stencilOutline;
            }
            gameObject2.SetActive(false);
            VRTK_PlayerObject.SetPlayerObject(gameObject2, VRTK_PlayerObject.ObjectTypes.Highlighter);
            return(gameObject2);
        }
 protected virtual bool CheckValidCollision(GameObject checkObject)
 {
     return(!VRTK_PlayerObject.IsPlayerObject(checkObject));
 }
        protected virtual Renderer CreateHighlightModel(GameObject givenOutlineModel, string givenOutlineModelPath)
        {
            if (givenOutlineModel != null)
            {
                givenOutlineModel = (givenOutlineModel.GetComponent <Renderer>() ? givenOutlineModel : givenOutlineModel.GetComponentInChildren <Renderer>().gameObject);
            }
            else if (givenOutlineModelPath != "")
            {
                Transform getChildModel = objectToAffect.transform.Find(givenOutlineModelPath);
                givenOutlineModel = (getChildModel ? getChildModel.gameObject : null);
            }

            GameObject copyModel = givenOutlineModel;

            if (copyModel == null)
            {
                Renderer copyModelRenderer = objectToAffect.GetComponentInChildren <Renderer>();
                copyModel = (copyModelRenderer != null ? copyModelRenderer.gameObject : null);
            }

            if (copyModel == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "VRTK_OutlineObjectCopyHighlighter", "Renderer", "the same or child", " to add the highlighter to"));
                return(null);
            }

            GameObject highlightModel = new GameObject(objectToAffect.name + "_HighlightModel");

            highlightModel.transform.SetParent(copyModel.transform.parent, false);
            highlightModel.transform.localPosition = copyModel.transform.localPosition;
            highlightModel.transform.localRotation = copyModel.transform.localRotation;
            highlightModel.transform.localScale    = copyModel.transform.localScale;
            highlightModel.transform.SetParent(objectToAffect.transform);

            Component[] copyModelComponents = copyModel.GetComponents <Component>();
            for (int i = 0; i < copyModelComponents.Length; i++)
            {
                Component copyModelComponent = copyModelComponents[i];
                if (Array.IndexOf(copyComponents, copyModelComponent.GetType().ToString()) >= 0)
                {
                    VRTK_SharedMethods.CloneComponent(copyModelComponent, highlightModel);
                }
            }

            MeshFilter copyMesh             = copyModel.GetComponent <MeshFilter>();
            MeshFilter highlightMesh        = highlightModel.GetComponent <MeshFilter>();
            Renderer   returnHighlightModel = highlightModel.GetComponent <Renderer>();

            if (highlightMesh != null)
            {
                if (enableSubmeshHighlight)
                {
                    HashSet <CombineInstance> combine = new HashSet <CombineInstance>();
                    for (int i = 0; i < copyMesh.mesh.subMeshCount; i++)
                    {
                        CombineInstance ci = new CombineInstance();
                        ci.mesh         = copyMesh.mesh;
                        ci.subMeshIndex = i;
                        ci.transform    = copyMesh.transform.localToWorldMatrix;
                        combine.Add(ci);
                    }

                    highlightMesh.mesh = new Mesh();
                    highlightMesh.mesh.CombineMeshes(combine.ToArray(), true, false);
                }
                else
                {
                    highlightMesh.mesh = copyMesh.mesh;
                }
                returnHighlightModel.material          = stencilOutline;
                returnHighlightModel.shadowCastingMode = copyModel.transform.GetComponent <Renderer>().shadowCastingMode;
            }
            highlightModel.SetActive(false);

            VRTK_PlayerObject.SetPlayerObject(highlightModel, VRTK_PlayerObject.ObjectTypes.Highlighter);

            return(returnHighlightModel);
        }
示例#7
0
    protected override void InitPointer()
    {
        pointerHolder = new GameObject(string.Format("[{0}]BasePointer_SimplePointer_Holder", gameObject.name));
        pointerHolder.transform.localPosition = Vector3.zero;
        VRTK_PlayerObject.SetPlayerObject(pointerHolder, VRTK_PlayerObject.ObjectTypes.Pointer);

        pointerBeam = GameObject.CreatePrimitive(PrimitiveType.Cube);
        pointerBeam.transform.name = string.Format("[{0}]BasePointer_SimplePointer_Pointer", gameObject.name);
        pointerBeam.transform.SetParent(pointerHolder.transform);
        pointerBeam.GetComponent <BoxCollider>().isTrigger = true;
        pointerBeam.AddComponent <Rigidbody>().isKinematic = true;
        pointerBeam.layer = LayerMask.NameToLayer("Ignore Raycast");

        var pointerRenderer = pointerBeam.GetComponent <MeshRenderer>();

        pointerRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
        pointerRenderer.receiveShadows    = false;
        pointerRenderer.material          = pointerMaterial;

        VRTK_PlayerObject.SetPlayerObject(pointerBeam, VRTK_PlayerObject.ObjectTypes.Pointer);

        if (customPointerCursor)
        {
            pointerTip = Instantiate(customPointerCursor);
        }
        else
        {
            pointerTip = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            pointerTip.transform.localScale = pointerTipScale;

            var pointerTipRenderer = pointerTip.GetComponent <MeshRenderer>();
            pointerTipRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
            pointerTipRenderer.receiveShadows    = false;
            pointerTipRenderer.material          = pointerMaterial;
        }

        constructHighlight = Instantiate(highlightTemplate);
        constructHighlight.transform.SetParent(pointerHolder.transform);
        if (!showConstructHighlight)
        {
            constructHighlight.SetActive(false);
        }

        pointerCursorOriginalScale = pointerTip.transform.localScale;
        pointerTip.transform.name  = string.Format("[{0}]BasePointer_SimplePointer_PointerTip", gameObject.name);
        pointerTip.transform.SetParent(pointerHolder.transform);
        pointerTip.GetComponent <Collider>().isTrigger    = true;
        pointerTip.AddComponent <Rigidbody>().isKinematic = true;
        pointerTip.layer = LayerMask.NameToLayer("Ignore Raycast");
        VRTK_PlayerObject.SetPlayerObject(pointerTip, VRTK_PlayerObject.ObjectTypes.Pointer);

        base.InitPointer();

        if (showPointerTip && objectInteractor)
        {
            objectInteractor.transform.localScale = pointerTip.transform.localScale * 1.05f;
        }

        SetPointerTransform(pointerLength, pointerThickness);
        TogglePointer(false);
    }