AR Portal sa Baliktad Mula sa Mga Bagay na Stranger: 10 Hakbang (na may Mga Larawan)
AR Portal sa Baliktad Mula sa Mga Bagay na Stranger: 10 Hakbang (na may Mga Larawan)

Video: AR Portal sa Baliktad Mula sa Mga Bagay na Stranger: 10 Hakbang (na may Mga Larawan)

Video: AR Portal sa Baliktad Mula sa Mga Bagay na Stranger: 10 Hakbang (na may Mga Larawan)
Video: lorna tolentino after 15 years in love pa rin sya kay daboy #throwback 2025, Enero
Anonim
Portal ng AR sa Baliktad Mula sa Mga Bagay na Stranger
Portal ng AR sa Baliktad Mula sa Mga Bagay na Stranger
Portal ng AR sa Baliktad Mula sa Mga Bagay na Stranger
Portal ng AR sa Baliktad Mula sa Mga Bagay na Stranger

Ang Instructable na ito ay dadaan sa paglikha ng isang augmented reality mobile app para sa iPhone na may isang portal na humahantong sa baligtad mula sa Stranger Things. Maaari kang pumasok sa loob ng portal, maglakad-lakad, at bumalik. Ang lahat sa loob ng portal ay makikita lamang sa pamamagitan ng portal hanggang sa maglakad ka sa loob. Kapag nasa loob na, ang lahat ay magri-render saanman, hanggang sa maglakad ka pabalik sa totoong mundo. Gagamitin namin ang engine ng video game ng Unity 3D gamit ang Apple ARKit plugin. Ang lahat ng software na gagamitin namin ay maaaring ma-download at magamit nang libre. Hindi mo kailangang maging dalubhasa upang sundin, dadaan kami sa bawat hakbang!

Hakbang 1: Magsimula ng isang Bagong Proyekto ng Unity

Magsimula ng isang Bagong Proyekto ng Unity
Magsimula ng isang Bagong Proyekto ng Unity

Una, i-download ang Unity3D at tiyaking mai-install ang mga build file para sa IOS platform. Kakailanganin mo ring mag-download ng Xcode at mag-sign up para sa isang libreng account ng developer ng mansanas. Ang iyong iPhone ay magkakaroon din upang magpatakbo ng IOS 11 o mas mataas. Tulad ng ngayon Febuary 5th 2018, ang IOS 11.3 ay wala na ngunit ang xCode 9.2 ay wala pang mga file ng suporta para dito. Kaya't kung nagpapatakbo ka ng pinakabagong bersyon ng IOS siguraduhing i-download ang pinakabagong bersyon ng Xcode beta mula sa Apple. Developer.com.

Kapag mayroon ka ng lahat ng kinakailangang mga programa, buksan ang Unity at magsimula ng isang bagong proyekto, tawagan ito kung ano ang gusto mo. Kakailanganin namin ang plugin ng Apple ARKit upang magamit namin ang camera ng aming telepono upang makita ang ground ng isang lugar na mga bagay sa sahig. I-import natin ito ngayon sa pamamagitan ng pagpunta sa tab na Asset Store at hanapin ang "ARKit". Kakailanganin mong lumikha ng isang libreng Unity account kung wala ka pa, pagkatapos ay i-click ang import upang makuha ang plugin.

Mag-navigate sa mga halimbawa ng folder sa folder ng ARKit at hanapin ang "UnityARKitScene." I-double click iyon upang buksan ito. Gagamitin namin ang eksenang ito bilang isang panimulang punto at magtayo mula rito. Ang eksenang ito sa pamamagitan ng default ay magbibigay-daan sa iyo upang makita ang lupa at kapag na-tap mo ang screen, isang kubo ay mailalagay sa posisyon na iyon.

Hinahayaan muna nating makuha ang aming mga setting ng build na parisukat upang hindi namin kalimutan na gawin ito sa ibang pagkakataon. Mag-click sa file, bumuo ng mga setting at alisin ang lahat ng mga eksena mula sa listahang iyon. I-click ang magdagdag ng bukas na mga eksena upang idagdag ang aming kasalukuyang isa. Ang huling bagay na kailangan naming i-set up dito ay sa mga setting ng player na bumaba sa bundle identifier at ang format para sa string na ito ay com. YourCompanyName. YourAppName, kaya sa aking kaso ay may ginagawa ako tulad ng com. MatthewHallberg. PortalTest.

Hakbang 2: I-set up ang Eksena

I-set up ang Eksena
I-set up ang Eksena

Tumingin muna sa kaliwa at hanapin ang object ng laro na tinatawag na "GeneratePlanes". Na naka-highlight, tumingin sa ngayon at i-click ang check box upang hindi ito paganahin. Sa ganitong paraan wala kaming pangit na asul na mga parisukat na nabuo kapag nakakita ang ARKit ng isang ground plan. Susunod na tanggalin ang object ng laro na "RandomCube" dahil hindi namin nais na makita iyon sa aming eksena.

Ngayon kailangan muna naming lumikha ng aming portal doorway. Tanggalin ang kubo na isang bata ng "HitCubeParent". Mag-right click at piliin ang lumikha ng walang laman na object ng laro. Palitan ang pangalan ng "Portal". Ngayon ay mag-right click sa object na iyon at lumikha ng isang cube, gagawin itong isang bata ng portal. Palitan ang pangalan ng "PostLeft" at ito ang kaliwang post ng aming portal. Sukatin ito upang ang x ay 1 ang y ay 28 at ang z ay iisa. Gawin ang parehong bagay para sa tamang post. Ngayon likhain ang tuktok na post at sukatin ang y hanggang 14. I-on ito patagilid at ilipat ito tulad na ito ay nag-uugnay sa iba pang mga post. Gawin ang buong sukat ng portal na 1.3 x 1.4 x 1.

Pumunta sa google at mag-type ng kahoy o texture ng kahoy. Mag-download ng isa sa mga imaheng iyon at i-drag ito sa iyong folder ng mga assets sa Unity. Ngayon i-drag ang imaheng iyon sa lahat ng iyong mga post sa portal.

Mag-click muli sa object na "Portal" at i-click ang magdagdag ng sangkap sa kanan. Idagdag ang script na "UnityARHitTestExample" dito. Mayroong walang laman na puwang doon para sa "Hit Transform", i-drag ang object na "HitCubeParent" sa slot na iyon.

Hakbang 3: Gumawa Tayo ng Ilang Particle

Gumawa Tayo ng Ilang Particle
Gumawa Tayo ng Ilang Particle

Ngayon ay gagamitin namin ang system ng Unity Particle upang makagawa ng usok at lumulutang na epekto ng maliit na butil para sa loob ng aming portal. Pumunta sa Mga Asset sa tuktok na menu bar, karaniwang mga assets, at mag-import ng mga system ng maliit na butil.

Lumikha ng dalawang walang laman na mga object ng laro sa loob ng iyong portal at tawagan ang isang "SmokeParticles" at ang isa pa ay "FloatingParticles."

Magdagdag ng isang bahagi ng system ng maliit na butil sa mga particle ng usok.

Ang sangkap na ito ay may isang pangkat ng mga pagpipilian ngunit kailangan lamang naming baguhin ang isang pares.

Baguhin ang kulay ng pagsisimula sa isang bagay na maitim na asul na may halos 50% transparency. Gawin ang rate ng emission 100. Sa loob ng hugis, gawin ang radius.01. Sa bahagi ng nag-render sa ibaba baguhin ang laki ng min sa.8 at laki ng max sa 5. Sa materyal na sangkap piliin lamang ang materyal na usok mula sa listahan, ngunit babaguhin natin ito sa paglaon.

Magdagdag ng isang sistema ng maliit na butil sa object ng laro na lumulutang na mga maliit na butil ngayon at itakda ang paglabas sa 500. Itakda ang pagsisimula ng buhay sa 2, radius sa 10, min na laki ng maliit na butil sa.01, at laki ng max na maliit na butil sa.015. Itakda ang materyal sa default na maliit na butil sa ngayon.

Panghuli kumuha ng parehong mga bagay sa laro at paikutin ang mga ito ng 90 degree sa x at itaas ang mga ito sa hangin upang sila ay nagpapalabas pababa sa portal ng pintuan.

Hakbang 4: Pagbagal ng Mga Particle

Pagbagal ng mga Particle
Pagbagal ng mga Particle

Dahil nais namin ang mga particle na ito upang masakop ang isang malaking lugar ngunit ilipat din mabagal kailangan namin upang lumikha ng aming sariling mga sample na function. Kaya't mag-right click sa folder ng mga assets at lumikha ng isang bagong script na C # at tawagan itong "ParticleSample." Kopyahin at i-paste sa code na ito:

gamit ang System. Collection;

gamit ang System. Collection. Generic; gamit ang UnityEngine; pampublikong klase ParticleSample: MonoBehaviour {pribadong ParticleSystem ps; // Use this for initialization void Start () {ps = GetComponent (); StartCoroutine (SampleParticleRoutine ()); } IEnumerator SampleParticleRoutine () {var main = ps.main; pangunahing.simulationSpeed = 1000f; ps. Play (); magbabalik ng ani ng bagong WaitForSeconds (.1f); pangunahing.simulationSpeed =.05f; }}

Ngayon i-drag ang script na ito sa bawat isa sa iyong mga object ng laro ng system ng maliit na butil.

Hakbang 5: Lumilikha ng Portal

Lumilikha ng Portal!
Lumilikha ng Portal!

Ngayon kailangan naming lumikha ng portal kaya mag-right click sa object ng laro ng portal at lumikha ng isang quad. Sukatin ang quad upang masakop nito ang buong portal, ito ay magiging aming portal window. Ang unang bagay na kailangan naming idagdag dito ay ang portal shader, maglalagay lamang ito ng mga bagay na may isa pang tukoy na shader sa kanila. Mag-right click sa folder ng mga assets at lumikha ng isang bagong hindi na-shader na shader. Alisin ang lahat doon at i-paste sa code na ito:

Shader "Portal / portalWindow"

{SubShader {Zwrite off Colormask 0 cull off Stencil {Ref 1 Pass replacement} Pass {}}}

Mag-right click sa hierarchy at lumikha ng isang bagong materyal, tawagan itong PortalWindowMat, sa dropdown para sa materyal na ito hanapin ang seksyon ng portal, at piliin ang portal window. I-drag ang materyal na ito sa iyong portal na quad.

Hakbang 6: Mga Particle Shaders

Mga Particle Shader
Mga Particle Shader

Mag-right click sa folder ng mga assets muli at lumikha ng isang bagong shader. Kailangan naming gawin ang mga shader para sa mga particle na pumapasok sa loob ng portal. Palitan ito ng lahat ng code:

Shader na "Portal / Particle" {

Mga Katangian {_TintColor ("Kulay ng Tint", Kulay) = (0.5, 0.5, 0.5, 0.5) _MainTex ("Particle Texture", 2D) = "puti" {} _InvFade ("Soft Particle Factor", Saklaw (0.01, 3.0)) = 1.0 _Stencil ("stencil", int) = 6} Kategoryang {Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane"} Blend SrcAlpha OneMinusSrcAlpha ColorMask RGB Cull Off Lighting Off ZWrite Off SubShader {Stencil {Ref 1 Comp [_Stencil]} Ipasa ang {CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #pragma multi_compile_particles #pragma multi_compile_fog #include "UnityCG.cg naayos4 _TintColor; struct appdata_t {float4 vertex: POSITION; naayos na 4 na kulay: Kulay; float2 texcoord: TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID}; struct v2f {float4 vertex: SV_POSITION; naayos na 4 na kulay: Kulay; 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); bumalik o; } UNITY_DECLARE_DEPTH_TEXTURE (_CameraDepthTexture); lumutang _InvFade; fix4 frag (v2f i): SV_Target {#ifdef SOFTPARTICLES_ON float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ (_CameraDepthTexture, UNITY_PROJ_COORD (i.projPos))); float partZ = i.projPos.z; float fade = saturate (_InvFade * (sceneZ-partZ)); i.kulay.a * = kumupas; #endif fix4 col = 2.0f * i.color * tex2D (_MainTex, i.texcoord); UNITY_APPLY_FOG (i.fogCoord, col); bumalik col; } ENDCG}}}}

Lumikha ng dalawang bagong materyales, isa na tinatawag na portalSmoke, at isa na tinatawag na portalParticles.

Para sa bawat isa piliin ang shader na ito, mula sa drop down, sa mga portal, mga particle. Para sa mga particle ng usok pumili ng isang texture ng usok at para sa mga maliit na butil piliin ang maliit na butil na texture. Palitan ang kulay ng usok sa isang mas maitim na asul na may halos 50% transparency. Pumunta sa bahagi ng renderer ng bawat system ng maliit na butil sa iyong portal at piliin ang kani-kanilang mga materyal na nilikha lamang namin.

Hakbang 7: Lumikha ng Skybox

Lumikha ng Skybox
Lumikha ng Skybox

Ngayon upang talagang likhain ang baligtad na uri ng hitsura kailangan nating maitim ang lahat ng madilim na asul. Para dito gagamitin namin ang isang transparent skybox kaya gumawa ng isang bagong shader at i-paste sa code na ito:

Shader "Portal / portalSkybox" {

Mga Katangian {_Tint ("Kulay ng Tint", Kulay) = (.5,.5,.5,.5) [Gamma] _Exposure ("Exposure", Saklaw (0, 8)) = 1.0 _Rotation ("Pag-ikot", Saklaw (0, 360)) = 0 [NoScaleOffset] _Tex ("Cubemap (HDR)", Cube) = "grey" {} _Stencil ("StencilNum", int) = 6} SubShader {Tags {"Queue" = "Background" "RenderType" = "Background" "PreviewType" = "Skybox"} Cull Off ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Stencil {Ref 1 Comp [_Stencil]} Ipasa ang {CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 # isama ang "UnityCG.cginc "samplerCUBE _Tex; kalahati4 _Tex_HDR; kalahati4 _Tint; kalahati _Exposure; float _Rotation; float3 RotateAroundYInDegrees (float3 vertex, float degrees) {float alpha = degrees * UNITY_PI / 180.0; float sina, cosa; sinsos (alpha, sina, cosa); float2x2 m = float2x2 (cosa, -sina, sina, cosa); bumalik float3 (mul (m, vertex.xz), vertex.y).xzy; } struct appdata_t {float4 vertex: POSITION; UNITY_VERTEX_INPUT_INSTANCE_ID}; struct v2f {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); rotat3 rotated = RotateAroundYInDegrees (v.vertex, _Rotation); o.vertex = UnityObjectToClipPos (paikutin); o.texcoord = v.vertex.xyz; bumalik o; } fix4 frag (v2f i): SV_Target {half4 tex = texCUBE (_Tex, i.texcoord); half3 c = DecodeHDR (tex, _Tex_HDR); c = c * _Tint.rgb * pagkakaisa_ColorSpaceDouble.rgb; c * = _Exposure; ibalik ang kalahati4 (c,.5); } ENDCG}} Fallback Off}

Lumikha ngayon ng isang bagong materyal na skybox, tawagan itong "PortalSkybox" at piliin ang portalSkybox shader mula sa menu ng portal. Pumunta sa Window, Lighting, sa tuktok at piliin ang skybox na nilikha namin. Pumunta sa pangunahing camera at itakda ang malinaw na mga flag sa skybox. Habang narito kami hinahayaan na magdagdag ng ilang mga bahagi sa aming camera upang makita namin ang mga banggaan. Magdagdag ng isang sangkap ng rigidbody sa camera at alisan ng check ang paggamit ng gravity. Magdagdag ng isang collider ng kahon at suriin ang ay nag-trigger. Gawin ang laki ng mga collider ng kahon.5 x 1 x 4. Itakda ang clipping plane sa camera sa.01.

Hakbang 8: Portic Logic

Portal Logic
Portal Logic

Ang huling bagay na kailangan nating gawin ay lumikha ng lohika na kumokontrol sa aming portal. Lumikha ng isang bagong script na C # at tawagan itong PortalController.

gamit ang System. Collection;

gamit ang System. Collection. Generic; gamit ang UnityEngine; namespace UnityEngine. XR.iOS {pampublikong klase PortalController: MonoBehaviour {publikong Materyal na mga materyales; pampublikong MeshRenderer meshRenderer; pampublikong UnityARVideo UnityARVideo; pribadong bool ayInside = false; pribadong bool ayOutside = totoo; // Use this for initialization void Start () {OutsidePortal (); } void OnTriggerStay (Collider col) {Vector3 playerPos = Camera.main.transform.position + Camera.main.transform.forward * (Camera.main.nearClipPlane * 4); kung (transform. InverseTransformPoint (playerPos).z <= 0) {if (isOutside) {isOutside = false; isInside = totoo; InsidePortal (); }} iba pa {kung (isInside) {isInside = false; isOutside = totoo; OutsidePortal (); }}} walang bisa OutsidePortal () {StartCoroutine (DelayChangeMat (3)); } walang bisa InsidePortal () {StartCoroutine (DelayChangeMat (6)); } IEnumerator DelayChangeMat (int stencilNum) {UnityARVideo.shouldRender = false; magbabalik ng ani ng bagong WaitForEndOfFrame (); meshRenderer.enabled = false; paunahan (Materyal na banig sa mga materyales) {mat. SetInt ("_Stencil", stencilNum); } magbabalik ng ani ng bagong WaitForEndOfFrame (); meshRenderer.enabled = true; UnityARVideo.shouldRender = totoo; }}}

I-drag ang bagong script sa iyong window ng portal. Ililipat ito sa amin sa at labas ng portal tuwing ang collider sa aming camera ay nakabangga sa window ng portal. Ngayon sa pagpapaandar na binabago ang lahat ng mga materyal na sinasabi namin sa plugin ng ARkit na huwag i-render ang frame, kaya pumunta sa pangunahing kamera at buksan ang script ng UnityARVideo. Lumikha ng isang pampublikong bool shouldRender sa tuktok at itakda itong katumbas ng totoo. Pababa sa pag-andar ng OnPreRender () na balutin ang lahat sa isang pahayag kung saan tatakbo lamang ang lahat sa loob kung ang shouldRender ay totoo. Ang buong script ay dapat magmukhang ganito:

gamit ang System;

gamit ang System. Runtime. InteropServices; gamit ang UnityEngine; gamit ang UnityEngine. Rendering; namespace UnityEngine. XR.iOS {public class UnityARVideo: MonoBehaviour {public Material m_ClearMaterial; [HideInInspector] public bool shouldRender = true; pribadong CommandBuffer m_VideoCommandBuffer; pribadong Texture2D _videoTextureY; pribadong Texture2D _videoTextureCbCr; pribadong Matrix4x4 _displayTransform; pribadong bool bCommandBufferInitialized; public void Start () {UnityARSessionNativeInterface. ARFrameUpdatedEvent + = UpdateFrame; bCommandBufferInitialized = false; } walang bisa ang UpdateFrame (UnityARCamera cam) {_displayTransform = bagong Matrix4x4 (); _displayTransform. SetColumn (0, cam.displayTransform.column0); _displayTransform. SetColumn (1, cam.displayTransform.column1); _displayTransform. SetColumn (2, cam.displayTransform.column2); _displayTransform. SetColumn (3, cam.displayTransform.column3); } walang bisa InitializeCommandBuffer () {m_VideoCommandBuffer = bagong CommandBuffer (); m_VideoCommandBuffer. Blit (null, BuiltinRenderTextureType. CurrentActive, m_ClearMaterial); GetComponent (). AddCommandBuffer (CameraEvent. BeforeForwardOpaque, m_VideoCommandBuffer); bCommandBufferInitialized = totoo; } void OnDestroy () {GetComponent (). DeleteCommandBuffer (CameraEvent. BeforeForwardOpaque, m_VideoCommandBuffer); UnityARSessionNativeInterface. ARFrameUpdatedEvent - = UpdateFrame; bCommandBufferInitialized = false; } #if! UNITY_EDITOR public void OnPreRender () {if (shouldRender) {ARTextureHandles handles = UnityARSessionNativeInterface. GetARSessionNativeInterface (). GETARVideoTextureHandles (); kung (handles.tearanceY == System. IntPtr. Zero || handles.tearanceCbCr == System. IntPtr. Zero) {return; } kung (! bCommandBufferInitialized) {InitializeCommandBuffer (); } Resolution currentResolution = Screen.currentResolution; // Texture Y if (_videoTextureY == null) {_videoTextureY = Texture2D. CreateExternalTexture (currentResolution.width, currentResolution.height, TextureFormat. R8, false, false, (System. IntPtr) humahawak.textY); _videoTextureY.filterMode = FilterMode. Bilinear; _videoTextureY.wrapMode = TextureWrapMode. Repeat; m_ClearMaterial. SetTexture ("_ textureY", _videoTextureY); } // Texture CbCr if (_videoTextureCbCr == null) {_videoTextureCbCr = Texture2D. CreateExternalTexture (currentResolution.width, currentResolution.height, TextureFormat. RG16, false, false, (System. IntPtr) handles.tearanceCbCr); _videoTextureCbCr.filterMode = FilterMode. Bilinear; _videoTextureCbCr.wrapMode = TextureWrapMode. Repeat; m_ClearMaterial. SetTexture ("_ textureCbCr", _videoTextureCbCr); } _videoTextureY. UpdateExternalTexture (humahawak.textY); _videoTextureCbCr. UpdateExternalTexture (handles.tearanceCbCr); m_ClearMaterial. SetMatrix ("_ DisplayTransform", _displayTransform); }} #else public void SetYTexure (Texture2D YTex) {_videoTextureY = YTex; } pampublikong walang bisa ang SetUVTexure (Texture2D UVTex) {_videoTextureCbCr = UVTex; } public void OnPreRender () {if (! bCommandBufferInitialized) {InitializeCommandBuffer (); } m_ClearMaterial. SetTexture ("_ textureY", _videoTextureY); m_ClearMaterial. SetTexture ("_ textureCbCr", _videoTextureCbCr); m_ClearMaterial. SetMatrix ("_ DisplayTransform", _displayTransform); } #tapusin kung } }

Hakbang 9: Halos Tapos Na

Malapit ng matapos!
Malapit ng matapos!

Panghuli kapag na-click namin ang screen at ilagay ang portal nais namin itong laging harapin sa amin. Upang magawa ito, pumunta sa script na "UnityARHitTestExample" sa portal. Palitan ito ng lahat ng nasa loob:

gamit ang System;

gamit ang System. Collection. Generic; namespace UnityEngine. XR.iOS {public class UnityARHitTestExample: MonoBehaviour {public Transform m_HitTransform; pampublikong float maxRayDistance = 30.0f; public LayerMask collisionLayer = 1 <0) {maaga (var hitResult in hitResults) {Debug. Log ("Na-hit!"); 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; ibahin ang anyo. LookAt (Camera.main.transform); transform.eulerAngles = bagong Vector3 (currAngle.x, transform.eulerAngles.y, currAngle.z); bumalik totoo; }} bumalik na hindi totoo; } // Ang pag-update ay tinatawag na isang beses bawat frame na walang bisa sa Pag-update () {#kung UNITY_EDITOR // gagamitin lamang namin ang script na ito sa panig ng editor, kahit na walang pumipigil sa paggana nito sa aparato kung (Input. GetMouse ButtonDown (0)) {Ray ray = Camera.main. ScreenPointToRay (Input.mousePosition); Tumama ang RaycastHit; // susubukan naming ma-hit ang isa sa mga gameobject ng collider ng eroplano na nabuo ng plugin // na epektibo sa pagtawag sa HitTest na may ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent kung (Physics. Raycast (ray, out hit, maxRayDistance, collisionLayer)) {// makukuha namin ang posisyon mula sa contact point 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)); // at ang pag-ikot mula sa pagbabago ng plane collider m_HitTransform.rotation = hit.transform.rotation; }} #else if (Input.touchCount> 0 && m_HitTransform! = null) {var touch = Input. GetTouch (0); kung (touch.phase == TouchPhase. Began || touch.phase == TouchPhase. Move) {var screenPosition = Camera.main. ScreenToViewportPoint (touch.position); ARPoint point = bagong ARPoint {x = screenPosition.x, y = screenPosition.y}; // Isaayos ayon sa kahalagahan reults uri ARHitTestResultType resultTypes = {ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent, // kung nais mong gamitin ang walang katapusang eroplano gamitin ito: //ARHitTestResultType. ARHitTestResultTypeExistingPlane, ARHitTestResultType. ARHitTestResultTypeHorizontalPlane, ARHitTestResultType. ARHitTestResultTypeFeaturePoint}; maaga } } } } #tapusin kung } } }

Hakbang 10: Ilagay ang App sa Iyong Telepono

Ilagay ang App sa Iyong Telepono!
Ilagay ang App sa Iyong Telepono!

Sa wakas tapos na tayo. Pumunta sa file, itayo ang mga setting at i-click ang build. Buksan ang Xcode at piliin ang folder na nilikha mula sa pagbuo. Piliin ang iyong koponan sa pag-unlad at ilagay ang app sa iyong telepono! Maaaring gusto mong baguhin ang mga kulay ng mga particle at skybox upang umangkop sa iyong mga pangangailangan. Ipaalam sa akin sa mga komento kung mayroon kang anumang mga katanungan at salamat sa pagtingin!