HoloLens에서 실제 벽과 바닥에 반사하는 레이저를 쏴보세요 # 애셋 Adkale
오늘은 HoloLens의 공간 인식을 이용하여 현실의 벽이나 바닥이나 천장이나 책상 등에서 반사하는 레이저를 쏘아봅니다.
ArcReactor Rays Generator 1.8 (Dec 16, 2016)
반사하는 빔의 포인트가 되는 것은 Demo3_reflect 데모 장면에 포함된 LaserLauncher, PlasmaLauncher 게임 객체에 부착된 ArcReactor_Launcher.cs입니다. 이것의 Reflection Settings에서 반사시키고 싶은 Layer를 지정.
그리고, 반사하는 벽에 부착된 ArcReactorDemo3Mirror.cs가 실제의 반사를 실시하고 있는 것 같습니다.
그러므로 HoloToolkit-Unity에 포함된 공간인식 후에 좋게 Plane을 생성하여 배치해 주는 SpatialProcessing 데모 장면을 바탕으로 생성된 Plane에 대해 ArcReactorDemo3Mirror.cs도 첨부하도록 조금 커스터마이징합니다. .
SurfaceMeshesToPlanes.cs
// どっかに追加してインスペクター上で\ArcReactor\Demos\Prefabs\Particles\MirrorHitBubbles.prefabをアタッチする
public GameObject hitParticles;
// 265行目付近に追加
ArcReactor.Demo.ArcReactorDemo3Mirror mirror = destPlane.AddComponent<ArcReactor.Demo.ArcReactorDemo3Mirror>();
mirror.hitParticles = hitParticles;
Gradient g;
GradientColorKey[] gck;
GradientAlphaKey[] gak;
g = new Gradient();
gck = new GradientColorKey[2];
gck[0].color = Color.red;
gck[0].time = 0.0F;
gck[1].color = Color.blue;
gck[1].time = 1.0F;
gak = new GradientAlphaKey[2];
gak[0].alpha = 1.0F;
gak[0].time = 0.0F;
gak[1].alpha = 0.0F;
gak[1].time = 1.0F;
mirror.colorGrad = g;
mirror.rotationSpeed = new Vector3(0f, 0f, 0f);
destPlane.transform.parent = planesParent.transform;
SurfacePlane surfacePlane = destPlane.GetComponent<SurfacePlane>();
이것으로 SurfacePlane이 이렇게 된다.
레이저를 Air-Tap으로 배출
다음으로 Demo3_reflect 데모 장면에 있던 LaserLauncher 게임 오브젝트를 참고로 ArcReactor_Launcher.cs를 적당한 게임 오브젝트를 만들어 첨부하여 값을 설정.
Demo3_reflect 데모 장면의 LaserLauncher 게임 오브젝트를 조립식으로 가져와도 괜찮습니다.
Air-Tap에서 원하는 이벤트를 실행할 수 있는 범용 스크립트
아래 스크립트를 사용하여 Air-Tap에서 LaserLauncher.cs의 LaunchRay()가 실행되도록 설정합니다.
※Manager 객체라든지 부착하여 범용적으로 사용할 수 있다.
AirTapAction.cs
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.VR.WSA.Input;
using HoloToolkit.Unity;
[RequireComponent(typeof(GazeManager))]
public class AirTapAction : MonoBehaviour
{
GestureRecognizer recognizer;
public UnityEvent myEvent;
void Start()
{
recognizer = new GestureRecognizer();
recognizer.SetRecognizableGestures(GestureSettings.Tap);
recognizer.TappedEvent += Recognizer_TappedEvent;
recognizer.StartCapturingGestures();
}
void OnDestroy()
{
recognizer.StopCapturingGestures();
recognizer.TappedEvent -= Recognizer_TappedEvent;
}
private void Recognizer_TappedEvent(InteractionSourceKind source, int tapCount, Ray headRay)
{
OnTap();
}
void LateUpdate()
{
#if UNITY_EDITOR
if (Input.GetMouseButtonDown(0))
{
OnTap();
}
#endif
}
private void OnTap()
{
if (myEvent != null)
myEvent.Invoke();
}
}
완성
Reference
이 문제에 관하여(HoloLens에서 실제 벽과 바닥에 반사하는 레이저를 쏴보세요 # 애셋 Adkale), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuujii/items/fc983132dac69f901a36텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)