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; } }
public void RecoverFishToDefaultLayer() { MyHelpLayer.ReplaceSceneLayer(fishAI.transform, ARRender.UnityRenderOnTopNoShadowLayer, LayerMask.NameToLayer("Default")); MyHelpLayer.ReplaceSceneLayer(fishAI.transform, ARRender.UnityRenderOnTopLayer, LayerMask.NameToLayer("PaintObject")); ARRender.Instance.RecoverUnityrenderWithDepthLayer(); }
public void SetFishToRenderTop() { MyHelpLayer.ReplaceSceneLayer(fishAI.transform, LayerMask.NameToLayer("Default"), ARRender.UnityRenderOnTopNoShadowLayer); MyHelpLayer.ReplaceSceneLayer(fishAI.transform, LayerMask.NameToLayer("PaintObject"), ARRender.UnityRenderOnTopLayer); ARRender.Instance.SetUnityrenderWithDepthToTopLayer(); }
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); }