Përmbajtje:
- Hapi 1: Filloni një Projekt të Ri Uniteti
- Hapi 2: Vendosni Skenën
- Hapi 3: Le të bëjmë disa grimca
- Hapi 4: Ngadalësimi i grimcave
- Hapi 5: Krijimi i Portalit
- Hapi 6: Shaders Particle
- Hapi 7: Krijoni Skybox
- Hapi 8: Logjika e Portalit
- Hapi 9: Pothuajse U krye
- Hapi 10: Vendosni aplikacionin në telefonin tuaj
Video: Portali AR Përmbysur Nga Gjërat e Huaja: 10 hapa (me fotografi)
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Ky Instructable do të kalojë përmes krijimit të një aplikacioni celular të realitetit të shtuar për iPhone me një portal që çon në përmbysjen nga Gjërat e Huaja. Mund të hyni brenda portalit, të shëtisni dhe të ktheheni. Çdo gjë brenda portalit mund të shihet vetëm përmes portalit derisa të hyni brenda. Sapo të hyni brenda, gjithçka do të paraqitet kudo, derisa të ktheheni në botën e vërtetë. Ne do të përdorim motorin e lojërave video Unity 3D me shtojcën Apple ARKit. I gjithë programi kompjuterik që do të përdorim mund të shkarkohet dhe përdoret falas. Nuk keni nevojë të jeni ekspert për ta ndjekur, ne do të kalojmë në çdo hap!
Hapi 1: Filloni një Projekt të Ri Uniteti
Së pari, shkarkoni Unity3D dhe sigurohuni që të instaloni skedarët e ndërtuar për platformën IOS. Ju gjithashtu do të duhet të shkarkoni Xcode dhe të regjistroheni për një llogari zhvilluesi falas të mollës. IPhone juaj gjithashtu do të duhet të funksionojë IOS 11 ose më i lartë. Nga sot më 5 shkurt 2018, IOS 11.3 është jashtë, por xCode 9.2 nuk ka ende skedarë mbështetës për të. Pra, nëse po përdorni versionin më të fundit të IOS, sigurohuni që të shkarkoni versionin më të fundit beta të Xcode nga Apple. Developer.com.
Pasi të keni të gjitha programet e nevojshme, hapni Unity dhe filloni një projekt të ri, quajeni si të doni. Ne do të kemi nevojë për shtojcën Apple ARKit në mënyrë që të mund të përdorim kamerën e telefonit tonë për të zbuluar terrenin dhe të vendosë objekte në dysheme. Le ta importojmë atë tani duke shkuar në skedën Dyqani i Aseteve dhe kërkoni "ARKit". Ju do të duhet të krijoni një llogari falas Unity nëse nuk e keni tashmë, pastaj klikoni import për të marrë shtojcën.
Shkoni te dosja e shembujve në dosjen ARKit dhe gjeni "UnityARKitScene". Klikoni dy herë atë për ta hapur. Ne do ta përdorim këtë skenë si një pikënisje dhe do të ndërtojmë nga këtu. Kjo skenë si parazgjedhje do t'ju lejojë të zbuloni tokën dhe kur prekni ekranin, një kub do të vendoset në atë pozicion.
Le të marrim së pari cilësimet tona të ndërtimit në katror, në mënyrë që të mos harrojmë ta bëjmë më vonë. Klikoni skedarin, krijoni cilësimet dhe hiqni të gjitha skenat nga ajo listë. Klikoni shtoni skena të hapura për të shtuar atë aktuale. Gjëja e fundit që duhet të vendosim këtu është që cilësimet e luajtësit të zbresin në paketën identifikuese dhe formati për këtë varg është com. YourCompanyName. YourAppName, kështu që në rastin tim unë bëj diçka si com. MatthewHallberg. PortalTest.
Hapi 2: Vendosni Skenën
Së pari hidhini një sy në të majtë dhe gjeni objektin e lojës të quajtur "GeneratePlanes". Me atë të theksuar, shikoni nga e djathta tani dhe klikoni në kutinë e kontrollit për ta çaktivizuar atë. Në këtë mënyrë ne nuk kemi katrorët e shëmtuar blu që krijohen kur ARKit zbulon një rrafsh tokësor. Tjetra fshini objektin e lojës "RandomCube" sepse ne nuk duam ta shohim atë në skenën tonë.
Tani ne duhet së pari të krijojmë portën tonë të portës. Fshini kubin që është fëmijë i "HitCubeParent". Klikoni me të djathtën dhe zgjidhni krijimin e një objekti të zbrazët të lojës. Riemërtojeni atë "Portal". Tani klikoni me të djathtën mbi atë objekt dhe krijoni një kub, kjo do ta bëjë atë fëmijë të portalit. Riemërtojeni atë "PostLeft" dhe ky do të jetë postimi i majtë i portalit tonë. Shkallëzojeni atë kështu që x është 1 y është 28 dhe z është një. Bëni të njëjtën gjë për postimin e duhur. Tani krijoni postimin e parë dhe shkallëzoni y në 14. Kthejeni këtë anash dhe lëvizeni atë në mënyrë që të lidhë shtyllat e tjera. Bëni të gjithë shkallën e portalit 1.3 x 1.4 x 1.
Shkoni në google dhe shkruani në cilësi druri ose lëvore. Shkarkoni një nga ato imazhe dhe tërhiqeni atë në dosjen e pasurive tuaja në Unity. Tani tërhiqeni atë imazh në të gjitha postimet tuaja në portal.
Klikoni përsëri në objektin "Portali" dhe klikoni në shtimin e përbërësit në të djathtë. Shtoni skriptin "UnityARHitTestExample" në të. Ka një vend të zbrazët atje për "Hit Transform", tërhiqni objektin "HitCubeParent" në atë vend.
Hapi 3: Le të bëjmë disa grimca
Tani ne do të përdorim sistemin Unity Particle për të bërë një efekt tymi dhe grimca lundruese për brenda portalit tonë. Shkoni te Asetet në shiritin e menusë së sipërme, asetet standarde dhe importoni sisteme grimcash.
Krijoni dy objekte të zbrazëta të lojës brenda portalit tuaj dhe quani njërën "SmokeParticles" dhe tjetrën "FloatingParticles".
Shtoni një përbërës të sistemit të grimcave në grimcat e tymit.
Ky komponent ka një mori opsionesh, por ne vetëm duhet të ndryshojmë një çift.
Ndryshoni ngjyrën e fillimit në diçka blu të errët me rreth 50% transparencë. Bëni shkallën e emetimit 100. Brenda formës, bëni rrezen.01. Në pjesën e interpretuesit në fund ndryshoni madhësinë min në.8 dhe madhësinë maksimale në 5. Në përbërësin material thjesht zgjidhni materialin e tymit nga lista, por ne do ta ndryshojmë këtë më vonë.
Shtoni një sistem grimcash në objektin e lojës me grimca lundruese dhe vendosni emetimin në 500. Vendosni jetëgjatësinë e fillimit në 2, rreze në 10, madhësinë e grimcave min në.01, dhe madhësinë maksimale të grimcave në.015. Vendoseni materialin në grimcën e paracaktuar tani për tani.
Më në fund merrni të dy objektet e lojës dhe rrotulloni ato me 90 gradë në x dhe ngrini lart në ajër në mënyrë që ata të lëshojnë poshtë në hyrjen e portalit.
Hapi 4: Ngadalësimi i grimcave
Meqenëse ne duam që këto grimca të mbulojnë një zonë të madhe, por gjithashtu të lëvizin ngadalë, ne duhet të krijojmë funksionin tonë të mostrës. Pra, klikoni me të djathtën në dosjen e aseteve dhe krijoni një skript të ri C# dhe quajeni atë "ParticleSample". Kopjoni dhe ngjisni në këtë kod:
duke përdorur System. Collection;
duke përdorur System. Collections. Generic; duke përdorur UnityEngine; klasa publike ParticleSample: MonoBehaviour {private ParticleSystem ps; // Përdoreni këtë për inicimin e pavlefshëm Start () {ps = GetComponent (); StartCoroutine (SampleParticleRoutine ()); } IEnumerator SampleParticleRoutine () {var main = ps.main; main.simulationSpeed = 1000f; ps. Luaj (); kthimi i rendimentit të ri WaitForSeconds (.1f); kryesore.simulimiShpejtësia =.05f; }}
Tani tërhiqeni këtë skenar në secilën prej objekteve të lojës tuaj të sistemit të grimcave.
Hapi 5: Krijimi i Portalit
Tani ne duhet të krijojmë portalin, kështu që klikoni me të djathtën në objektin e lojës së portalit dhe krijoni një kuadrat. Shkallëzoni kuadratin në mënyrë që të mbulojë të gjithë portalin, kjo do të bëhet dritarja jonë e portalit. Gjëja e parë që duhet të shtojmë në të është shaderi i portalit, kjo do të japë vetëm objekte me një mbrojtës tjetër specifik mbi to. Klikoni me të djathtën në dosjen e aseteve dhe krijoni një mbrojtës të ri të ndriçuar. Hiqni gjithçka atje dhe ngjisni në këtë kod:
Shader "Portali/portalWindow"
{SubShader {Zwrite off Colormask 0 cull off Stencil {Ref 1 Pass zëvendësoni} Kaloni {}}}
Klikoni me të djathtën në hierarki dhe krijoni një material të ri, quajeni PortalWindowMat, në listën zbritëse për këtë material gjeni pjesën e portalit dhe zgjidhni dritaren e portalit. Zvarriteni këtë material në kuadratin tuaj të portalit.
Hapi 6: Shaders Particle
Klikoni me të djathtën përsëri në dosjen e aseteve dhe krijoni një mbrojtës të ri. Ne duhet të bëjmë shade për grimcat që hyjnë brenda portalit. Zëvendësoni të gjithë kodin me këtë:
Shader "Portali/Grimcat" {
Karakteristikat {_TintColor ("Ngjyra e Ngjyrës", Ngjyra) = (0.5, 0.5, 0.5, 0.5) _MainTex ("Tekstura e grimcave", 2D) = "e bardhë" {} _InvFade ("Faktori i grimcave të buta", Gama (0.01, 3.0)) = 1.0 _Stencil ("stencil", int) = 6} Kategoria {Etiketat {"Queue" = "Transparente" "IgnoreProjector" = "E vërtetë" "RenderType" = "Transparente" "PreviewType" = "Aeroplan"} Përzierje SrcAlpha OneMinusSrcAlpha ColorMask RGB Cull Off Lighting Off 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 fikse4 _TintColor; strukt appdata_t {kulmi float4: POSITION; fikse4 ngjyra: NGJYRA; float2 texcoord: TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID}; strukt v2f {kulmi float4: SV_POSITION; fikse4 ngjyra: NGJYRA; 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.ngjyra * _TintColor; o.texcoord = TRANSFORM_TEX (v.texcoord, _MainTex); UNITY_TRANSFER_FOG (o, o.vertex); kthehu o; } UNITY_DECLARE_DEPTH_TEXTURE (_CameraDepthTexture); noton _InvFade; fikse4 fragment (v2f i): SV_Target {#ifdef SOFTPARTICLES_ON float stageZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ (_CameraDepthTexture, UNITY_PROJ_COORD (i.projPos))); float partZ = i.projPos.z; float zbehet = ngop (_InvFade * (skenaZ-partZ)); i.ngjyra.a *= zbehet; #endif fixed4 col = 2.0f * i.color * tex2D (_MainTex, i.texcoord); UNITY_APPLY_FOG (i.fogCoord, col); kthim kol; } ENDCG}}}}
Krijoni dy materiale të reja, një të quajtur portalSmoke dhe një të quajtur portalParticles.
Për secilën zgjidhni këtë shader, nga rënia poshtë, në portale, grimca. Për grimcat e tymit zgjidhni një strukturë tymi dhe për grimcat zgjidhni strukturën e grimcave. Ndryshoni ngjyrën e tymit në një blu të errët me rreth 50% transparencë. Shkoni te përbërësi i interpretuesit të secilit sistem grimcash në portalin tuaj dhe zgjidhni materialet e tyre përkatëse që sapo kemi krijuar.
Hapi 7: Krijoni Skybox
Tani për të krijuar vërtet pamjen e përmbysur, duhet të lyeni gjithçka me ngjyrë blu të errët. Për këtë ne do të përdorim një skybox transparent, kështu që bëni një shader të ri dhe ngjiteni në këtë kod:
Shader "Portali/portalSkybox" {
Karakteristikat {_Tint ("Ngjyra e Ngjyrës", Ngjyra) = (.5,.5,.5,.5) [Gama] _Ekspozimi ("Ekspozimi", Gama (0, 8)) = 1.0 _Rrotullimi ("Rrotullimi", Gama (0, 360)) = 0 [NoScaleOffset] _Tex ("Harta e Kubës (HDR)", Kubi) = "gri" {} _Stencil ("StencilNum", int) = 6} SubShader {Etiketat {"Queue" = "Sfond" "RenderType" = "Sfondi" "PreviewType" = "Skybox"} Fshij ZWrite Off Përzierja SrcAlpha OneMinusSrcAlpha Stencil {Ref 1 Comp [_Stencil]} Pass {CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target Uniteti 2.0 #includ.cginc "samplerCUBE _Tex; half4 _Tex_HDR; gjysmë4 _Tintë; gjysma _Ekspozimi; noton _Rrotullimi; float3 RotateAroundYInDegrees (kulmi float3, gradë notuese) {float alpha = gradë * UNITY_PI / 180.0; noton sina, cosa; sincos (alfa, sina, cosa); float2x2 m = float2x2 (cosa, -sina, sina, cosa); kthimi float3 (mul (m, kulm.xz), kulm.y).xzy; } strukt appdata_t {kulmi float4: POSITION; UNITY_VERTEX_INPUT_INSTANCE_ID}; strukt v2f {kulmi float4: 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 rrotullohet = RotateAroundYInDegrees (v.vertex, _Rotation); o.vertex = UnityObjectToClipPos (e rrotulluar); o.texcoord = v.vertex.xyz; kthehu o; } fix4 frag (v2f i): SV_Target {half4 tex = texCUBE (_Tex, i.texcoord); half3 c = Dekodimi HDR (tex, _Tex_HDR); c = c * _Tint.rgb * unit_ColorSpaceDouble.rgb; c *= _Ekspozimi; kthimi gjysmë4 (c,.5); } ENDCG}} Rikthimi joaktiv}
Tani krijoni një material të ri skybox, quajeni "PortalSkybox" dhe zgjidhni këtë portokallëzues portalSkybox nga menyja e portalit. Shkoni te Dritarja, Ndriçimi, në krye dhe zgjidhni këtë kutinë qiellore që sapo krijuam. Shkoni te kamera kryesore dhe vendosni flamuj të qartë në skybox. Ndërsa jemi këtu, le të shtojmë disa përbërës në kamerën tonë, në mënyrë që të zbulojmë përplasjet. Shtoni një komponent të ngurtë të trupit në kamerë dhe hiqni zgjedhjen e përdorimit të gravitetit. Shtoni një përplasës kutish dhe kontrolloni nëse është shkas. Bëni madhësinë e përplasësve të kutisë.5 x 1 x 4. Vendosni planin e prerjes në kamerë në.01.
Hapi 8: Logjika e Portalit
Gjëja e fundit që duhet të bëjmë është të krijojmë logjikën që kontrollon portalin tonë. Krijoni një skript të ri C# dhe quajeni PortalController.
duke përdorur System. Collection;
duke përdorur System. Collections. Generic; duke përdorur UnityEngine; namespace UnityEngine. XR.iOS {klasa publike PortalController: MonoBehaviour {materiale publike materiale; publik MeshRenderer meshRenderer; Uniteti publikARVideo UnityARVideo; bool privat isInside = false; bool privat isOutside = true; // Përdoreni këtë për inicimin e pavlefshëm 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; është brenda = e vërtetë; InsidePortal (); }} else {if (isInside) {isInside = false; ështëJashtë = e vërtetë; Jashtë Portal (); }}} void OutsidePortal () {StartCoroutine (DelayChangeMat (3)); } void InsidePortal () {StartCoroutine (DelayChangeMat (6)); } IEnumerator DelayChangeMat (int stencilNum) {UnityARVideo.shouldRender = false; kthimi i rendimentit të ri WaitForEndOfFrame (); meshRenderer.enabled = false; foreach (Material mat në materiale) {mat. SetInt ("_Stencil", stencilNum); } kthimi i rendimentit të ri WaitForEndOfFrame (); meshRenderer.enabled = e vërtetë; UnityARVideo.shouldRender = e vërtetë; }}}
Tërhiqeni këtë skenar të ri në dritaren e portalit tuaj. Kjo do të na kalojë brenda dhe jashtë portalit sa herë që përplasësi në kamerën tonë përplaset me dritaren e portalit. Tani në funksionin që ndryshon të gjitha materialet i themi shtojcës ARkit të mos e bëjë kuadrin, kështu që shkoni te kamera kryesore dhe hapni skriptin UnityARVideo. Krijoni një bool publik shouldRender në krye dhe vendoseni të barabartë me true. Poshtë në funksionin OnPreRender () mbështillni gjithçka në një deklaratë if ku gjithçka brenda do të funksionojë vetëm nëse shouldRender është e vërtetë. I gjithë skenari duhet të duket kështu:
duke përdorur Sistemin;
duke përdorur System. Runtime. InteropServices; duke përdorur UnityEngine; duke përdorur UnityEngine. Rendering; hapësira e emrave UnityEngine. XR.iOS {klasa publike UnityARVideo: MonoBehaviour {Materiali publik m_ClearMaterial; [HideInInspector] bool publik duhetRender = true; CommandBuffer privat m_VideoCommandBuffer; Texture2D _videoTextureY private; Texture2D _videoTextureCbCr private; private Matrix4x4 _displayTransform; bool privat bCommandBufferInializuar; zbrazëti publike Fillimi () {UnityARSessionNativeInterface. ARFrameUpdatedEvent += UpdateFrame; bCommandBufferInitialized = false; } void UpdateFrame (UnityARCamera cam) {_displayTransform = Matrix4x4 i ri (); _displayTransform. SetColumn (0, cam.displayTransform.column0); _displayTransform. SetColumn (1, cam.displayTransform.column1); _displayTransform. SetColumn (2, cam.displayTransform.column2); _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 = e vërtetë; } void OnDestroy () {GetComponent (). RemoveCommandBuffer (CameraEvent. BeforeForwardOpaque, m_VideoCommandBuffer); UnityARSessionNativeInterface. ARFrameUpdatedEvent -= UpdateFrame; bCommandBufferInitialized = false; } #if! UNITY_EDITOR void publik OnPreRender () {if (shouldRender) {ARTextureHandles handles = UnityARSessionNativeInterface. GetARSessionNativeInterface (). GetARVideoTextureHandles (); if (handles.textureY == System. IntPtr. Zero || handles.textureCbCr == System. IntPtr. Zero) {return; } if (! bCommandBufferInitialized) {InitializeCommandBuffer (); } Rezoluta aktualeResolution = Screen.currentResolution; // Tekstura Y nëse (_videoTextureY == null) {_videoTextureY = Texture2D. CreateExternalTexture (currentResolution.width, currentResolution.height, TextureFormat. R8, false, false, (System. IntPtr) trajton.textureY); _videoTextureY.filterMode = FilterMode. Bilinear; _videoTextureY.wrapMode = TextureWrapMode. Repeat; m_ClearMaterial. SetTexture ("_ cilësiY", _videoTextureY); } // Texture CbCr nëse (_videoTextureCbCr == null) {_videoTextureCbCr = Texture2D. CreateExternalTexture (currentResolution.width, currentResolution.height, TextureFormat. RG16, false, false, (System. Inttextr); _videoTextureCbCr.filterMode = FilterMode. Bilinear; _videoTextureCbCr.wrapMode = TextureWrapMode. Repeat; m_ClearMaterial. SetTexture ("_ cilësiCbCr", _videoTextureCbCr); } _videoTextureY. UpdateExternalTexture (trajton.teksturaY); _videoTextureCbCr. UpdateExternalTexture (trajton.textureCbCr); m_ClearMaterial. SetMatrix ("_ DisplayTransform", _displayTransform); }} #else zbrazëtira publike SetYTexure (Texture2D YTex) {_videoTextureY = YTex; } zbrazëtira publike SetUVTexure (Texture2D UVTex) {_videoTextureCbCr = UVTex; } void publik OnPreRender () {if (! bCommandBufferInitialized) {InitializeCommandBuffer (); } m_ClearMaterial. SetTexture ("_ cilësiY", _videoTextureY); m_ClearMaterial. SetTexture ("_ cilësiCbCr", _videoTextureCbCr); m_ClearMaterial. SetMatrix ("_ DisplayTransform", _displayTransform); } #endif}}
Hapi 9: Pothuajse U krye
Më në fund kur klikojmë në ekran dhe vendosim portalin ne duam që ai të na përballë gjithmonë. Për ta bërë këtë, shkoni te skripti "UnityARHitTestExample" në portal. Zëvendësoni gjithçka brenda me këtë:
duke përdorur Sistemin;
duke përdorur System. Collections. Generic; hapësira e emrave UnityEngine. XR.iOS {klasa publike UnityARHitTestExample: MonoBehaviour {public Transform m_HitTransform; noton publik maxRayDistance = 30.0f; public LayerMask collisionLayer = 1 <0) {foreach (var hitResult in hitResults) {Debug. Log ("U godit!"); 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; transformo. Shiko (Camera.main.transform); transform.eulerAngles = vektori i ri3 (currAngle.x, transform.eulerAngles.y, currAngle.z); kthehet e vërtetë; }} kthehu false; } // Përditësimi thirret një herë për kuadër të pavlefshëm Update () { #nëse UNITY_EDITOR // ne do ta përdorim këtë skript vetëm në anën e redaktuesit, megjithëse nuk ka asgjë që do ta pengonte atë të punonte në pajisje nëse (Input. GetMouseButtonDown (0)) {Ray ray = Camera.main. ScreenPointToRay (Input.mousePosition); RaycastHit goditi; // ne do të përpiqemi të godasim një nga objektet e lojës përplasëse aeroplani të krijuara nga shtojca // efektivisht e ngjashme me thirrjen e HitTest me ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent if (Physics. Raycast (ray, out hit, maxRayDistance, collisionLayer)) {// ne do të marrim pozicionin nga pika e kontaktit 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)); // dhe rrotullimi nga transformimi i përplasësit të rrafshit 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 (prekje.pozicion); Pika ARPoint = ARPoint i ri {x = screenPosition.x, y = screenPosition.y}; // Prioritet reults lloje ARHitTestResultType resultTypes = {ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent, // qoftë se ju doni të përdorni aeroplanët e pafund të përdorur këtë: //ARHitTestResultType. ARHitTestResultTypeExistingPlane, ARHitTestResultType. ARHitTestResultTypeHorizontalPlane, ARHitTestResultType. ARHitTestResultTypeFeaturePoint}; foreach (ARHitTestResultType resultType in resultTypes) {if (HitTestWithResultType (pika, resultType)) {return; }}}} #endif}}}
Hapi 10: Vendosni aplikacionin në telefonin tuaj
Më në fund mbaruam. Shkoni te skedari, krijoni cilësimet dhe klikoni në ndërtim. Hapni Xcode dhe zgjidhni dosjen që është krijuar nga krijimi. Zgjidhni ekipin tuaj të zhvillimit dhe vendosni aplikacionin në telefonin tuaj! Ju mund të dëshironi të ndryshoni ngjyrat e grimcave dhe skybox në mënyrë që t'i përshtaten nevojave tuaja. Më tregoni në komente nëse keni ndonjë pyetje dhe faleminderit për shikimin!