private void TrackingPlane() { Touch touch = Input.GetTouch(0); if (touch.phase != TouchPhase.Ended) { return; } if (raycastManager.Raycast(touch.position, raycastHitList, TrackableType.PlaneWithinPolygon)) { Pose hitPose = raycastHitList[0].pose; if (obj == null) { uiManager.DisplayDebug("Raycast 成功"); field.SetActive(true); currentARState = ARState.Ready; } else { uiManager.DisplayDebug("Raycast 済"); obj.transform.position = hitPose.position; } } else { uiManager.DisplayDebug("Raycast 失敗"); } }
private void Update() { if (currentARState == ARState.None) { return; } if (Input.touchCount < 0) { return; } if (currentARState == ARState.Tracking) { //平面感知 TrackingPlane(); } else if (currentARState == ARState.Ready) { currentARState = ARState.Wait; uiManager.DisplayDebug(currentARState.ToString()); //ゲーム開始の準備 StartCoroutine(PraparateGameReady()); } else if (currentARState == ARState.Play) { uiManager.DisplayDebug(currentARState.ToString()); } }
private IEnumerator PraparateGameReady() { //TODO 準備処理を書く yield return(new WaitForSeconds(2.0f)); currentARState = ARState.Play; uiManager.DisplayDebug(currentARState.ToString()); if (isARDebug == true) { StartCoroutine(fieldAutoScroller.StartFieldScroll()); } //平面検知を非表示 planeDetection.SetAllPlaneActivate(false); }
protected override void MakeFSM() { HomeState homeState = new HomeState(); homeState.AddTransition(TRANSITION.TRANSITION_TO_ARSTATE, STATE_ID.AR_STATE); ARState arState = new ARState(); arState.AddTransition(TRANSITION.TRANSITION_TO_HOMESTATE, STATE_ID.HOME_STATE); arState.AddTransition(TRANSITION.TRANSITION_TO_VIDEOTUTORIALSTATE, STATE_ID.VIDEO_TUTORIAL_STATE); VideoTutorialState videoState = new VideoTutorialState(); videoState.AddTransition(TRANSITION.TRANSITION_TO_ARSTATE, STATE_ID.AR_STATE); _FSM = new FSMSystem(this); _FSM.AddState(homeState); _FSM.AddState(arState); _FSM.AddState(videoState); base.MakeFSM(); }