এআর পোর্টাল অপরিচিত জিনিস থেকে উল্টো দিকে: 10 টি ধাপ (ছবি সহ)
এআর পোর্টাল অপরিচিত জিনিস থেকে উল্টো দিকে: 10 টি ধাপ (ছবি সহ)
Anonim
এআর পোর্টাল থেকে উল্টো দিকে স্ট্রেঞ্জার থিংস
এআর পোর্টাল থেকে উল্টো দিকে স্ট্রেঞ্জার থিংস
এআর পোর্টাল থেকে উল্টো দিকে স্ট্রেঞ্জার থিংস
এআর পোর্টাল থেকে উল্টো দিকে স্ট্রেঞ্জার থিংস

এই নির্দেশযোগ্য আইফোনের জন্য একটি বর্ধিত বাস্তবতা মোবাইল অ্যাপ তৈরির মধ্য দিয়ে যাবে একটি পোর্টাল যা স্ট্রেঞ্জার থিংস থেকে উল্টো দিকে নিয়ে যায়। আপনি পোর্টালের ভিতরে যেতে পারেন, ঘুরে বেড়াতে পারেন, এবং বাইরে ফিরে আসতে পারেন। পোর্টালের ভিতরের সবকিছু শুধুমাত্র পোর্টালের মাধ্যমে দেখা যাবে যতক্ষণ না আপনি ভিতরে হাঁটছেন। একবার ভিতরে everythingুকে গেলে সবকিছু সর্বত্র রেন্ডার হবে, যতক্ষণ না আপনি বাস্তব জগতে ফিরে যান। আমরা অ্যাপল ARKit প্লাগইন দিয়ে ইউনিটি 3D ভিডিও গেম ইঞ্জিন ব্যবহার করব। আমরা যে সব সফটওয়্যার ব্যবহার করব তা ডাউনলোড করে বিনামূল্যে ব্যবহার করা যাবে। আপনাকে অনুসরণ করার জন্য বিশেষজ্ঞ হওয়ার দরকার নেই, আমরা প্রতিটি ধাপ অতিক্রম করব!

ধাপ 1: একটি নতুন ityক্য প্রকল্প শুরু করুন।

একটি নতুন ityক্য প্রকল্প শুরু করুন।
একটি নতুন ityক্য প্রকল্প শুরু করুন।

প্রথমে বন্ধ, ইউনিটি 3 ডি ডাউনলোড করুন এবং আইওএস প্ল্যাটফর্মের জন্য বিল্ড ফাইলগুলি ইনস্টল করতে ভুলবেন না। আপনাকে এক্সকোড ডাউনলোড করতে হবে এবং একটি বিনামূল্যে অ্যাপল ডেভেলপার অ্যাকাউন্টের জন্য সাইন আপ করতে হবে। আপনার আইফোনটিও আইওএস 11 বা তার বেশি চালাতে হবে। আজ 5 ই ফেব্রুয়ারী 2018 পর্যন্ত, আইওএস 11.3 শেষ হয়েছে কিন্তু xCode 9.2 এর জন্য এখনও সমর্থন ফাইল নেই। সুতরাং যদি আপনি খুব সাম্প্রতিক আইওএস সংস্করণটি চালাচ্ছেন তবে Apple. Developer.com থেকে সর্বশেষ এক্সকোড বিটা সংস্করণটি ডাউনলোড করতে ভুলবেন না।

একবার আপনার সমস্ত প্রয়োজনীয় প্রোগ্রাম হয়ে গেলে, ইউনিটি খুলুন এবং একটি নতুন প্রকল্প শুরু করুন, আপনি যা চান তা কল করুন। আমাদের অ্যাপল এআরকিট প্লাগইন লাগবে যাতে আমরা আমাদের ফোনের ক্যামেরা ব্যবহার করে মাটিতে স্থলভাগের বস্তু সনাক্ত করতে পারি। আসুন এখন আমদানি স্টোর ট্যাবে গিয়ে "এআরকিট" অনুসন্ধান করে এটি আমদানি করি। আপনার যদি ইতিমধ্যে একটি না থাকে তবে আপনাকে একটি বিনামূল্যে ইউনিটি অ্যাকাউন্ট তৈরি করতে হবে, তারপর প্লাগইনটি পেতে আমদানি ক্লিক করুন।

ARKit ফোল্ডারে উদাহরণ ফোল্ডারে নেভিগেট করুন এবং "UnityARKitScene" খুঁজুন। এটি খুলতে ডাবল ক্লিক করুন। আমরা এই দৃশ্যটিকে একটি প্রারম্ভিক বিন্দু হিসাবে ব্যবহার করতে যাচ্ছি এবং এখান থেকে তৈরি করব। এই দৃশ্যটি ডিফল্টরূপে আপনাকে স্থলটি সনাক্ত করতে দেবে এবং যখন আপনি স্ক্রিনটি ট্যাপ করবেন তখন একটি ঘনক্ষেত্র সেই অবস্থানে স্থাপন করা হবে।

প্রথমে আমাদের বিল্ড সেটিংসকে বর্গ করা যাক যাতে আমরা পরে এটি করতে ভুলি না। ফাইল ক্লিক করুন, সেটিংস তৈরি করুন এবং সেই তালিকা থেকে সমস্ত দৃশ্য সরান। আমাদের বর্তমান দৃশ্য যোগ করতে খোলা দৃশ্য যোগ করুন ক্লিক করুন। আমাদের এখানে সর্বশেষ যে জিনিসটি সেট আপ করতে হবে তা হল প্লেয়ার সেটিংসে বান্ডেল আইডেন্টিফায়ার এ যান এবং এই স্ট্রিং এর ফর্ম্যাট হল com. YourCompanyName. YourAppName, তাই আমার ক্ষেত্রে আমি com. MatthewHallberg. PortalTest এর মত কিছু করি।

ধাপ 2: দৃশ্য সেট করুন।

দৃশ্য সেট করুন।
দৃশ্য সেট করুন।

প্রথমে বাম দিকে তাকান এবং "জেনারেটপ্লেনস" নামক গেম অবজেক্টটি সন্ধান করুন। সেই হাইলাইটের সাথে, এখনই দেখুন এবং এটি নিষ্ক্রিয় করতে চেক বক্সে ক্লিক করুন। এআরকিট একটি স্থল সমতল সনাক্ত করলে এইভাবে আমাদের কুৎসিত নীল বর্গগুলি তৈরি হয় না। পরবর্তীতে "RandomCube" গেম বস্তুটি মুছে ফেলুন কারণ আমরা আমাদের দৃশ্যে তা দেখতে চাই না।

এখন আমাদের প্রথমে আমাদের পোর্টাল দরজা তৈরি করতে হবে। যে কিউবটি "HitCubeParent" এর একটি শিশু তা মুছুন। ডান ক্লিক করুন এবং খালি গেম অবজেক্ট তৈরি করুন নির্বাচন করুন। এর নাম পরিবর্তন করুন "পোর্টাল"। এখন সেই বস্তুর উপর ডান ক্লিক করুন এবং একটি কিউব তৈরি করুন, এটি এটি পোর্টালের একটি শিশু হয়ে যাবে। এর নাম পরিবর্তন করুন "পোস্ট লেফট" এবং এটি হবে আমাদের পোর্টালের বাম পোস্ট। এটিকে স্কেল করুন যাতে x হল 1, y হল 28 এবং z একটি। সঠিক পোস্টের জন্য একই কাজ করুন। এখন উপরের পোস্টটি তৈরি করুন এবং y কে 14 পর্যন্ত স্কেল করুন। এটিকে অন্যদিকে ঘুরান এবং এটি এমনভাবে সরান যাতে এটি অন্যান্য পোস্টগুলিকে সংযুক্ত করে। সম্পূর্ণ পোর্টাল স্কেল 1.3 x 1.4 x 1 করুন।

গুগলে যান এবং কাঠ বা ছালের টেক্সচার টাইপ করুন। সেই ছবিগুলির মধ্যে একটি ডাউনলোড করুন এবং এটি আপনার সম্পদ ফোল্ডারে টেনে আনুন ইউনিটিতে। এখন সেই ছবিটি আপনার সমস্ত পোর্টাল পোস্টে টেনে আনুন।

আবার "পোর্টাল" অবজেক্টে ক্লিক করুন এবং ডানদিকে অ্যাড কম্পোনেন্ট ক্লিক করুন। এতে "UnityARHitTestExample" স্ক্রিপ্ট যোগ করুন। "হিট ট্রান্সফর্ম" এর জন্য সেখানে একটি খালি স্লট আছে, "HitCubeParent" বস্তুকে সেই স্লটে টেনে আনুন।

ধাপ 3: আসুন কিছু কণা তৈরি করি।

আসুন কিছু কণা তৈরি করি।
আসুন কিছু কণা তৈরি করি।

এখন আমরা আমাদের পোর্টালের ভিতরে ধোঁয়া এবং ভাসমান কণার প্রভাব তৈরি করতে ইউনিটি পার্টিকেল সিস্টেম ব্যবহার করতে যাচ্ছি। শীর্ষ মেনু বারে সম্পদগুলিতে যান, মানসম্মত সম্পদ এবং আমদানি কণা সিস্টেম।

আপনার পোর্টালের ভিতরে দুটি খালি খেলার বস্তু তৈরি করুন এবং একটিকে "স্মোক পার্টিকেলস" এবং অন্যটিকে "ফ্লোটিং পার্টিকেলস" কল করুন।

ধোঁয়া কণায় একটি কণা সিস্টেম উপাদান যুক্ত করুন।

এই উপাদানটির বিকল্পগুলির একটি গুচ্ছ রয়েছে তবে আমাদের কেবল একটি দম্পতি পরিবর্তন করতে হবে।

প্রায় 50% স্বচ্ছতার সাথে শুরু রঙকে গা dark় নীল রঙে পরিবর্তন করুন। নির্গমন হার 100 করুন। আকৃতির ভিতরে, ব্যাসার্ধ.01 করুন। নিচের অংশে রেন্ডারার অংশে ন্যূনতম আকার.8 এবং সর্বাধিক আকার 5 তে পরিবর্তন করুন। উপাদান উপাদানটিতে কেবল তালিকা থেকে ধোঁয়া উপাদান নির্বাচন করুন, তবে আমরা এটি পরে পরিবর্তন করতে যাচ্ছি।

এখন ভাসমান কণা খেলা বস্তুর একটি কণা সিস্টেম যোগ করুন এবং নির্গমন 500 সেট করুন আপাতত উপাদানটিকে ডিফল্ট কণায় সেট করুন।

অবশেষে উভয় খেলা বস্তু নিন এবং x এ 90 ডিগ্রী দ্বারা তাদের ঘোরান এবং তাদের বাতাসে উপরে তুলুন যাতে তারা পোর্টালের দরজার দিকে নিmitসৃত হয়।

ধাপ 4: কণাকে ধীর করা।

ধীরে ধীরে কণা।
ধীরে ধীরে কণা।

যেহেতু আমরা চাই যে এই কণাগুলো একটি বৃহৎ এলাকা coverেকে রাখুক কিন্তু ধীর গতিতে চলুক আমাদের নিজেদের নমুনা ফাংশন তৈরি করতে হবে। সুতরাং সম্পদ ফোল্ডারে ডান ক্লিক করুন এবং একটি নতুন C# স্ক্রিপ্ট তৈরি করুন এবং এটিকে "পার্টিকেল নমুনা" বলুন। এই কোডে কপি এবং পেস্ট করুন:

System. Collections ব্যবহার করে;

System. Collections. Generic ব্যবহার করে; ইউনিটি ইঞ্জিন ব্যবহার করে; পাবলিক ক্লাস পার্টিকেল নমুনা: MonoBehaviour {private particleSystem ps; // শূন্য শুরু () {ps = GetComponent () এর জন্য এটি ব্যবহার করুন; StartCoroutine (SampleParticleRoutine ()); } IEnumerator SampleParticleRoutine () {var main = ps.main; main.simulationSpeed = 1000f; ps. Play (); ফলন অপেক্ষা করুন নতুন WaitForSeconds (.1f); main.simulationSpeed =.05f; }}

এখন আপনার প্রতিটি কণা সিস্টেম গেম বস্তুর উপর এই স্ক্রিপ্টটি টেনে আনুন।

ধাপ 5: পোর্টাল তৈরি করা

পোর্টাল তৈরি করা হচ্ছে!
পোর্টাল তৈরি করা হচ্ছে!

এখন আমাদের পোর্টাল তৈরি করতে হবে তাই পোর্টাল গেম অবজেক্টে ডান ক্লিক করুন এবং একটি চতুর্ভুজ তৈরি করুন। চতুর্ভুজটি স্কেল করুন যাতে এটি পুরো পোর্টালটি জুড়ে দেয়, এটি আমাদের পোর্টাল উইন্ডোতে পরিণত হতে চলেছে। আমাদের প্রথমে যে জিনিসটি যুক্ত করতে হবে তা হ'ল পোর্টাল শেডার, এটি কেবল তাদের উপর অন্য নির্দিষ্ট শেডারের সাথে বস্তুগুলি রেন্ডার করবে। সম্পদ ফোল্ডারে ডান ক্লিক করুন এবং একটি নতুন আনলিট শেডার তৈরি করুন। সেখানে সবকিছু সরান এবং এই কোড পেস্ট করুন:

শেডার "পোর্টাল/পোর্টাল উইন্ডো"

{সাবশেডার {কালারমাস্ক 0 বন্ধ করুন স্টেনসিল বন্ধ করুন {রেফ 1 পাস প্রতিস্থাপন} পাস {}}}

শ্রেণিবিন্যাসে ডান ক্লিক করুন এবং একটি নতুন উপাদান তৈরি করুন, এটিকে পোর্টাল উইন্ডোমেট বলুন, এই উপাদানটির জন্য ড্রপডাউনে পোর্টাল বিভাগটি খুঁজুন এবং পোর্টাল উইন্ডো নির্বাচন করুন। এই উপাদানটিকে আপনার পোর্টাল কোয়াডে টেনে আনুন।

ধাপ 6: কণা শেডার।

কণা শেডার।
কণা শেডার।

সম্পদ ফোল্ডারে আবার ডান ক্লিক করুন এবং একটি নতুন শেডার তৈরি করুন। পোর্টালের ভিতরে যাওয়া কণার জন্য আমাদের ছায়া তৈরি করতে হবে। এর সাথে সমস্ত কোড প্রতিস্থাপন করুন:

শেডার "পোর্টাল/কণা" {

প্রপার্টি {_TintColor ("Tint Color", Color) = (0.5, 0.5, 0.5, 0.5) _ MainTex ("Particle Texture", 2D) = "white" {} _InvFade ("Soft Particles Factor", Range (0.01, 3.0)) = 1.0 _ স্টেনসিল ("স্টেনসিল", int) = 6} বিভাগ {ট্যাগ {"সারি" = "স্বচ্ছ" "IgnoreProjector" = "সত্য" "RenderType" = "স্বচ্ছ" "PreviewType" = "প্লেন"} মিশ্রন SrcAlpha OneMinusSrcAlpha ColorMask RGB Cull Off Lighting Off ZWrite Off SubShader {Stencil {Ref 1 Comp [_Stencil]} Pass {CGPROGRAM #pragma vertex vert #pragma fragment fra #pragma target 2.0 #pragma multi_compile_particles #pragma multi_compile_ginc_gine_cinc_gine_cinc_gine_camp_cinc_gine_camp_cinc_gine_camp_cinc_gence fix4 _TintColor; struct appdata_t {float4 vertex: POSITION; নির্দিষ্ট 4 রঙ: রঙ; float2 texcoord: TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID}; struct v2f {float4 vertex: SV_POSITION; নির্দিষ্ট 4 রঙ: রঙ; 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.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); ফেরত o; } UNITY_DECLARE_DEPTH_TEXTURE (_CameraDepthTexture); float _InvFade; স্থির 4 টুকরা (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.color.a *= বিবর্ণ; #endif fixed4 col = 2.0f * i.color * tex2D (_MainTex, i.texcoord); UNITY_APPLY_FOG (i.fogCoord, col); রিটার্ন কল; } ENDCG}}}}

দুটি নতুন উপকরণ তৈরি করুন, একটিকে বলা হয় portalSmoke, এবং একটিকে বলা হয় portalParticles।

প্রত্যেকের জন্য এই শেডারটি নির্বাচন করুন, ড্রপ ডাউন থেকে, পোর্টাল, কণাগুলিতে। ধোঁয়া কণার জন্য একটি ধোঁয়া টেক্সচার নির্বাচন করুন এবং কণার জন্য কণা টেক্সচার নির্বাচন করুন। প্রায় 50% স্বচ্ছতার সাথে ধোঁয়ার রঙ গা a় নীল করুন। আপনার পোর্টালের প্রতিটি কণা সিস্টেমের রেন্ডারার কম্পোনেন্টে যান এবং তাদের নিজ নিজ উপকরণগুলি নির্বাচন করুন যা আমরা সদ্য তৈরি করেছি।

ধাপ 7: স্কাইবক্স তৈরি করুন।

স্কাইবক্স তৈরি করুন।
স্কাইবক্স তৈরি করুন।

এখন সত্যিই উল্টো ধরনের চেহারা তৈরি করতে আমাদের সবকিছু গা dark় নীল রঙ করতে হবে। এর জন্য আমরা একটি স্বচ্ছ স্কাইবক্স ব্যবহার করব তাই একটি নতুন শেডার তৈরি করুন এবং এই কোডটিতে পেস্ট করুন:

Shader "Portal/portalSkybox" {

প্রপার্টি {_Tint ("Tint Color", Color) = (.5,.5,.5,.5) [Gamma] _Exposure ("Exposure", Range (0, 8)) = 1.0 _ Rotation ("Rotation", Range) "RenderType" = "ব্যাকগ্রাউন্ড" "PreviewType" = "Skybox"} বন্ধ করুন ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Stencil {Ref 1 Comp [_Stencil]} Pass {CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma.cginc "samplerCUBE _Tex; half4 _Tex_HDR; হাফ 4 _ টিন্ট; অর্ধেক এক্সপোজার; ভাসা _ ঘূর্ণন; float3 RotateAroundYInDegrees (float3 vertex, float degree) {float alpha = degree * UNITY_PI / 180.0; ভাসা সিনা, কোসা; সিনকোস (আলফা, সিনা, কোসা); float2x2 m = float2x2 (cosa, -sina, sina, cosa); return 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 (ও); float3 rotated = RotateAroundYInDegrees (v.vertex, _Rotation); o.vertex = UnityObjectToClipPos (ঘোরানো); o.texcoord = v.vertex.xyz; ফেরত o; } fix4 frag (v2f i): SV_Target {half4 tex = texCUBE (_Tex, i.texcoord); half3 c = DecodeHDR (tex, _Tex_HDR); c = c * _Tint.rgb * _ক্য_ রঙ স্পেসডবল.আরজিবি; c *= _ এক্সপোজার; ফিরে অর্ধেক 4 (c,.5); } ENDCG}} ফালব্যাক অফ}

এখন একটি নতুন স্কাইবক্স উপাদান তৈরি করুন, এটিকে "পোর্টালস্কাইবক্স" বলুন এবং পোর্টাল মেনু থেকে এই পোর্টালস্কাইবক্স শেডারটি নির্বাচন করুন। শীর্ষে উইন্ডো, লাইটিং এ যান এবং আমাদের তৈরি করা এই স্কাইবক্সটি বেছে নিন। মূল ক্যামেরায় যান এবং স্কাইবক্সে পরিষ্কার পতাকা সেট করুন। আমরা এখানে থাকাকালীন আমাদের ক্যামেরায় কিছু উপাদান যুক্ত করতে দেই যাতে আমরা সংঘর্ষ সনাক্ত করতে পারি। ক্যামেরায় একটি অনমনীয় উপাদান যুক্ত করুন এবং মাধ্যাকর্ষণ ব্যবহারটি আনচেক করুন। একটি বক্স কোলাইডার যোগ করুন এবং ট্রিগার চেক করুন। বক্সের কলাইডার সাইজ করুন ।5 x 1 x 4. ক্যামেরায় ক্লিপিং প্লেনটি.01 এ সেট করুন।

ধাপ 8: পোর্টাল লজিক।

পোর্টাল লজিক।
পোর্টাল লজিক।

আমাদের সর্বশেষ যে কাজটি করতে হবে তা হল আমাদের পোর্টালকে নিয়ন্ত্রণ করে এমন যুক্তি তৈরি করা। একটি নতুন সি# স্ক্রিপ্ট তৈরি করুন এবং এটিকে পোর্টাল কন্ট্রোলার বলুন।

System. Collections ব্যবহার করে;

System. Collections. Generic ব্যবহার করে; ইউনিটি ইঞ্জিন ব্যবহার করে; নামস্থান UnityEngine. XR.iOS {public class PortalController: MonoBehaviour {public material materials; পাবলিক MeshRenderer meshRenderer; পাবলিক ইউনিটিএরভিডিও ইউনিটিএআরভিডিও; ব্যক্তিগত বুল isInside = false; ব্যক্তিগত বুল isOutside = true; // শুরুর অকার্যকর শুরুর জন্য এটি ব্যবহার করুন () {OutsidePortal (); } অকার্যকর 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 = সত্য; InsidePortal (); }} অন্য {যদি (isInside) {isInside = false; isOutside = সত্য; OutsidePortal (); }}} অকার্যকর OutsidePortal () {StartCoroutine (DelayChangeMat (3)); } অকার্যকর InsidePortal () {StartCoroutine (DelayChangeMat (6)); } IEnumerator DelayChangeMat (int stencilNum) {UnityARVideo.shouldRender = false; ফলন প্রত্যাশা নতুন WaitForEndOfFrame (); meshRenderer.enabled = মিথ্যা; foreach (উপকরণে ম্যাটেরিয়াল ম্যাট) {mat. SetInt ("_Stencil", stencilNum); } ফলন ফেরত নতুন WaitForEndOfFrame (); meshRenderer.enabled = সত্য; UnityARVideo.shouldRender = সত্য; }}}

এই নতুন স্ক্রিপ্টটি আপনার পোর্টাল উইন্ডোতে টেনে আনুন। যখনই আমাদের ক্যামেরার কোলিডার পোর্টাল জানালার সাথে ধাক্কা খাবে তখন এটি আমাদের পোর্টালের ভেতরে এবং বাইরে স্থানান্তরিত করবে। এখন যে ফাংশনটি সমস্ত উপকরণ পরিবর্তন করে আমরা ARkit প্লাগইনকে ফ্রেমটি রেন্ডার না করার জন্য বলি, তাই মূল ক্যামেরায় যান এবং UnityARVideo স্ক্রিপ্টটি খুলুন। একটি সর্বজনীন বুল তৈরি করুন শীর্ষে রেন্ডার করুন এবং এটি সত্যের সমান সেট করুন। OnPreRender () ফাংশনে নিচে সবকিছু একটি if স্টেটমেন্টে মোড়ানো যেখানে ভিতরে সবকিছুই চলবে যদি shouldRender সত্য হয়। পুরো স্ক্রিপ্টটি এইরকম হওয়া উচিত:

সিস্টেম ব্যবহার করে;

System. Runtime. InteropServices ব্যবহার করে; ইউনিটি ইঞ্জিন ব্যবহার করে; UnityEngine. Rendering ব্যবহার করে; নামস্থান UnityEngine. XR.iOS {public class UnityARVideo: MonoBehaviour {public material m_ClearMaterial; [HideInInspector] public bool shouldRender = true; ব্যক্তিগত CommandBuffer m_VideoCommandBuffer; ব্যক্তিগত টেক্সচার 2 ডি _ভিডিও টেক্সচারওয়াই; ব্যক্তিগত টেক্সচার 2D _videoTextureCbCr; ব্যক্তিগত Matrix4x4 _displayTransform; ব্যক্তিগত বুল bCommandBufferInitialized; public void Start () {UnityARSessionNativeInterface. ARFrameUpdatedEvent += UpdateFrame; bCommandBufferInitialized = মিথ্যা; } void UpdateFrame (UnityARCamera cam) {_displayTransform = নতুন 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); } void InitializeCommandBuffer () {m_VideoCommandBuffer = নতুন CommandBuffer (); m_VideoCommandBuffer. Blit (null, BuiltinRenderTextureType. CurrentActive, m_ClearMaterial); GetComponent ()। AddCommandBuffer (CameraEvent. BeforeForwardOpaque, m_VideoCommandBuffer); bCommandBufferInitialized = সত্য; } অকার্যকর OnDestroy () {GetComponent ()। RemoveCommandBuffer (CameraEvent. BeforeForwardOpaque, m_VideoCommandBuffer); UnityARSessionNativeInterface. ARFrameUpdatedEvent -= UpdateFrame; bCommandBufferInitialized = মিথ্যা; } #যদি! যদি (handles.textureY == System. IntPtr. Zero || handles.textureCbCr == System. IntPtr. Zero) {return; } যদি (! bCommandBufferInitialized) {InitializeCommandBuffer (); } রেজোলিউশন currentResolution = Screen.currentResolution; // টেক্সচার Y যদি (_videoTextureY == নাল) {_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); } // টেক্সচার CbCr যদি (_videoTextureCbCr == null) {_videoTextureCbCr = Texture2D। _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); }} #সর্বজনীন অকার্যকর SetYTexure (Texture2D YTex) {_videoTextureY = YTex; } পাবলিক অকার্যকর SetUVTexure (Texture2D UVTex) {_videoTextureCbCr = UVTex; } জনশূন্য OnPreRender () {if (! bCommandBufferInitialized) {InitializeCommandBuffer (); } m_ClearMaterial. SetTexture ("_ textureY", _videoTextureY); m_ClearMaterial. SetTexture ("_ textureCbCr", _videoTextureCbCr); m_ClearMaterial. SetMatrix ("_ DisplayTransform", _displayTransform); } #যদি শেষ } }

ধাপ 9: প্রায় সম্পন্ন

প্রায় শেষ!
প্রায় শেষ!

অবশেষে যখন আমরা স্ক্রিনে ক্লিক করি এবং পোর্টালটি রাখি আমরা চাই যে এটি সর্বদা আমাদের মুখোমুখি হয়। এটি করার জন্য পোর্টালে "UnityARHitTestExample" স্ক্রিপ্টে যান। এর সাথে ভিতরের সবকিছু প্রতিস্থাপন করুন:

সিস্টেম ব্যবহার করে;

System. Collections. Generic ব্যবহার করে; নামস্থান UnityEngine. XR.iOS {public class UnityARHitTestExample: MonoBehaviour {public transform m_HitTransform; পাবলিক ফ্লোট maxRayDistance = 30.0f; public LayerMask collisionLayer = 1 <0) {foreach (var hitResult in hitResults) {Debug. Log ("Got hit!"); m_HitTransform.position = UnityARMatrixOps. GetPosition (hitResult.worldTransform); m_HitTransform.rotation = UnityARMatrixOps. GetRotation (hitResult.worldTransform); ডিবাগ। লগ (string. Format ("x: {0: 0। ######} y: {1: 0। } ", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z)); Vector3 currAngle = transform.eulerAngles; transform. LookAt (Camera.main.transform); transform.eulerAngles = নতুন Vector3 (currAngle.x, transform.eulerAngles.y, currAngle.z); সত্য ফিরে; }} মিথ্যা প্রত্যাবর্তন; } // আপডেট প্রতি ফ্রেম ভয়েড আপডেটে একবার বলা হয়) {রে রে = Camera.main. ScreenPointToRay (Input.mousePosition); RaycastHit আঘাত; // আমরা প্লাগইন দ্বারা উৎপন্ন প্লেন কোলাইডার গেমবজেক্টগুলির মধ্যে একটিতে আঘাত করার চেষ্টা করব // কার্যকরভাবে ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent এর সাথে HitTest কল করার অনুরূপ যদি (Physics. Raycast (ray, out hit, maxRayDistance, collisionLayer)) {// আমরা যোগাযোগ পয়েন্ট m_HitTransform.position = hit.point থেকে অবস্থান পেতে যাচ্ছি; ডিবাগ। লগ (string. Format ("x: {0: 0। ######} y: {1: 0। } ", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z)); // এবং প্লেন কোলাইডার m_HitTransform.rotation = hit.transform.rotation- এর রূপান্তর থেকে ঘূর্ণন; }} #অন্যথায় (Input.touchCount> 0 && m_HitTransform! = null) {var touch = Input. GetTouch (0); যদি (touch.phase == TouchPhase. Began || touch.phase == TouchPhase. Moved) {var screenPosition = Camera.main. ScreenToViewportPoint (touch.position); ARPoint পয়েন্ট = নতুন ARPoint {x = screenPosition.x, y = screenPosition.y}; // অগ্রাধিকার reults ধরনের ARHitTestResultType resultTypes = {ARHitTestResultType. ARHitTestResultTypeExistingPlaneUsingExtent, // আপনি ব্যবহার করতে চান অসীম প্লেন ব্যবহার এই: //ARHitTestResultType. ARHitTestResultTypeExistingPlane, ARHitTestResultType. ARHitTestResultTypeHorizontalPlane, ARHitTestResultType. ARHitTestResultTypeFeaturePoint}; foreach (ARHitTestResultType resultType in resultTypes) {যদি (HitTestWithResultType (point, resultType)) {return; } } } } #যদি শেষ } } }

ধাপ 10: আপনার ফোনে অ্যাপটি রাখুন

আপনার ফোনে অ্যাপটি রাখুন!
আপনার ফোনে অ্যাপটি রাখুন!

অবশেষে আমাদের কাজ শেষ। ফাইল, বিল্ড সেটিংসে যান এবং বিল্ড ক্লিক করুন। এক্সকোড খুলুন এবং বিল্ড থেকে তৈরি করা ফোল্ডারটি চয়ন করুন। আপনার ডেভেলপমেন্ট টিম চয়ন করুন এবং আপনার ফোনে অ্যাপটি রাখুন! আপনি আপনার প্রয়োজন অনুসারে কণা এবং স্কাইবক্সের রঙ পরিবর্তন করতে চাইতে পারেন। যদি আপনার কোন প্রশ্ন থাকে এবং আমাকে দেখার জন্য ধন্যবাদ!

প্রস্তাবিত: