/// <summary> /// 認識した写真に応じて、ARObjectを動かす /// 高頻度で動かすために、線形補完機能される /// </summary> /// <param name="aRObjects"></param> /// <param name="aRTrackedImage"></param> /// <param name="t"></param> /// <param name="slearp"></param> public void AlignObjectsHighFrequency(GameObject aRObjects, ARTrackedImage aRTrackedImage, float t, bool slearp) { // 画像名から、対応する子オブジェクトの座標、クォータニオンを取得する var(success, childLocalPosition, childLocalRotation) = arObjectIdentify.GetLocalPositionByName(aRTrackedImage.referenceImage.name); // GetLocalPositionByNameに失敗するとfalseが返ってくるので、その場合は何もしない if (!success) { return; } // 回転計算 var aRObjectRotation = aRObjects.transform.rotation; var setRotation = calculator.CalculateSpin(aRObjectRotation, aRTrackedImage.transform.rotation, childLocalRotation); setRotation = slearp ? Quaternion.Slerp(setRotation, aRObjectRotation, t) : Quaternion.Lerp(setRotation, aRObjectRotation, t); aRObjects.transform.rotation = setRotation; // 座標計算 var movement = calculator.CalculateMovement(aRTrackedImage.transform.position, childLocalPosition, setRotation); movement = Vector3.Lerp(movement, aRObjects.transform.position, t); // 線形補完 aRObjects.transform.position = movement; }
private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { ARTrackedImage trackedImage = null; for (int i = 0; i < eventArgs.added.Count; i++) { trackedImage = eventArgs.added[i]; string imgName = trackedImage.referenceImage.name; if (imgName == "sw-12") { arContents = Instantiate(arPrefabs, trackedImage.transform); cube = CreateCubeForARFoundationTarget(this.gameObject, trackedImage.size.x, trackedImage.size.y, trackedImage.transform); } } for (int i = 0; i < eventArgs.updated.Count; i++) { trackedImage = eventArgs.updated[i]; if (trackedImage.trackingState == TrackingState.Tracking) { arContents.SetActive(true); } else { arContents.SetActive(false); } } for (int i = 0; i < eventArgs.removed.Count; i++) { arContents.SetActive(false); } }
//https://vrgamedevelopment.pro/master-image-tracking-with-arkit-3-part-2/ // method to update image tracked game object visibility void UpdateGameObject(ARTrackedImage trackedImage) { Debug.Log("Tracking State: " + "Tracking Image"); //if tracked image tracking state is comparable to tracking if (trackedImage.trackingState == TrackingState.Tracking) { //This Code worked for IOS, but not for Android //Debug.Log("Tracking State: Ich will die Canvas AUSSCHALTEN"); Debug.Log("Tracking State: Bild gefunden: " + trackedImage.referenceImage.name); if (trackedImage.referenceImage.name == "caritas") { trackedImage.gameObject.SetActive(true); //Debug.Log("Prefab game Object: " + trackedImage.gameObject.name); //trackedImage.gameObject.transform.Find("P7_MotorTarget").gameObject.SetActive(true); //trackedImage.gameObject.transform.Find("MotorTarget").gameObject.SetActive(true); //trackedImage.gameObject.transform.Find("P5_WaterTarget").gameObject.SetActive(true); } } else if (trackedImage.trackingState == TrackingState.Limited)//if tracked image tracking state is limited or none { Debug.Log("Tracking State: " + "Limited"); trackedImage.gameObject.SetActive(false); } else if (trackedImage.trackingState == TrackingState.None)//if tracked image tracking state is limited or none { Debug.Log("Tracking State: " + "None"); } }
void UpdateInfo(ARTrackedImage trackedImage) { if (trackedImage.referenceImage.name == "Rafflesia") { trackedImage.GetComponent <itp.Tracked>().Choose(0); } if (trackedImage.referenceImage.name == "Logo") { trackedImage.GetComponent <itp.Tracked>().Choose(1); } if (trackedImage.referenceImage.name == "QRCode") { trackedImage.GetComponent <itp.Tracked>().Choose(2); } if (trackedImage.trackingState == TrackingState.Tracking) { trackedImage.transform.localScale = new Vector3(trackedImage.size.x, trackedImage.size.x, trackedImage.size.y); //trackedImage.GetComponent<Renderer>().material.mainTexture = (trackedImage.referenceImage.texture == null) ? null : trackedImage.referenceImage.texture; } else { trackedImage.GetComponent <itp.Tracked>().Choose(-1); } }
private void UpdateInfo(ARTrackedImage trackedImage) { var canvas = trackedImage.GetComponentInChildren <Canvas>(); canvas.worldCamera = worldSpaceCanvasCamera; var text = canvas.GetComponentInChildren <Text>(); text.text = string.Format ( "{0}\ntrackingState: {1}\nGUID: {2}\nReference size: {3} cm\nDetected size: {4} cm", trackedImage.referenceImage.name, trackedImage.trackingState, trackedImage.referenceImage.guid, trackedImage.referenceImage.size * 100f, trackedImage.size * 100f); var planeParentGo = trackedImage.transform.GetChild(0).gameObject; var planeGo = planeParentGo.transform.GetChild(0).gameObject; if (trackedImage.trackingState != TrackingState.None) { planeGo.SetActive(true); trackedImage.transform.localScale = new Vector3(trackedImage.size.x, 1f, trackedImage.size.y); var material = planeGo.GetComponentInChildren <MeshRenderer>().material; material.mainTexture = trackedImage.referenceImage.texture == null ? defaultTexture : trackedImage.referenceImage.texture; } else { planeGo.SetActive(false); } }
void UpdateInfo(ARTrackedImage trackedImage) { // Set canvas camera var canvas = trackedImage.GetComponentInChildren <Canvas>(); canvas.worldCamera = canvasCamera; // Update information about the tracked image var text = canvas.GetComponentInChildren <Text>(); text.text = string.Format( "Nom de l'oeuvre: {0}", trackedImage.referenceImage.name); var planeParentGo = trackedImage.transform.GetChild(0).gameObject; var planeGo = planeParentGo.transform.GetChild(0).gameObject; // Disable the visual plane if it is not being tracked if (trackedImage.trackingState != TrackingState.None) { planeGo.SetActive(true); // The image extents is only valid when the image is being tracked trackedImage.transform.localScale = new Vector3(trackedImage.size.x, 1f, trackedImage.size.y); // Set the texture var material = planeGo.GetComponentInChildren <MeshRenderer>().material; material.mainTexture = (trackedImage.referenceImage.texture == null) ? defaultTexture : trackedImage.referenceImage.texture; } else { planeGo.SetActive(false); } }
private void SetImage(ARTrackedImage trackedImage) { var newPrefab = AnimalsManager.Instance.GetAnimalByName(trackedImage.referenceImage.name).prefab; var placedPrefab = Instantiate(newPrefab, trackedImage.transform.position, trackedImage.transform.rotation, trackedImage.transform); placedPrefab.AddComponent <ArKitObject>(); // Init object manipulator ( Tracked Image ) trackedImage.GetComponent <ArKitManipulatorsManager>().ArKitObject = placedPrefab.GetComponent <ArKitObject>(); trackedImage.GetComponent <ArKitManipulatorsManager>().rayCastManager = rayCastManager; trackedImage.GetComponent <ArKitManipulatorsManager>().mainCamera = mainCamera; // Instantiate object selected visual queue ( circle under object ) var selectionVisualization = Instantiate(selectionPrefab, placedPrefab.transform, true); selectionVisualization.transform.localPosition = Vector3.zero; selectionVisualization.transform.localScale = placedPrefab.transform.localScale; selectionVisualization.transform.localRotation = Quaternion.Euler(0, 0, 0); // Init prefab components placedPrefab.GetComponent <ArKitObject>().Init(trackedImage.GetComponent <ArKitManipulatorsManager>(), selectionVisualization, runtimeAnimatorController); // Set object selected manipulationSystem.Select(placedPrefab.GetComponent <ArKitObject>()); // Add to list placedObjects.Add(trackedImage.gameObject); }
private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { trackingImage = null; // // 画像を新規認識時に、位置合わせを行う // foreach (var trackedImage in eventArgs.added) // { // moveSessionOrigin.move_arObjects_parallel(arObjects, trackedImage); // } // Tracking数を1に設定すること foreach (var trackedImage in eventArgs.updated) { if (trackedImage.trackingState != TrackingState.Tracking) { continue; } trackingImage = trackedImage; } if (trackingImage == null) { return; } Profiler.BeginSample("位置合わせのコスト"); objectFitting.AlignObjectsHighFrequency(arObjects, trackingImage, 0.5f, true); Profiler.EndSample(); }
// show game start buttons, stars if not collected or questions if its star hasn't been collected yet private void UpdateImage(ARTrackedImage trackedImage) { Debug.Log("Is star collected: " + IsStarCollected(trackedImage.referenceImage.name)); if (IsStarCollected(trackedImage.referenceImage.name)) { return; } string name = trackedImage.referenceImage.name; Vector3 position = trackedImage.transform.position; GameObject prefab = spawnedPrefabs[name]; prefab.transform.position = position; prefab.transform.rotation = trackedImage.transform.rotation; PositionSaveSystem.position = prefab.transform.position; PositionSaveSystem.rotation = prefab.transform.rotation; prefab.transform.Rotate(90, 0, 0); if (!prefab.name.Contains("star")) { ShowGameIcon(prefab); } if (prefab.name.Contains("question")) { prefab.transform.Rotate(0, -90, 0); } prefab.SetActive(true); Debug.Log(prefab.name + " spotted"); }
private void UpdateARImage(ARTrackedImage trackedImage) { //Get the name of the current tracked image // set the fixed position to this slightly above and behind this fixed image, this will be used to anchor the object //Identify the the items group e.g. Recylable, General or Compost. Update UI accordingly // Set the users scan count string raw_image_name = trackedImage.referenceImage.name; scanImageIcon.enabled = false; Vector3 position = trackedImage.transform.position + trackedImage.transform.up * 0.05f + trackedImage.transform.forward * 0.1f; fixedPosition = position; ReturnItemName(raw_image_name); string name = DetectImageGroup(raw_image_name); AssignGameObject(name, position); scannedCount += 1; PlayerPrefs.SetInt("scanned_count", scannedCount); PlayerPrefs.SetInt("general_scanned_count", generalItemsScannedCount); PlayerPrefs.SetInt("compost_scanned_count", compostItemsScannedCount); PlayerPrefs.SetInt("recycle_scanned_count", recycleItemsScannedCount); PlayerPrefs.Save(); }
void UpdateARMarker(ARTrackedImage trackedImage) { if (trackedImage.trackingState != TrackingState.None) { trackedImage.transform.localScale = new Vector3(trackedImage.size.x, 1f, trackedImage.size.y); if (trackedImage.referenceImage.texture != null) { var material = trackedImage.gameObject.GetComponentInChildren <MeshRenderer>().material; material.mainTexture = trackedImage.referenceImage.texture; } string imageName = trackedImage.referenceImage.name; Vector3 localScale = new Vector3(trackedImage.size.x, trackedImage.size.x, trackedImage.size.x); GameObject arObject = null; GameObject prefab = null; if (!_ARObjects.TryGetValue(imageName, out arObject)) { if (_ARObjectPrefabs.TryGetValue(imageName, out prefab)) { arObject = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity); _ARObjects.Add(imageName, arObject); } } arObject.transform.localScale = localScale; arObject.transform.position = trackedImage.transform.position; arObject.transform.rotation = trackedImage.transform.rotation; } }
private void UpdateARImage(ARTrackedImage trackedImage) { imageTrackedText.text = "Detectado: " + trackedImage.referenceImage.name; AssignGameObject(trackedImage.referenceImage.name, trackedImage.transform.position); Debug.Log($"ImageRecognition: {trackedImage.referenceImage.name}"); }
private void UpdateARImage(ARTrackedImage trackedImage) { // Assign and Place Game Object AssignGameObject(trackedImage.referenceImage.name, trackedImage.transform.position, trackedImage.referenceImage.texture, trackedImage.size); //Debug.Log($"trackedImage.referenceImage.name: {trackedImage.referenceImage.name}"); }
void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { foreach (var trackedImage in eventArgs.added) { currentInsruction = trackedImage; SetupInstruction(trackedImage); UpdateInstruction(trackedImage); UpdateModel(trackedImage); break; } foreach (var trackedImage in eventArgs.updated) { UpdateInstruction(trackedImage); } foreach (var trackedImage in eventArgs.removed) { // Does not get invoked when the image goes out of view } }
private void FindTrackedImageDistanceMin() { if (_trackedImageList.Count == 1) { UpdateTrackedImageDistanceMin(_trackedImageList[0]); } else { var distanceMin = float.MaxValue; ARTrackedImage found = null; foreach (var trackedImage in _trackedImageList) { var distance = Vector3.Distance(_camera.transform.position, trackedImage.transform.position); if (distance < distanceMin) { distanceMin = distance; found = trackedImage; } } if (found != _trackedImageDistanceMin) { UpdateTrackedImageDistanceMin(found); } } }
private void UpdateARImage(ARTrackedImage trackedImage) { // Display the name of the tracked image in the canvas //imageTrackedText.text = trackedImage.referenceImage.name; Seeker = arObjects["Plusieurs"].transform.Find("Seeker").gameObject; Target_1 = arObjects["Plusieurs"].transform.Find("Target_1").gameObject; Target_2 = arObjects["Plusieurs"].transform.Find("Target_2").gameObject; // Assign and Place Game Object if (trackedImage.referenceImage.name == "Plusieurs") { PathRequestManager.RequestPath(Seeker.transform.position, Target_1.transform.position, OnPathFound); PathRequestManager.RequestPath(Seeker.transform.position, Target_2.transform.position, OnPathFound); } else if (trackedImage.referenceImage.name == "Remplie") { PathRequestManager.RequestPath(Seeker.transform.position, Target_1.transform.position, OnPathFound); } else { } AssignGameObject("Plusieurs", trackedImage.transform.position); Debug.Log($"trackedImage.referenceImage.name: {trackedImage.referenceImage.name}"); }
private void UpdateImage(ARTrackedImage trackedImage) { string name = trackedImage.referenceImage.name; Vector3 position = trackedImage.transform.position; Quaternion rotation = trackedImage.transform.rotation; GameObject prefab = spawnedPrefabs[name]; prefab.transform.position = position; prefab.transform.rotation = rotation; //prefab.SetActive(true); prefab.gameObject.SetActive(true); if (name == "Monalisa") { infoVar = 0; } else if (name == "LedaAtomica") { infoVar = 1; } else { infoVar = 2; } foreach (GameObject go in spawnedPrefabs.Values) { if (go.name != name) { go.gameObject.SetActive(false); //go.SetActive(false); } } }
private void ImageChanged(ARTrackedImagesChangedEventArgs obj) { ARTrackedImage trackedImage = null; for (int i = 0; i < obj.added.Count; i++) { PrefabsInitialization(); } for (int i = 0; i < obj.updated.Count; i++) { trackedImage = obj.updated[i]; if (trackedImage.trackingState == TrackingState.Tracking) { string tmpName = trackedImage.referenceImage.name; Vector3 tmpPose = trackedImage.transform.position; _tmpText.text = tmpName; _tmpGameObject = spawnedPrefabs[tmpName]; _tmpGameObject.transform.position = tmpPose; HideAllPrefabs(); _tmpGameObject.SetActive(true); } } for (int i = 0; i < obj.removed.Count; i++) { Destroy(_tmpGameObject); } }
void UpdateInfo(ARTrackedImage trackedImage) { Debug.Log("UpdateInfo: " + trackedImage.name); if (trackedImage.referenceImage.name.Equals(ImageTargetName) || TrackAll) { if ((trackedImage.trackingState == TrackingState.Tracking)) { if (this.previousState != TrackingState.Tracking) { Debug.Log("Tracking: " + trackedImage.referenceImage.name); CallPoseFound(); this.previousState = TrackingState.Tracking; } contentHolder.transform.position = trackedImage.transform.position; contentHolder.transform.rotation = trackedImage.transform.rotation; } else if (trackedImage.trackingState == TrackingState.Limited) { contentHolder.transform.position = trackedImage.transform.position; contentHolder.transform.rotation = trackedImage.transform.rotation; } else if (trackedImage.trackingState == TrackingState.None) { if (this.previousState != TrackingState.None) { Debug.Log("No tracking"); CallPoseLost(); this.previousState = TrackingState.None; } } } }
private void UpdateImage(ARTrackedImage trackedImage) { string name = trackedImage.referenceImage.name; Vector3 position = trackedImage.transform.position; Quaternion rotation = trackedImage.transform.rotation; GameObject prefab = spawnedPrefabs[name]; prefab.transform.position = position; prefab.transform.rotation = rotation; if (toggle.isOn == true) { prefab.SetActive(true); } else { prefab.SetActive(true); foreach (GameObject go in spawnedPrefabs.Values) { if (go.name != name) { go.SetActive(false); } } } }
private void OntrackedImagesChanged(ARTrackedImagesChangedEventArgs args) { // 검출된 마커를 다 검사해서 for (int i = 0; i < args.updated.Count; i++) { ARTrackedImage image = args.updated[i]; // 만약 검출된 마커의 이름과 내가 보유한 마커(markerList)의 이름이 같다면 for (int j = 0; j < markerList.Length; j++) { if (image.referenceImage.name == markerList[j].name) { // 만약 그 마커가 추적중이라면 if (image.trackingState == TrackingState.Tracking) { // 그 마커의 게임오브젝트를 활성화하고 markerList[j].gobj.SetActive(true); // 위치도 동기화 하고싶다. markerList[j].gobj.transform.position = image.transform.position; } // 그렇지않고 추적중이 아니라면 else { // 그 마커의 게임오브젝트를 비활성화 하고싶다. markerList[j].gobj.SetActive(false); } } } } }
void UpdateInfo(ARTrackedImage trackedImage, Texture2D texture = null) { var planeParentGo = trackedImage.transform.GetChild(0).gameObject; var planeGo = planeParentGo.transform.GetChild(0).gameObject; if (texture) { // Set the texture trackedImage.name = texture.name; CornerSandboxParenter sender = trackedImage.GetComponentInChildren <CornerSandboxParenter>(); m_parenters.Add(sender); sender.SetCornerTypeFromString(texture.name); var material = planeGo.GetComponentInChildren <MeshRenderer>().material; material.mainTexture = texture; } // Disable the visual plane if it is not being tracked if (trackedImage.trackingState != TrackingState.None) { planeGo.SetActive(true); // The image extents is only valid when the image is being tracked trackedImage.transform.localScale = new Vector3(trackedImage.size.x, trackedImage.size.x, trackedImage.size.y); } else { planeGo.SetActive(false); } }
void UpdateInfo(ARTrackedImage trackedImage) { var trackedImageTransform = trackedImage.transform; var referenceImageName = getReferenceName(trackedImage); var syncPoint = Repositories.SyncPointRepository.Get() .FirstOrDefault(element => element.Name == referenceImageName); LogThings(trackedImage); MoveDetectedImageMarker(trackedImageTransform.position); if (syncPoint != null) { SetPendingSyncPointToSyncPoint(trackedImageTransform, syncPoint, referenceImageName); } var planeGo = trackedImageTransform.gameObject; if (TrackedImageHasTrackingState(trackedImage)) { planeGo.SetActive(true); trackedImageTransform.localScale = new Vector3(trackedImage.size.x, 1f, trackedImage.size.y); } else { planeGo.SetActive(false); } }
void MatchImageWithMarker(ARTrackedImage trackedImage) { StationaryMarker virtualMarker; if (virtualMarkersDict.TryGetValue(trackedImage.referenceImage.guid, out virtualMarker)) { if (trackedImage.trackingState != TrackingState.None) { lastTrackedMarker = virtualMarker; lastTrackedImage = trackedImage; if (trackedImage.transform.lossyScale != virtualMarker.transform.lossyScale) { trackedImage.transform.localScale = virtualMarker.transform.lossyScale; Debug.LogWarning("trackedImage scale " + trackedImage.transform.lossyScale.ToString("F2") + " != " + virtualMarker.transform.lossyScale.ToString("F2") + " of virtual marker! Positioning might become incorrect!"); } //lastTrackedImage.transform.localScale = Vector3.one; virtualMarker.gameObject.SetActive(true); SyncOffset(); } else { virtualMarker.gameObject.SetActive(false); } } }
void UpdateInstruction(ARTrackedImage trackedImage) { var planeParentGo = trackedImage.transform.GetChild(0).gameObject; var planeGo = planeParentGo.transform.GetChild(0).gameObject; var canvasGroup = trackedImage.GetComponentInChildren <CanvasGroup>(); var text = trackedImage.GetComponentInChildren <Text>(); // Disable/Enable the visuals based on if this is the current instruction and it is tracked if (trackedImage == currentInsruction && trackedImage.trackingState != TrackingState.None) { planeGo.SetActive(true); canvasGroup.alpha = 1f; // The image extents is only valid when the image is being tracked trackedImage.transform.localScale = new Vector3(trackedImage.size.x, trackedImage.size.y, trackedImage.size.y); // Set the texture var material = planeGo.GetComponentInChildren <MeshRenderer>().material; material.mainTexture = (trackedImage.referenceImage.texture == null) ? defaultTexture : trackedImage.referenceImage.texture; // Update the step number if (stepper != null) { text.text = "Step: " + stepper.GetCurrentStep().Number; } } else { planeGo.SetActive(false); canvasGroup.alpha = 0f; } }
private void AisleFound(ARTrackedImage trackedImage) { String aisleName = trackedImage.referenceImage.name; aisleImageLocation = trackedImage.transform.position; aisleImageRotation = trackedImage.transform.rotation; switch (aisleName) { case "chips": if (!inAisle) { aisleMarker = Instantiate(groundMarker, aisleImageLocation, aisleImageRotation); aisleContainer = aisleMarker.transform.GetChild(0).gameObject; aisleContainer.transform.localPosition = new Vector3(6f, 0f, -1.5f); aisleContainer.transform.Rotate(new Vector3(90, 0, 0)); childName = aisleContainer.name; markerPlacedLocation = aisleMarker.transform.position; containerLocation = aisleContainer.transform.position; inAisle = true; marker.SetActive(false); } else { aisleMarker.transform.position = trackedImage.transform.position; aisleMarker.transform.rotation = trackedImage.transform.rotation; markerPlacedLocation = aisleMarker.transform.position; containerLocation = aisleContainer.transform.position; } break; default: break; } }
public void UpdateInfo(ARTrackedImage trackedImage) { if (trackedImage.trackingState != TrackingState.None) { traking.transform.position = arcamera.transform.position; OnTargetFound.Invoke(); } }
/// <summary> /// 画像を認識すると同時にmove_arObjectsを行うと、更新前のため /// aRTrackedImage.transform.positionの取得がうまくいかない。 /// 少し時間をおいてmove_arObjectsを行う /// </summary> /// <param name="aRObjects">動かしたいオブジェクト群</param> /// <param name="aRTrackedImage">認識している写真</param> public void AlignObjectsParallel(GameObject aRObjects, ARTrackedImage aRTrackedImage) { Task.Run(() => { Task.Delay(50); AlignObjectsLowFrequency(aRObjects, aRTrackedImage); }); }
void UpdateInfo(ARTrackedImage trackedImage) { if (trackedImage.referenceImage.name != null) { Debug.Log(trackedImage.referenceImage.name); } Debug.Log(trackedImage.trackingState.ToString()); }
private void UpdateArImage(ARTrackedImage trackedImage) { // Display the name of the tracked image in the canvas imageTrackedText.text = trackedImage.referenceImage.name; // Assign and Place Game Object AssignGameObject(trackedImage.referenceImage.name, trackedImage.transform.position); }