Exemplo n.º 1
0
        public void StartGarageSetting()
        {
            VivePoseTracker tracker = LiftMachine.GetComponent <VivePoseTracker>();

            if (tracker.isPoseValid)
            {
                LiftMachine.position = tracker.transform.position;
            }
            //else if (recontructFloor != null && recontructFloor.transform.childCount > 0)
            //    LiftMachinePosition = recontructFloor.transform.GetChild(0).position;
            else
            {
                LiftMachine.position = Vector3.zero;
            }

            if (ARRender.ADVANCE_RENDER)
            {
                //We only set PaintObject to render shadow to save shadow render performance
                MyHelpLayer.ReplaceSceneLayer(LiftMachine, LayerMask.NameToLayer("Default"), ARRender.UnityRenderOnTopLayer);
                MyHelpLayer.ReplaceSceneLayer(LiftMachine, LayerMask.NameToLayer("PaintObject"), ARRender.UnityRenderOnTopLayer);
            }
            else
            {
                MyHelpLayer.SetSceneLayer(LiftMachine, ARRender.UnityRenderOnTopLayer);
            }

            FixedWorldPosCover[] fwpcs = LiftMachine.GetComponentsInChildren <FixedWorldPosCover>();
            foreach (FixedWorldPosCover fwpc in fwpcs)
            {
                fwpc.UpdateWorldMatrix();
                //    fwpc.GetComponent<Renderer>().sharedMaterial.SetTexture("_LeftEyeTexture", dualCameraLRT.GetRT());
                //    fwpc.GetComponent<Renderer>().sharedMaterial.SetTexture("_RightEyeTexture", dualCameraRRT.GetRT());
                fwpc.GetComponent <Renderer>().sharedMaterial.SetFloat("_Transparent", 1);
            }
            Renderer[] renders = LiftMachine.GetComponentsInChildren <Renderer>(true);
            foreach (Renderer r in renders)
            {
                r.enabled = true;
            }
        }
Exemplo n.º 2
0
 public void RecoverFishToDefaultLayer()
 {
     MyHelpLayer.ReplaceSceneLayer(fishAI.transform, ARRender.UnityRenderOnTopNoShadowLayer, LayerMask.NameToLayer("Default"));
     MyHelpLayer.ReplaceSceneLayer(fishAI.transform, ARRender.UnityRenderOnTopLayer, LayerMask.NameToLayer("PaintObject"));
     ARRender.Instance.RecoverUnityrenderWithDepthLayer();
 }
Exemplo n.º 3
0
 public void SetFishToRenderTop()
 {
     MyHelpLayer.ReplaceSceneLayer(fishAI.transform, LayerMask.NameToLayer("Default"), ARRender.UnityRenderOnTopNoShadowLayer);
     MyHelpLayer.ReplaceSceneLayer(fishAI.transform, LayerMask.NameToLayer("PaintObject"), ARRender.UnityRenderOnTopLayer);
     ARRender.Instance.SetUnityrenderWithDepthToTopLayer();
 }
Exemplo n.º 4
0
        public void StartPaintBallWallGame()
        {
            //if (PaintBallWallGameSizePlaneOrigScale == null)
            //    PaintBallWallGameSizePlaneOrigScale = PaintBallWallGameSizePlane.lossyScale.z;
            float origW = measureSizeQuad.transform.lossyScale.x; //2.8f;// original W, H is 2.8 , 1.6

            origW = origW * 3f / 7f;                              // 3x2 block size of 7x4 size
            Vector3 newNearPoint, newFarPoint;

            //PaintBallWallGameObj.SetActive(true);

            Debug.LogWarning("[StartPaintBallWallGame]");

            float     localScale     = 1;
            Transform fishHidingWall = fishAI.fishHidingWall;

            if (fishHidingWall == null)
            {
                fishHidingWall = ReconstructManager.Instance.selectedWallRoot.transform.GetChild(0);
            }

            //float areaQuadMax, areaQuadMin;
            //Mesh quadMesh = fishHidingWall.GetChild(0).GetComponent<MeshFilter>().sharedMesh;
            Mesh      quadMesh      = fishHidingWall.GetComponent <MeshFilter>().sharedMesh;
            Transform quadTransform = fishHidingWall;//.GetChild(0);
            float     destW         = 0;

            if (fishHidingWall != null)
            {
                PaintBallWallGameLocation.position = fishHidingWall.position;
                //PaintBallWallGameLocation.rotation = fishHidingWall.rotation;

                PaintBallWallGameLocation.LookAt(
                    fishHidingWall.position + GetFaceToPlayerNormal(fishHidingWall.position, fishHidingWall.forward),
                    Vector3.up);

                //Fit quad align with height
                //Because the game quad is W:(10m*0.7), H:(10m*0.4), so fit the height with quadMesh's height

                /*areaQuadMax = -9999;
                 * areaQuadMin = 9999f;
                 * foreach (Vector3 vec in quadMesh.vertices)
                 * {
                 *  //Z is the width
                 *  Vector3 vecWorld = fishHidingWall.TransformPoint(vec);
                 *  if (vecWorld.z > areaQuadMax)
                 *      areaQuadMax = vecWorld.z;
                 *  if (vecWorld.z < areaQuadMin)
                 *      areaQuadMin = vecWorld.z;
                 * }*/
                List <Vector3> widthList = new List <Vector3>();
                for (int a = 0; a < quadMesh.vertices.Length; a++)// ( in quadMesh.vertices)
                {
                    Vector3 vec = quadMesh.vertices[a];
                    vec   = quadTransform.TransformPoint(vec);
                    vec.y = 0;
                    widthList.Add(vec);
                }

                MyHelpMesh.GetLongestLineFromVertices(widthList, null, out newNearPoint, out newFarPoint);

                destW      = (newNearPoint - newFarPoint).magnitude;
                localScale = destW / origW; //Z is the width

                //Furthermore consider the area ratio
                float areaQuad   = ReconstructManager.GetMeshArea(quadMesh);
                float areaConvex = ReconstructManager.GetMeshArea(fishHidingWall.GetComponent <MeshFilter>().sharedMesh);
                localScale *= areaConvex / areaQuad;
            }
            trackerOfMRWall.position = PaintBallWallGameLocation.position + PaintBallWallGameLocation.forward * 0.01f;
            Vector3 lookForward = PaintBallWallGameLocation.forward;

            lookForward.y = 0;
            trackerOfMRWall.LookAt(PaintBallWallGameLocation.position + lookForward.normalized, Vector3.up);

            localScale = Mathf.Clamp(localScale * 0.8f, 0.1f, 1.2f);//limit the max size
            trackerOfMRWall.localScale = Vector3.one * localScale;

            //Get the top offset to align with top edge
            //areaQuadMax = -9999;
            //areaQuadMin = 9999f;
            //foreach (Vector3 vec in quadMesh.vertices)
            //{
            //    //X is the height
            //    Vector3 vecWorld = quadTransform.TransformPoint(vec);
            //    if (vecWorld.y > areaQuadMax)
            //        areaQuadMax = vecWorld.y;
            //    if (vecWorld.y < areaQuadMin)
            //        areaQuadMin = vecWorld.y;
            //}
            List <Vector3> heightList = new List <Vector3>();

            for (int a = 0; a < quadMesh.vertices.Length; a++)// ( in quadMesh.vertices)
            {
                Vector3 vec = quadMesh.vertices[a];
                vec   = quadTransform.TransformPoint(vec);
                vec.x = 0;
                vec.z = 0;
                heightList.Add(vec);
            }
            //float destH = areaQuadMax - areaQuadMin;
            MyHelpMesh.GetLongestLineFromVertices(heightList, null, out newNearPoint, out newFarPoint);
            float destH = (newNearPoint - newFarPoint).magnitude;

            float origH = measureSizeQuad.transform.lossyScale.y; //1.6f * localScale;// original W, H is 2.8 , 1.6

            origH = origH * 2f / 4f;                              // 3x2 block size of 7x4 size
            float offsetH = (destH - origH) * 0.5f;

            //float ratio = destH / destW;
            trackerOfMRWall.position = new Vector3(trackerOfMRWall.position.x, trackerOfMRWall.position.y + offsetH * 0.6f, trackerOfMRWall.position.z);

            //set health position
            Vector3 dir = PaintBallWallGameLocation.position - ARRender.Instance.VRCamera.transform.position;

            dir.y = 0;
            dir.Normalize();
            // float length = dir.magnitude;
            trackerOfHealth.position = ARRender.Instance.VRCamera.transform.position + dir * 1f;
            trackerOfHealth.LookAt(ARRender.Instance.VRCamera.transform, Vector3.up);

            ARRender.Instance.AddUnityrenderWithDepth(trackerOfHealth);
            if (ARRender.ADVANCE_RENDER)
            {
                //We only set PaintObject to render shadow to save shadow render performance
                MyHelpLayer.ReplaceSceneLayer(trackerOfMRWall, LayerMask.NameToLayer("Default"), ARRender.UnityRenderOnTopNoShadowLayer);
                MyHelpLayer.ReplaceSceneLayer(trackerOfMRWall, LayerMask.NameToLayer("PaintObject"), ARRender.UnityRenderOnTopLayer);
            }
            else
            {
                MyHelpLayer.SetSceneLayer(trackerOfMRWall, ARRender.UnityRenderOnTopLayer);
            }

            paintBallStateManger.SetState((int)PaintBallStateManager.PaintBallStateEnum.WAIT_USER_TRIGGER);

            MRWallManager.instance.ResetMRWall();

            //Set directional light
            ARRender.Instance.SetDirectionalLight(fishHidingWall);
        }