Mündəricat:

AR Portalı, qəribə şeylərdən yuxarıya doğru: 10 addım (şəkillərlə)
AR Portalı, qəribə şeylərdən yuxarıya doğru: 10 addım (şəkillərlə)

Video: AR Portalı, qəribə şeylərdən yuxarıya doğru: 10 addım (şəkillərlə)

Video: AR Portalı, qəribə şeylərdən yuxarıya doğru: 10 addım (şəkillərlə)
Video: Balabey - Popuri 2024, Noyabr
Anonim
AR Portalı, Qəribə şeylərdən Başa doğru
AR Portalı, Qəribə şeylərdən Başa doğru
AR Portalı, Qəribə şeylərdən Başa doğru
AR Portalı, Qəribə şeylərdən Başa doğru

Bu Təlimat, Stranger Things -dən tərsinə aparan bir portal ilə iPhone üçün genişləndirilmiş reallıq mobil tətbiqetməsindən keçəcək. Portala girə, gəzə və geri qayıda bilərsiniz. Portala daxil olan hər şeyi yalnız içəri girənə qədər portal vasitəsilə görmək olar. İçəri girdikdən sonra, hər şey real dünyaya qayıdana qədər hər yerdə olacaq. Apple ARKit plagini olan Unity 3D video oyun motorundan istifadə edəcəyik. İstifadə edəcəyimiz bütün proqramlar pulsuz olaraq yüklənə və istifadə edilə bilər. İzləmək üçün bir mütəxəssis olmağınıza ehtiyac yoxdur, hər addımı atacağıq!

Addım 1: Yeni Birlik Layihəsinə başlayın

Yeni Birlik Layihəsinə başlayın
Yeni Birlik Layihəsinə başlayın

Əvvəlcə Unity3D -ni yükləyin və IOS platforması üçün qurma fayllarını quraşdırdığınızdan əmin olun. Ayrıca Xcode yükləməli və pulsuz bir alma geliştirici hesabına üzv olmalısınız. İPhone -un IOS 11 və ya daha yüksək bir versiyası da işləməlidir. Bu gün, 5 Fevral 2018 tarixindən etibarən, IOS 11.3 çıxdı, ancaq xCode 9.2 üçün hələ də dəstək sənədləri yoxdur. Beləliklə, ən son IOS versiyasını istifadə edirsinizsə, Apple. Developer.com saytından ən son Xcode beta versiyasını yüklədiyinizə əmin olun.

Bütün lazımi proqramları əldə etdikdən sonra Birliyi açın və yeni bir layihəyə başlayın, istədiyinizə zəng edin. Telefonun kamerasından istifadə edərək yerdəki cisimlərin yerini müəyyən edə biləcəyimiz üçün Apple ARKit plagininə ehtiyacımız olacaq. Bunu Aktiv Mağazası sekmesine keçərək "ARKit" axtararaq idxal edək. Hələ hesabınız yoxdursa, pulsuz Birlik hesabı yaratmalısınız, sonra plagini almaq üçün idxal düyməsini basın.

ARKit qovluğundakı nümunələr qovluğuna gedin və "UnityARKitScene" ni tapın. Bunu açmaq üçün üzərinə iki dəfə vurun. Bu mənzərəni bir başlanğıc nöqtəsi olaraq istifadə edəcəyik və buradan quracağıq. Varsayılan olaraq bu səhnə, yeri aşkar etməyə imkan verəcək və ekrana toxunduğunuzda həmin mövqedə bir kub yerləşdiriləcək.

Əvvəlcə qurma parametrlərimizi kvadratlara ayıraq ki, daha sonra etməyi unutmayaq. Faylı vurun, parametrlər qurun və siyahıdakı bütün səhnələri silin. Açıq səhnələri əlavə etmək üçün mövcud olanı əlavə edin. Burada qurmağımız lazım olan son şey, oyunçu parametrlərində paket identifikatoruna enməkdir və bu sətrin formatı com. YourCompanyName. YourAppName -dir, buna görə də mənim vəziyyətimdə com. MatthewHallberg. PortalTest kimi bir şey edirəm.

Addım 2: Səhnəni qurun

Səhnəni qurun
Səhnəni qurun

Əvvəlcə sola baxın və "GeneratePlanes" adlı oyun obyektini tapın. Vurğulandıqda, indi sağa baxın və aradan buraxmaq üçün onay qutusuna vurun. Bu şəkildə, ARKit yerüstü bir təyyarə algıladığında yaranan çirkin mavi kvadratlara sahib deyilik. Sonrakı "RandomCube" oyun obyektini silin, çünki bunu səhnəmizdə görmək istəmirik.

İndi əvvəlcə portalımızın qapısını yaratmalıyıq. "HitCubeParent" in uşağı olan kubu silin. Sağ vurun və boş oyun obyekti yarat seçin. Yenidən "Portal" adlandırın. İndi həmin obyektə sağ vurun və bir kub yaradın, bu onu portalın uşağı edəcək. Adını "PostLeft" adlandırın və bu portalımızın sol yazısı olacaq. X -i 1 -ə, y -yə 28 -ə, z -yə görə ölçəkləndirin. Doğru yazı üçün eyni şeyi edin. İndi üst postu yaradın və y -ni 14 -ə qədər ölçün. Bu tərəfə çevirin və digər yazıları birləşdirəcək şəkildə hərəkət etdirin. Bütün portal ölçüsünü 1,3 x 1,4 x 1 halına gətirin.

Google -a gedin və ağac və ya qabıq toxuması yazın. Bu şəkillərdən birini yükləyin və Birlikdəki aktivlər qovluğuna sürükləyin. İndi bu şəkli portalınızın bütün yazılarına sürükləyin.

Yenidən "Portal" obyektini vurun və sağdakı komponent əlavə et düyməsini basın. Buna "UnityARHitTestExample" skriptini əlavə edin. "Hit Transform" üçün boş bir yuva var, "HitCubeParent" obyektini həmin yuvaya sürükləyin.

Addım 3: Bəzi hissəciklər hazırlayaq

Bəzi hissəciklər hazırlayaq
Bəzi hissəciklər hazırlayaq

İndi portalımızın içərisində tüstü və üzən hissəcik effekti yaratmaq üçün Birlik Partikül sistemindən istifadə edəcəyik. Üst menyu çubuğundakı Aktivlərə, standart aktivlərə və idxal hissəcik sistemlərinə gedin.

Portalınızda iki boş oyun obyekti yaradın və birinə "SmokeParticles", digərinə "FloatingParticles" deyin.

Tüstü hissəciklərinə bir hissəcik sistemi komponenti əlavə edin.

Bu komponentin bir çox variantı var, ancaq bir cüt dəyişdirməliyik.

Başlanğıc rəngini təxminən 50% şəffaflıqla tünd mavi rəngə dəyişin. Emissiya nisbətini 100. İçərisində, radiusu yaradın.01. Altdakı işləmə hissəsində min ölçüsünü.8 və maksimum ölçüsünü 5 olaraq dəyişdirin. Material komponentində siyahıdan tüstü materialını seçin, amma bunu daha sonra dəyişəcəyik.

Üzən hissəciklər oyun obyektinə bir hissəcik sistemi əlavə edin və emissiyanı 500 olaraq təyin edin. Başlama müddətini 2, radiusu 10, minimum hissəcik ölçüsünü.01 və maksimum hissəcik ölçüsünü.015 olaraq təyin edin. Materialı indiyə qədər standart hissəcik olaraq təyin edin.

Nəhayət, hər iki oyun obyektini götürün və x -də 90 dərəcə döndərin və havaya qaldırın, beləliklə portal qapısına buraxın.

Addım 4: hissəciklərin yavaşlaması

Hissəcikləri Yavaşlatmaq
Hissəcikləri Yavaşlatmaq

Bu hissəciklərin geniş bir ərazini əhatə etməsini istədiyimiz üçün yavaş hərəkət etdiyimiz üçün öz nümunə funksiyamızı yaratmalıyıq. Buna görə aktivlər qovluğuna sağ vurun və yeni bir C# skripti yaradın və "ParticleSample" adlandırın. Bu kodu kopyalayın və yapışdırın:

System. Collections istifadə;

System. Collections. Generic istifadə edərək; UnityEngine istifadə edərək; ictimai sinif ParticleSample: MonoBehaviour {private ParticleSystem ps; // Başlatmaq üçün istifadə edin void Start () {ps = GetComponent (); StartCoroutine (SampleParticleRoutine ()); } IEnumerator SampleParticleRoutine () {var main = ps.main; main.simulationSpeed = 1000f; ps. Play (); yeni WaitForSeconds qaytarma (.1f); main.simulationSpeed =.05f; }}

İndi bu skripti hissəcik sistemi oyun obyektlərinizin hər birinə sürükləyin.

Addım 5: Portal Yarat

Portal yaradılır!
Portal yaradılır!

İndi portal yaratmalıyıq, buna görə portal oyun obyektinə sağ vurun və dördlük yaradın. Bütün portalı əhatə edəcək şəkildə dördlüyü ölçün, bu portal pəncərəmiz olacaq. Əlavə etməyimiz lazım olan ilk şey portal shaderdir, bu, yalnız başqa xüsusi bir şader ilə obyektləri göstərəcəkdir. Aktivlər qovluğuna sağ vurun və yeni işıqlandırılmamış bir şader yaradın. Oradakı hər şeyi çıxarın və bu kodu yapışdırın:

Shader "Portal/portalWindow"

{SubShader {Colormask Zwrite 0 Stencil {Ref 1 Pass əvəz} Pass {}}}

Hiyerarşiyə sağ vurun və yeni bir material yaradın, PortalWindowMat adlandırın, bu materialın açılan hissəsində portal hissəsini tapın və portal pəncərəsini seçin. Bu materialı portal dördlüyünə sürükləyin.

Addım 6: Particle Shaders

Partikül Shaders
Partikül Shaders

Aktivlər qovluğuna yenidən sağ vurun və yeni bir şader yaradın. Portalın içərisinə daxil olan hissəciklər üçün kölgələr düzəltməliyik. Bütün kodu bununla əvəz edin:

Shader "Portal/hissəciklər" {

Xüsusiyyətlər {_TintColor ("Ton Rəngi", Rəng) = (0.5, 0.5, 0.5, 0.5) _MainTex ("Parçacıq Doku", 2D) = "ağ" {} _InvFade ("Yumşaq hissəciklər faktoru", Aralıq (0.01, 3.0)) = 1.0 _Stencil ("stencil", int) = 6} Kateqoriya {Etiketlər {"Sıra" = "Şəffaf" "IgnoreProjector" = "Doğru" "RenderType" = "Şəffaf" "PreviewType" = "Təyyarə"} SrcAlpha OneMinusSrcAlpha ColorMask RGB İşıqlandırma ZWrite Off SubShader {Stencil {Ref 1 Comp [_Stencil]} Pass {CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #pragma multi_compile_particles #pragma multi_compile_fog #Cincin2 "Include" Unclude " sabit4 _TintColor; struktur appdata_t {float4 vertex: POSITION; sabit4 rəng: COLOR; float2 texcoord: TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID}; v2f strukturu {float4 vertex: SV_POSITION; sabit4 rəng: COLOR; float2 texcoord: TEXCOORD0; UNITY_FOG_COORDS (1) #ifdef SOFTPARTICLES_ON float4 projPos: TEXCOORD2; #endif UNITY_VERTEX_OUTPUT_STEREO}; float4 _MainTex_ST; v2f vert (appdata_t v) {v2f o; UNITY_SETUP_INSTANCE_ID (v); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO (o); o.vertex = UnityObjectToClipPos (v.vertex); #ifdef SOFTPARTICLES_ON o.projPos = ComputeScreenPos (o.vertex); COMPUTE_EYEDEPTH (o.projPos.z); #endif o.color = v.color * _TintColor; o.texcoord = TRANSFORM_TEX (v.texcoord, _MainTex); UNITY_TRANSFER_FOG (o, o.vertex); qayıt o; } UNITY_DECLARE_DEPTH_TEXTURE (_CameraDepthTexture); float _InvFade; fixed4 frag (v2f i): SV_Target {#ifdef SOFTPARTICLES_ON float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ (_CameraDepthTexture, UNITY_PROJ_COORD (i.projPos)))); float hissəsiZ = i.projPos.z; float solması = doymuş (_InvFade * (sceneZ-partZ)); i.color.a *= solğun; #endif fixed4 col = 2.0f * i.color * tex2D (_MainTex, i.texcoord); UNITY_APPLY_FOG (i.fogCoord, col); qayıt col; } ENDCG}}}}

Biri portalSmoke və biri portalParticles adlı iki yeni material yaradın.

Hər biri üçün, aşağıdan aşağıya, portallarda, hissəciklərdə bu shader seçin. Tüstü hissəcikləri üçün tüstü toxuması, hissəciklər üçün isə hissəcik toxuması seçilir. Tüstünün rəngini təxminən 50% şəffaflıqla tünd mavi rəngə dəyişin. Portalınızdakı hər bir hissəcik sisteminin işləmə komponentinə gedin və yeni hazırladığımız materialları seçin.

Addım 7: Skybox yaradın

Skybox yaradın
Skybox yaradın

İndi həqiqətən tərs bir görünüş yaratmaq üçün hər şeyi tünd mavi rəngə boyamalıyıq. Bunun üçün şəffaf bir göy qutusu istifadə edəcəyik, buna görə yeni bir kölgə düzəldin və bu kodu yapışdırın:

Shader "Portal/portalSkybox" {

Xüsusiyyətlər {_Tint ("Ton Rəngi", Rəng) = (.5,.5,.5,.5) [Qamma] _Pozlama ("Ekspozisiya", Aralıq (0, 8)) = 1.0 _Döndürmə ("Dönmə", Aralıq) (0, 360)) = 0 [NoScaleOffset] _Tex ("Cubemap (HDR)", Cube) = "boz" {} _Stencil ("StencilNum", int) = 6} SubShader {Tags {"Queue" = "Background" "RenderType" = "Background" "PreviewType" = "Skybox"} ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Stencil {Ref 1 Comp [_Stencil]} Pass {CGPROGRAM #pragma vertex vert #pragma fragment fragment #pragma target 2.0CClude.cginc "samplerCUBE _Tex; yarım4 _Tex_HDR; half4 _Tint; yarı _ Maruz qalma; float _Döndürmə; float3 RotateAroundYInDegrees (float3 vertex, float dərəcə) {float alfa = dərəcə * UNITY_PI / 180.0; üzmək sina, cosa; Sincos (alfa, sina, cosa); float2x2 m = float2x2 (cosa, -sina, sina, cosa); qayıt float3 (mul (m, vertex.xz), vertex.y).xzy; } struktur appdata_t {float4 vertex: POSITION; UNITY_VERTEX_INPUT_INSTANCE_ID}; v2f strukturu {float4 vertex: SV_POSITION; float3 texcoord: TEXCOORD0; UNITY_VERTEX_OUTPUT_STEREO}; v2f vert (appdata_t v) {v2f o; UNITY_SETUP_INSTANCE_ID (v); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO (o); float3 döndürülmüş = RotateAroundYInDegrees (v.vertex, _Rotation); o.vertex = UnityObjectToClipPos (döndürülmüş); o.texcoord = v.vertex.xyz; qayıt o; } fixed4 frag (v2f i): SV_Target {half4 tex = texCUBE (_Tex, i.texcoord); yarım3 c = DecodeHDR (tex, _Tex_HDR); c = c * _Tint.rgb * birlik_ColorSpaceDouble.rgb; c *= _Pozlama; yarısını qaytarmaq4 (c,.5); } ENDCG}} Fallback Off}

İndi yeni bir Skybox materialı yaradın, ona "PortalSkybox" deyin və portal menyusundan bu portalSkybox shader seçin. Üstdəki Pəncərə, İşıqlandırma bölməsinə keçin və yeni yaratdığımız bu göy qutusunu seçin. Əsas kameraya gedin və göy qutusuna aydın bayraqlar qoyun. Buradaykən toqquşmaları aşkar etmək üçün kameramıza bəzi komponentlər əlavə edək. Kameraya sərt cisim komponenti əlavə edin və cazibə qüvvəsinin istifadəsini yoxlayın. Bir qutu çarpazlayıcı əlavə edin və tetikleyiciyi yoxlayın. Qutunu vuranların ölçüsünü edin.5 x 1 x 4. Kameradakı kəsmə təyyarəsini.01 olaraq təyin edin.

Addım 8: Portal Məntiqi

Portal məntiqi
Portal məntiqi

Etməyimiz lazım olan son şey portalımızı idarə edən məntiq yaratmaqdır. Yeni bir C# skript yaradın və ona PortalController deyin.

System. Collections istifadə;

System. Collections. Generic istifadə edərək; UnityEngine istifadə edərək; ad sahəsi UnityEngine. XR.iOS {ümumi sinif PortalController: MonoBehaviour {ictimai Material materialları; ictimai MeshRenderer meshRenderer; ictimai UnityARVideo UnityARVideo; private bool isInside = false; xüsusi bool isOutside = doğru; // Başlatmaq üçün bunu istifadə edin void Start () {OutsidePortal (); } void OnTriggerStay (Collider col) {Vector3 playerPos = Camera.main.transform.position + Camera.main.transform.forward * (Camera.main.nearClipPlane * 4); if (transform. InverseTransformPoint (playerPos).z <= 0) {if (isOutside) {isOutside = false; isInside = doğru; InsidePortal (); }} başqa {əgər (isInside) {isInside = yanlış; isOutside = doğru; OutsidePortal (); }}} void OutsidePortal () {StartCoroutine (DelayChangeMat (3)); } void InsidePortal () {StartCoroutine (DelayChangeMat (6)); } IEnumerator DelayChangeMat (int stencilNum) {UnityARVideo.shouldRender = false; yeni WaitForEndOfFrame () qaytarılması; meshRenderer.enabled = yalan; foreach (Materiallarda material mat) {mat. SetInt ("_Stencil", stencilNum); } gəlir yeni WaitForEndOfFrame () qaytar; meshRenderer.enabled = doğru; UnityARVideo.shouldRender = doğru; }}}

Bu yeni skripti portal pəncərəsinə sürükləyin. Kameramızdakı çarpazlayıcı portal pəncərəsi ilə toqquşduqda bu, bizi portalın içərisinə və xaricinə keçirəcək. İndi bütün materialları dəyişdirən funksiyada ARkit plagininə çərçivəni göstərməməyi söyləyirik, buna görə əsas kameraya keçin və UnityARVideo skriptini açın. Yuxarıda ümumi bir bool yaradın və onu həqiqətə bərabər edin. Aşağıdakı OnPreRender () funksiyasında hər şeyi if ifadəsinə sarın, içərisində hər şey yalnız shouldRender doğru olarsa işləyəcək. Bütün skript bu kimi görünməlidir:

Sistemdən istifadə;

System. Runtime. InteropServices istifadə; UnityEngine istifadə edərək; UnityEngine. Rendering istifadə edərək; ad məkanı UnityEngine. XR.iOS {ictimai sinif UnityARVideo: MonoBehaviour {ictimai Material m_ClearMaterial; [HideInInspector] ictimai bool olmalıdırRender = doğru; xüsusi CommandBuffer m_VideoCommandBuffer; xüsusi Texture2D _videoTextureY; xüsusi Texture2D _videoTextureCbCr; özəl Matrix4x4 _displayTransform; xüsusi bool bCommandBufferInitialized; public void Start () {UnityARSessionNativeInterface. ARFrameUpdatedEvent += UpdateFrame; bCommandBufferInitialized = yalan; } void UpdateFrame (UnityARCamera cam) {_displayTransform = new Matrix4x4 (); _displayTransform. SetColumn (0, cam.displayTransform.column0); _displayTransform. SetColumn (1, cam.displayTransform.cütlə1); _displayTransform. SetColumn (2, cam.displayTransform.cütlə2); _displayTransform. SetColumn (3, cam.displayTransform.column3); } void InitializeCommandBuffer () {m_VideoCommandBuffer = new CommandBuffer (); m_VideoCommandBuffer. Blit (null, BuiltinRenderTextureType. CurrentActive, m_ClearMaterial); GetComponent (). AddCommandBuffer (CameraEvent. BeforeForwardOpaque, m_VideoCommandBuffer); bCommandBufferInitialized = doğru; } void OnDestroy () {GetComponent (). RemoveCommandBuffer (CameraEvent. BeforeForwardOpaque, m_VideoCommandBuffer); UnityARSessionNativeInterface. ARFrameUpdatedEvent -= UpdateFrame; bCommandBufferInitialized = yalan; } #if! UNITY_EDITOR ictimai boşluğu OnPreRender () {if (shouldRender) {ARTextureHandles handles = UnityARSessionNativeInterface. GetARSessionNativeInterface (). GetARVideoTextureHandles (); if (handles.textureY == System. IntPtr. Zero || handles.textureCbCr == System. IntPtr. Zero) {qayıt; } if (! bCommandBufferInitialized) {InitializeCommandBuffer (); } Qətnamə currentResolution = Screen.currentResolution; // Texture Y if (_videoTextureY == null) {_videoTextureY = Texture2D. CreateExternalTexture (currentResolution.width, currentResolution.height, TextureFormat. R8, false, false, (System. IntPtr) handles.textureY); _videoTextureY.filterMode = FilterMode. Bilinear; _videoTextureY.wrapMode = TextureWrapMode. Repeat; m_ClearMaterial. SetTexture ("_ textureY", _videoTextureY); } // Doku CbCr if (_videoTextureCbCr == null) {_videoTextureCbCr = Texture2D. CreateExternalTexture (currentResolution.width, currentResolution.height, TextureFormat. RG16, false, false, (System. IntPtr) hands.textureCb) _videoTextureCbCr.filterMode = FilterMode. Bilinear; _videoTextureCbCr.wrapMode = TextureWrapMode. Repeat; m_ClearMaterial. SetTexture ("_ textureCbCr", _videoTextureCbCr); } _videoTextureY. UpdateExternalTexture (handles.textureY); _videoTextureCbCr. UpdateExternalTexture (handles.textureCbCr); m_ClearMaterial. SetMatrix ("_ DisplayTransform", _displayTransform); }} #else public boşluğu SetYTexure (Texture2D YTex) {_videoTextureY = YTex; } ümumi boşluq SetUVTexure (Texture2D UVTex) {_videoTextureCbCr = UVTex; } ümumi boşluq OnPreRender () {if (! bCommandBufferInitialized) {InitializeCommandBuffer (); } m_ClearMaterial. SetTexture ("_ textureY", _videoTextureY); m_ClearMaterial. SetTexture ("_ textureCbCr", _videoTextureCbCr); m_ClearMaterial. SetMatrix ("_ DisplayTransform", _displayTransform); } #endif}}

Addım 9: Demək olar ki, bitdi

Demək olar ki, bitdi!
Demək olar ki, bitdi!

Nəhayət, ekranı tıkladıqda və portalı yerləşdirdiyimiz zaman onun həmişə bizimlə üzləşməsini istəyirik. Bunu etmək üçün portaldakı "UnityARHitTestExample" skriptinə gedin. İçindəki hər şeyi bununla əvəz edin:

Sistemdən istifadə;

System. Collections. Generic istifadə edərək; ad sahəsi UnityEngine. XR.iOS {ictimai sinif UnityARHitTestExample: MonoBehaviour {ictimai Transform m_HitTransform; ictimai float maxRayDistance = 30.0f; ictimai LayerMask collisionLayer = 1 <0) {foreach (var hitResult in hitResults) {Debug. Log ("Vuruldu!"); m_HitTransform.position = UnityARMatrixOps. GetPosition (hitResult.worldTransform); m_HitTransform.rotation = UnityARMatrixOps. GetRotation (hitResult.worldTransform); Debug. Log (string. Format ("x: {0: 0. ######} y: {1: 0. ######} z: {2: 0. ###### } ", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z)); Vector3 CurrAngle = transform.eulerAngles; transform. LookAt (Camera.main.transform); transform.eulerAngles = yeni Vector3 (CurrAngle.x, transform.eulerAngles.y, currAngle.z); doğru qayıtmaq; }} false qaytar; } // Yeniləmə çərçivə başına bir dəfə çağırılır void Update () {#if UNITY_EDITOR // bu skriptdən yalnız redaktor tərəfində istifadə edəcəyik, halbuki (Input. GetMouseButtonDown (0))) {Ray ray = Camera.main. ScreenPointToRay (Input.mousePosition); RaycastHit vurdu; // Plugin tərəfindən yaradılan təyyarə toqquşucu oyun obyektlərindən birini vurmağa çalışacağıq // ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent ilə HitTest -ə zəng vurmağa bənzər şəkildə təsirli olarsa (Physics. Raycast (ray, out hit, maxRayDistance, collisionLayer)) {// əlaqə nöqtəsindən mövqe əldə edəcəyik m_HitTransform.position = hit.point; Debug. Log (string. Format ("x: {0: 0. ######} y: {1: 0. ######} z: {2: 0. ###### } ", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z)); // və düzbucaqlı m_HitTransform.rotation = hit.transform.rotation; }} #else if (Input.touchCount> 0 && m_HitTransform! = null) {var touch = Input. GetTouch (0); if (touch.phase == TouchPhase. Began || touch.phase == TouchPhase. Moved) {var screenPosition = Camera.main. ScreenToViewportPoint (touch.position); ARPoint nöqtəsi = yeni ARPoint {x = screenPosition.x, y = screenPosition.y}; // prioritize reults növləri ARHitTestResultType resultTypes = {ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent // istifadə etmək istəyirsinizsə, sonsuz təyyarələri istifadə bu: //ARHitTestResultType. ARHitTestResultTypeExistingPlane, ARHitTestResultType. ARHitTestResultTypeHorizontalPlane, ARHitTestResultType. ARHitTestResultTypeFeaturePoint}; foreach (ARHitTestResultType resultType in resultTypes) {if (HitTestWithResultType (point, resultType)) {return; }}}} #endif}}}

Addım 10: Tətbiqi Telefonunuza qoyun

Tətbiqi Telefonunuza qoyun!
Tətbiqi Telefonunuza qoyun!

Nəhayət işimiz bitdi. Dosyaya gedin, parametrləri qurun və qurmağı basın. Xcode açın və quruluşdan yaradılan qovluğu seçin. İnkişaf qrupunuzu seçin və tətbiqini telefonunuza qoyun! Ehtiyaclarınıza uyğun olaraq hissəciklərin və göy qutusunun rənglərini dəyişdirmək istəyə bilərsiniz. Suallarınız varsa şərhlərdə bildirin və baxdığınız üçün təşəkkürlər!

Tövsiyə: