uk
Feedback
کانال تخصصی یونیتی ( آموزش و نکته )

کانال تخصصی یونیتی ( آموزش و نکته )

Відкрити в Telegram

به نام خدا مسئولیت مطالب یا آگهی ارسالی در کانال یا کامنت ها به عهده من یا ما نیست لیست گروه ها و... https://t.me/UnityEngine3D/823 برای تبلیغ در کانال و گروه : https://t.me/UnityEngine3DAds مدیر اصلی(مالک) @UnityEngine

Показати більше
1 764
Підписники
Немає даних24 години
+57 днів
+1930 день
Архів дописів
#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

میتونید با رفتن به پوشه Packeges و بعد پوشه پکیج مورد نظر و سپس پوشه Documentation در نرم افزار Rider , مستندات هر پکیج رو به
میتونید با رفتن به پوشه Packeges و بعد پوشه پکیج مورد نظر و سپس پوشه Documentation در نرم افزار Rider , مستندات هر پکیج رو به صورت آفلاین ببینید (تست شده در یونیتی 2022 و Rider 2021.2) #نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

الان من این آموزش رو دادم ، آخرش یک چالش کوچیک گذاشتم که اصلا ببینم کسی میخونه یا نه یا... کسی فعلا نفرستاده😑 موضوعی برای آموزش دادن سراغ داشتید که طرفدار داشته باشه کامنت بدید

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

چرا قابلیت کامنت زیر این پست پاک شد😐 (توی گروه متصل به کانال هستش که😐)

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

دوستان فعلا کپی مطالب کانال حتی بدون ذکر منبع هم آزاده✅

#نکته #یونیتی 👉 @UnityEngine3D 👈
#نکته #یونیتی 👉 @UnityEngine3D 👈

اگر لینک برای حمایت مالی از کانال گذاشتم ، چقدر حمایت میکنید؟
Anonymous voting

(دو پست قبل در مورد سیستم قدیمی یونیتی حرف زدم و پست قبلی مربوط به JobSystem هست) خب دوستان این آموزش هم تموم شد ولی خب یک چالش بگذارم برای اینکه یادبگیرید چالش هم اینه که بعد از اتمام این کار ها به جای تغییر مختصات محور z شما rotation آبجکت رو حول محور y تغییر بدید یا اگه میتونید کارای خفن تر انجام بدید نتیجه رو به صورت اسکریپت یا فیلم یا... کامنت بدید (توجه کنید که چالش جایزه نداره) #یونیتی #JobSystem #dots #آموزش #فارسی 👉 @UnityEngine3D 👈

خب حالا برای اینکه این کد رو بر مبنای JobSystem اجرا کنیم باید کلا یک جور دیگه کد بنویسیم یک اسکریپت جدید ایجاد کنید و دو فضای نام using Unity.Jobs; using UnityEngine.Jobs; رو بهش اضافه کنید یک int به اسم objCount به صورت public اضافه کنید برای تعداد آبجکت (برای اینکه تعدادش توی ادیتور قابل تغییر باشه) یک GameObject به اسم objPrefab برای اینکه بعدا ازش نمونه بسازیم و به صورت public تعریف کنید یک آرایه به اسم objects و از نوع GameObject برای ریختن آبجکت هایی که ایجاد میشوند یک آرایه از نوع Transform و به اسم objTransform برای دسترسی به transform آبجکت های نمونه سازی شده یک متغیر از نوع TransformAccessArray و به اسم objTransformAccessArray (این خودش آرایه هست و نباید [ ] جلوش گذاشت و یک چیزی مثل transform خودمون هست ولی برای JobSystem) یک PositionUpdateJob اضافه کنید و اسمش رو بگذارید objectUpdateJob و توجه کنید که احتمالا با ارور مواجه میشید و ارور رو نادیده بگیرید چون که این یک نمونه از یک struct هست که کمی بعد اون رو اضافه میکنیم یک JobHandle به اسم objJobHandle اضافه کنید ( این برای اطلاع از اتمام Job هست) خب حالا میرسیم به اصل کاری یعنی ساخت struct . من اول مینویسم بعدش در موردش توضیح میدم struct PositionUpdateJob : IJobParallelForTransform { public void Execute(int index, TransformAccess transform) { transform.position += new Vector3(0, 0, 0.25f); } } خب این یک چیز حدود همون حلقه for خودمون هست . دقت کنید کلمه For داخل اینترفیس IJobParallelForTransform به معنای حلقه For هست نه به معنای "برای" خب IJobParallelForTransform که یک اینترفیس هست و یک متد داره به اسم Execute . پارامتر این متد یک int index داره که به معنای همون ایندکس حلقه for هست بعدیش هم یک TransformAccess که شاید معادل Transform خودمون ولی مخصوص JobSystem خط بعدیش هم داره محور z رو جلو میبره خب میرسیم به متد Start private void Start() { objects = new GameObject[objCount]; objectsTransform = new Transform[objCount]; for (int i = 0; i < objCount; i++) { objects[i] = Instantiate(objPrefab); objects[i].transform.position = new Vector3(Random.Range(-30, 30), 0, Random.Range(-30, 30)); objectsTransform[i] = objects[i].transform; } objTransformAccessArray = new TransformAccessArray(objectsTransform); } خط اول و دوم که داره ظرفیت آرایه ها رو تعیین میکنه خط بعد یک حلقه for هست و چون این حلقه توی متد Start هست من به صورت عادی نوشتم چون توی فریم اول بازی هست و خیلی مشکلی پیش نمیاره همون طور که میبینید داره آبجکت رو نمونه سازی میکنه و میریزه توی آرایه بعدش میره و مختصات رندوم برای هر آبجکت رو ایجاد میکنه و بعدش هم transform هر آبجکت رو میریزه داخل آرایه Transform ها خط بعد آرایه transform رو به آرایه TransformAccess تبدیل میکنه تا برای JobSystem شناخته بشه توجه کنید که ما در اینجا یک آبجکت رو به تعداد زیاد Instantiate میکنیم و اگه میخواید آبجکت های مشابه هم توی ادیتور اینطور بشن یا یک آرایه GameObject به صورت public تعریف کنید و آبجکت های مورد نظر رو بهش بدید یا هنگام اجرای بازی بهش بشناسونید و در این صورت دیگه نیازی به Instantiate نیست چون ما دیگه آبجکت داریم و برای تست من Instantiate کردم بعد میریم سراغ متد Update private void Update() { objJobHandle = objectUpdateJob.Schedule(objTransformAccessArray); } اینجا با فرستادن objTransformAccessArray به objectUpdateJob هم متد Execute رو اجرا میکنیم و هم میگیم که چه TransformAccess رو روش عملیات انجام بده و در آخر هم به objJobHandle نتیجه رو نسبت میدیم تا بتونیم بعدا Job رو تموم کنیم برای همین در متد LateUpdate : private void LateUpdate() { objJobHandle.Complete(); } این خط رو مینویسیم تا کار objJobHandle ما تمام بشه (متد LateUpdate بعد از Update اجرا میشه) بعد در متد OnDestroy private void OnDestroy() { objTransformAccessArray.Dispose(); } و موقعی که اسکریپت نابود شد با متد Dispose اون رو از روی رم برمیداریم (اگه اینکار رو نکنید احتمالا با خطا مواجه بشید)