private SurfaceBehaviour ScanForSurfaces(out RaycastHit point) { SurfaceBehaviour closest = null; var closestDistance = float.MaxValue; point = new RaycastHit(); foreach (var dir in directions) { var ray = new Ray(transform.position, dir); RaycastHit hit; var result = Physics.Raycast(ray, out hit, m_raycastDistance, 1 << LayerMask.NameToLayer("Surface")); if (!result) { continue; } var surface = hit.collider.GetComponent <SurfaceBehaviour>(); if (surface == null) { continue; } if (closest == null || hit.distance < closestDistance) { point = hit; closest = surface; closestDistance = hit.distance; } } return(closest); }
public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour prop, SurfaceBehaviour primarySurface) { var handler = go.AddComponent <DefaultSmartTerrainEventHandler>(); handler.PropTemplate = prop.GetComponent <PropBehaviour>(); handler.SurfaceTemplate = primarySurface.GetComponent <SurfaceBehaviour>(); }
//检测到Smart Terrain的表面 void surfaceFound(GameObject surface) { //获取被激活表面的相关引用 SmartSurface = surface.GetComponent <SurfaceBehaviour>(); STTrackableHandler = surface.GetComponent <SmartTerrainTrackableEventHandler>(); //对状态改变进行通知 if (OnChangeState != null) { OnChangeState(GameState.SCANNING); } }
public void RemoveGizmoSurface(Gizmo gizmo) { if (!(gizmo is GizmoSurface)) { return; } GizmoSurface gizmoSurface = (GizmoSurface)gizmo; SurfaceBehaviour surfaceBehaviour = (SurfaceBehaviour)gizmoMap[gizmoSurface]; Destroy(surfaceBehaviour.gameObject); gizmoMap.Remove(gizmoSurface); }
public void AddGizmoSurface(Gizmo gizmo) { if (!(gizmo is GizmoSurface)) { return; } GizmoSurface gizmoSurface = (GizmoSurface)gizmo; GameObject gizmoObject = new GameObject("surface"); gizmoObject.transform.SetParent(gizmoWrapper.transform); SurfaceBehaviour surfaceBehaviour = gizmoObject.AddComponent <SurfaceBehaviour>(); surfaceBehaviour.Init(geoCamera); FaceRefer face = gizmoSurface.face; if (face.ids.Length < 3) { return; } Vector3 center = geometry.Center(); Vector3 v1 = geometry.UnitVector(face.ids[0]); Vector3 v2 = geometry.UnitVector(face.ids[1]); Vector3 v3 = geometry.UnitVector(face.ids[2]); float radius = v3.z - v2.z; int pointCount = 4; Vector3[] vectors = new Vector3[pointCount]; float angledegree = 360.0f; float angleRad = Mathf.Deg2Rad * angledegree; float angleCur = angleRad; float angledelta = angleRad / pointCount; for (int i = 0; i < pointCount; i++) { float cosA = Mathf.Cos(angleCur); float sinA = Mathf.Sin(angleCur); vectors[i] = new Vector3(radius * cosA, v2.y, radius * sinA); angleCur -= angledelta; } string area = geometry.SurfaceArea(face.ids); surfaceBehaviour.SetData(center, vectors, area); gizmoMap.Add(gizmoSurface, surfaceBehaviour); }
private void FixedUpdate() { m_surface = ScanForSurfaces(out m_contactPoint); if (m_surface) { m_surface.HandleContact(m_contactPoint.normal, m_rigidbody); } else { Physics.gravity = Vector3.down * Physics.gravity.magnitude; } m_rigidbody.velocity = m_rigidbody.velocity.normalized * Mathf.Max(Mathf.Min(m_rigidbody.velocity.magnitude, m_maxVelocity), m_minVelocity); }
void Start() { // Assign all references mReconstructionBehaviour = FindObjectOfType <ReconstructionBehaviour>(); mCylinderTrackableHandler = FindObjectOfType <CylinderTrackableEventHandler>(); mSTEventHandler = GameObject.FindObjectOfType <SmartTerrainEventHandler>(); mSmartSurface = GameObject.FindObjectOfType <SurfaceBehaviour>(); mSTTrackableHandler = GameObject.FindObjectOfType <SmartTerrainTrackableEventHandler>(); // Register to events mCylinderTrackableHandler.CylinderTrackableFoundFirstTime += OnCylinderTrackableFoundFirstTime; // Load header textures for user instructions mPointDeviceTexture = Resources.Load <Texture2D>("UserInterface/header_pointdevice"); mPullBackTexture = Resources.Load <Texture2D>("UserInterface/header_pullbackslowly"); mTapIceTexture = Resources.Load <Texture2D>("UserInterface/header_tapice"); }
public void StartTerrainGeneration() { mSurfaceBehavour = FindObjectOfType <SurfaceBehaviour>(); mSurfaceBehavour.GetComponent <CustomSmartTerrainTrackableEventHandler>().StartRender(); }
public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour propBehaviour, SurfaceBehaviour surfaceBehaviour) { throw new System.NotImplementedException(); }
void Start() { mPopUpMsg = GetComponent<SampleInitErrorHandler>(); if (!mPopUpMsg) { mPopUpMsg = gameObject.AddComponent<SampleInitErrorHandler>(); } mPopUpMsg.InitPopUp(); // register callback methods QCARAbstractBehaviour qcarBehaviour = (QCARAbstractBehaviour)FindObjectOfType(typeof(QCARAbstractBehaviour)); if (qcarBehaviour) { qcarBehaviour.RegisterQCARStartedCallback(OnQCARStarted); qcarBehaviour.RegisterQCARInitErrorCallback(OnQCARInitializationError); } //Assign all references m_reconstructionBehaviour = FindObjectOfType(typeof(ReconstructionBehaviour)) as ReconstructionBehaviour; m_uiInput = new GUIInputManager(); m_cylinderTrackableHandler = FindObjectOfType(typeof(CylinderTrackableEventHandler)) as CylinderTrackableEventHandler; m_smartTerrainEventHandler = GameObject.FindObjectOfType(typeof(SmartTerrainEventHandler)) as SmartTerrainEventHandler; m_smartSurface = GameObject.FindObjectOfType(typeof(SurfaceBehaviour)) as SurfaceBehaviour; m_smartTerrainTrackableHandler = GameObject.FindObjectOfType(typeof(SmartTerrainTrackableEventHandler)) as SmartTerrainTrackableEventHandler; //Register to events m_cylinderTrackableHandler.CylinderTrackableFoundFirstTime += OnCylinderTrackableFoundFirstTime; m_uiInput.TappedOnDoneButton += OnTappedOnDone; m_uiInput.TappedOnResetButton += OnTappedOnReset; }