Start Unity – Telegram
Start Unity
329 subscribers
7 photos
1 video
11 links
هیچ پروسه ای سخت نیست به شرطی که شروعش کنی..

🎮 #یونیتی
👨‍💻 #برنامه_نویسی
📚 #آموزش
🧩 #آزمون

گروه: @StartUnityGP

🫂 @AmirHDeveloper @HaminGames
Download Telegram
Start Unity
#نکات_مهم
از اینا 4 تا دونشو عادت دارم خودم🤦‍♂️😂😂
Channel photo updated
برخی از متدهای کلاس‌های Vector2 و Vector3 همراه با نمونه کد:

### Vector2:

1. `Distance(Vector2 a, Vector2 b)`:
- توضیح: این متد فاصله‌ی اقلیدسی (Euclidean distance) بین دو نقطه‌ی مشخص را محاسبه می‌کند.
- نمونه کد:

     Vector2 pointA = new Vector2(1.0f, 2.0f);
Vector2 pointB = new Vector2(4.0f, 6.0f);

float distance = Vector2.Distance(pointA, pointB);


2. `Dot(Vector2 lhs, Vector2 rhs)`:
- توضیح: این متد محصول نقطه‌ای (dot product) دو بردار را محاسبه می‌کند.
- نمونه کد:

     Vector2 vectorA = new Vector2(2.0f, 3.0f);
Vector2 vectorB = new Vector2(1.0f, 2.0f);

float dotProduct = Vector2.Dot(vectorA, vectorB);


### Vector3:

1. `Angle(Vector3 from, Vector3 to)`:
- توضیح: این متد زاویه‌ی بین دو بردار را با استفاده از محصول نقطه‌ای محاسبه می‌کند.
- نمونه کد:

     Vector3 fromVector = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 toVector = new Vector3(0.0f, 1.0f, 0.0f);

float angle = Vector3.Angle(fromVector, toVector);


2. `Reflect(Vector3 inDirection, Vector3 inNormal)`:
- توضیح: این متد بازتاب بردار وارون شده از یک سطح را محاسبه می‌کند.
- نمونه کد:

     Vector3 incident = new Vector3(1.0f, -1.0f, 0.0f).normalized;
Vector3 normal = new Vector3(0.0f, 1.0f, 0.0f).normalized;

Vector3 reflected = Vector3.Reflect(incident, normal);


3. `Project(Vector3 vector, Vector3 onNormal)`:
- توضیح: این متد پروژکشن یک بردار بر روی یک بردار دیگر را محاسبه می‌کند.
- نمونه کد:

     Vector3 vectorToProject = new Vector3(3.0f, 4.0f, 5.0f);
Vector3 ontoVector = new Vector3(1.0f, 0.0f, 0.0f);

Vector3 projectedVector = Vector3.Project(vectorToProject, ontoVector);


4. `Lerp(Vector3 a, Vector3 b, float t)`:
- توضیح: این متد یک بردار در طول یک مسیر خطی بین دو بردار مبدأ و مقصد ایجاد می‌کند.
- نمونه کد:

     Vector3 vectorA = new Vector3(1.0f, 2.0f, 3.0f);
Vector3 vectorB = new Vector3(4.0f, 5.0f, 6.0f);

Vector3 lerpedVector = Vector3.Lerp(vectorA, vectorB, 0.5f);


5. `Slerp(Vector3 a, Vector3 b, float t

)`:

- توضیح: این متد یک بردار در طول یک مسیر قطبی بین دو بردار مبدأ و مقصد ایجاد می‌کند.
- نمونه کد:

     Vector3 vectorA = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 vectorB = new Vector3(0.0f, 1.0f, 0.0f);

Vector3 slerpedVector = Vector3.Slerp(vectorA, vectorB, 0.5f);


6. `RotateTowards(Vector3 current, Vector3 target, float maxRadiansDelta, float maxMagnitudeDelta)`:
- توضیح: این متد یک بردار را به سمت یک بردار هدف چرخانده و محدودیت‌هایی برای حرکت را اعمال می‌کند.
- نمونه کد:

     Vector3 currentVector = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 targetVector = new Vector3(0.0f, 1.0f, 0.0f);

float maxRadiansDelta = 0.1f;
float maxMagnitudeDelta = 0.01f;

Vector3 rotatedVector = Vector3.RotateTowards(currentVector, targetVector, maxRadiansDelta, maxMagnitudeDelta);


7. `MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta)`:
- توضیح: این متد یک بردار را به سمت یک بردار هدف حرکت می‌دهد با محدودیت فاصله حداکثری.
- نمونه کد:

     Vector3 currentVector = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 targetVector = new Vector3(0.0f, 1.0f, 0.0f);

float maxDistanceDelta = 0.1f;

Vector3 movedVector = Vector3.MoveTowards(currentVector, targetVector, maxDistanceDelta);


8. `SmoothDamp(Vector3 current, Vector3 target, ref Vector3 currentVelocity, float smoothTime, float maxSpeed)`:
- توضیح: این متد یک بردار را به سمت یک بردار هدف با استفاده از حرکت انسیابی (Smooth Damping) حرکت می‌دهد.
- نمونه کد:

     Vector3 currentVector = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 targetVector = new Vector3(0.0f, 1.0f, 0.0f);
Vector3 currentVelocity = Vector3.zero;
float smoothTime = 0.5f;
float maxSpeed = 2.0f;

Vector3 smoothedVector = Vector3.SmoothDamp(currentVector, targetVector, ref currentVelocity, smoothTime, maxSpeed);


#یونیتی #برنامه_نویسی
🔥5
در Unity، کلاس Mathf حاوی متدها و توابع ریاضی مختلفی است که برای انجام عملیات ریاضی مورد نیاز در بازی‌ها و شبیه‌سازی‌های سه‌بعدی استفاده می‌شوند. در زیر توضیحات برخی از متدهای این کلاس به همراه نمونه کد آمده است:

1. `Abs(float value)`:
- توضیح: بازگرداندن مقدار مطلق یک عدد.
- نمونه کد:

     float absoluteValue = Mathf.Abs(-5.0f);


2. `Sin(float f)`, `Cos(float f)`, `Tan(float f)`:
- توضیح: محاسبه سینوس، کسینوس و تانژانت یک زاویه به رادیان.
- نمونه کد:

     float angleInRadians = Mathf.PI / 4.0f; // 45 degrees in radians

float sineValue = Mathf.Sin(angleInRadians);
float cosineValue = Mathf.Cos(angleInRadians);
float tangentValue = Mathf.Tan(angleInRadians);


3. `Sqrt(float f)`:
- توضیح: محاسبه ریشه مربعی یک عدد.
- نمونه کد:

     float squareRootValue = Mathf.Sqrt(25.0f); // 5.0


4. `Pow(float f, float p)`:
- توضیح: محاسبه توان یک عدد به توان دیگر.
- نمونه کد:

     float result = Mathf.Pow(2.0f, 3.0f); // 8.0


5. `Round(float f)`:
- توضیح: گرد کردن یک عدد به نزدیکترین عدد صحیح.
- نمونه کد:

     float roundedValue = Mathf.Round(3.7f); // 4.0


6. `Ceil(float f)`, `Floor(float f)`:
- توضیح: گرد کردن به سمت بالا و پایین به نزدیکترین عدد صحیح.
- نمونه کد:

     float ceilValue = Mathf.Ceil(3.2f); // 4.0
float floorValue = Mathf.Floor(3.8f); // 3.0


7. `Min(float a, float b)`, `Max(float a, float b)`:
- توضیح: بازگرداندن کمترین یا بزرگترین عدد از دو عدد داده شده.
- نمونه کد:

     float minValue = Mathf.Min(5.0f, 7.0f); // 5.0
float maxValue = Mathf.Max(3.0f, 9.0f); // 9.0


8. `Clamp(float value, float min, float max)`:
- توضیح: محدود کردن یک عدد بین یک حداقل و حداکثر مشخص.
- نمونه کد:

     float clampedValue = Mathf.Clamp(3.0f, 1.0f, 5.0f); // 3.0


9. `Lerp(float a, float b, float t)`:
- توضیح: ایجاد یک عدد در طول یک مسیر خطی بین دو عدد مبدأ و مقصد.
- نمونه کد:

     float lerpedValue = Mathf.Lerp(1.0f, 3.0f, 0.5f); // 2.0


10. `InverseLerp(float a, float b, float value)`:
- توضیح: محاسبه مقدار پارامتر t که عدد value بین a و b قرار دارد.
- نمونه کد:

     float inverseLerpValue = Mathf.InverseLerp(1.0f, 5.0f, 3.0f); // 0.5


11. `MoveTowards(float current, float target, float maxDelta)`:
- توضیح: حرکت یک عدد به سمت یک عدد هدف با محدودیت فاصله حداکثری.
- نمونه کد:

     float current = 2.0f;
float target = 5.0f;
float maxDelta = 1.0f;

float movedValue = Mathf.MoveTowards(current, target, maxDelta); // 3.0


12. `SmoothDamp(float current, float target, ref float currentVelocity, float smoothTime, float maxSpeed)`:
- توضیح: انجام حرکت انسیابی (Smooth Damping) عدد به سمت یک عدد هدف.
- نمونه کد:

     float current = 2.0f;
float target = 5.0f;
float currentVelocity = 0.0f;
float smoothTime = 0.5f;
float maxSpeed = 2.0f;

float smoothedValue = Mathf.SmoothDamp(current, target, ref currentVelocity, smoothTime, max

Speed);


#یونیتی #برنامه_نویسی
🔥5👍2
در Unity، کلاس Quaternion برای نمایش و عملیات مربوط به چرخش‌ها و جهت‌ها در سه بعد استفاده می‌شود. در زیر توضیحات برخی از متدهای این کلاس به همراه نمونه کد آمده است:

1. `Quaternion.Euler(float x, float y, float z)`:
- توضیح: ایجاد یک Quaternion بر اساس زوایای Euler (Pitch، Yaw، Roll).
- نمونه کد:

     Quaternion rotation = Quaternion.Euler(45.0f, 90.0f, 0.0f);


2. `Quaternion.AngleAxis(float angle, Vector3 axis)`:
- توضیح: ایجاد یک Quaternion بر اساس یک زاویه و محور چرخش.
- نمونه کد:

     float angle = 30.0f;
Vector3 axis = new Vector3(0.0f, 1.0f, 0.0f);

Quaternion rotation = Quaternion.AngleAxis(angle, axis);


3. `Quaternion.identity`:
- توضیح: Quaternion هویت (بدون چرخش یا جهت).
- نمونه کد:

     Quaternion identityQuaternion = Quaternion.identity;


4. `Quaternion.LookRotation(Vector3 forward, Vector3 upwards)`:
- توضیح: ایجاد یک Quaternion که به سمت یک جهت مشخص نگاه می‌کند.
- نمونه کد:

     Vector3 forwardDirection = new Vector3(0.0f, 0.0f, 1.0f);
Vector3 upDirection = Vector3.up;

Quaternion rotation = Quaternion.LookRotation(forwardDirection, upDirection);


5. `Quaternion.Slerp(Quaternion a, Quaternion b, float t)`:
- توضیح: ایجاد یک Quaternion در طول یک مسیر قطبی بین دو Quaternion مبدأ و مقصد.
- نمونه کد:

     Quaternion quaternionA = Quaternion.Euler(0.0f, 90.0f, 0.0f);
Quaternion quaternionB = Quaternion.Euler(0.0f, 180.0f, 0.0f);

float t = 0.5f;
Quaternion slerpedQuaternion = Quaternion.Slerp(quaternionA, quaternionB, t);


6. `Quaternion.Lerp(Quaternion a, Quaternion b, float t)`:
- توضیح: ایجاد یک Quaternion در طول یک مسیر خطی بین دو Quaternion مبدأ و مقصد.
- نمونه کد:

     Quaternion quaternionA = Quaternion.Euler(0.0f, 90.0f, 0.0f);
Quaternion quaternionB = Quaternion.Euler(0.0f, 180.0f, 0.0f);

float t = 0.5f;
Quaternion lerpedQuaternion = Quaternion.Lerp(quaternionA, quaternionB, t);


7. `Quaternion.identity`:
- توضیح: Quaternion هویت (بدون چرخش یا جهت).
- نمونه کد:

     Quaternion identityQuaternion = Quaternion.identity;


8. `Quaternion.Inverse(Quaternion rotation)`:
- توضیح: معکوس یک Quaternion.
- نمونه کد:

     Quaternion originalRotation = Quaternion.Euler(30.0f, 45.0f, 60.0f);
Quaternion inverseRotation = Quaternion.Inverse(originalRotation);


9. `Quaternion.Euler(float x, float y, float z)`:
- توضیح: ایجاد یک Quaternion بر اساس زوایای Euler (Pitch، Yaw، Roll).
- نمونه کد:

     Quaternion rotation = Quaternion.Euler(45.0f, 90.0f, 0.0f);


10. `Quaternion.RotateTowards(Quaternion from, Quaternion to, float maxDegreesDelta)`:
- توضیح: چرخش یک Quaternion به سمت یک Quaternion هدف با محدودیت زاویه.
- نمونه کد:

      Quaternion fromRotation = Quaternion.Euler(0.0f, 90.0f, 0.0f);
Quaternion toRotation = Quaternion.Euler(0.0f, 180.0f

, 0.0f);
float maxDegreesDelta = 30.0f;

Quaternion rotatedQuaternion = Quaternion.RotateTowards(fromRotation, toRotation, maxDegreesDelta);


11. `Quaternion.Euler(Vector3 euler)`:
- توضیح: ایجاد یک Quaternion بر اساس زوایای Euler (Pitch، Yaw، Roll) در یک Vector3.
- نمونه کد:

     Vector3 eulerAngles = new Vector3(45.0f, 90.0f, 0.0f);
Quaternion rotation = Quaternion.Euler(eulerAngles);


این متدها تنها یک بخش کوچک از توابع Quaternion در Unity هستند و برای کاربردهای مختلف می‌توانید به مستندات Unity مراجعه کنید.

#یونیتی #برنامه_نویسی
🔥31👍1
در Unity، اتربیوت‌ها (Attributes) ابزارهایی هستند که به توسعه‌دهندگان این امکان را می‌دهند تا رفتار و نمایش خصوصیات مختلفی را برای کلاس‌ها و متدها در ادیتور Unity تعیین کنند. در زیر چند اتربیوت اصلی با توضیحات آمده‌اند:

1. `[SerializeField]`:
- توضیح: این اتربیوت به Unity می‌گوید که یک متغیر خصوصی در کلاس را در ادیتور نمایش دهد و به طور مستقیم با پنل اینسپکتور ارتباط دارد. این کار به توسعه‌دهندگان این امکان را می‌دهد که به متغیرهای خصوصی دسترسی داشته باشند و در عین حال، آنها را در ادیتور تغییر دهند.
- نمونه کد:

     public class Example : MonoBehaviour
{
[SerializeField]
private int myInt = 42;
}


2. `[Header("My Section")]`:
- توضیح: این اتربیوت به توسعه‌دهندگان اجازه می‌دهد تا یک بخش جدید در پنل اینسپکتور برای گروه‌بندی و سازماندهی متغیرها و فیلدهای این کلاس ایجاد کنند.
- نمونه کد:

     public class Example : MonoBehaviour
{
[Header("My Settings")]
public int myInt = 42;
public float myFloat = 3.14f;
}


3. `[Range(min, max)]`:
- توضیح: این اتربیوت به توسعه‌دهندگان این امکان را می‌دهد تا یک محدوده برای یک عدد اعشاری یا صحیح تعیین کنند و یک اسلایدر در پنل اینسپکتور برای تنظیم آن فراهم شود.
- نمونه کد:

     public class Example : MonoBehaviour
{
[Range(0, 100)]
public int myIntInRange = 42;
}


4. `[Tooltip("This is a tooltip.")]`:
- توضیح: این اتربیوت به توسعه‌دهندگان این امکان را می‌دهد تا یک توضیح کوتاه برای یک فیلد یا متغیر در پنل اینسپکتور ایجاد کنند. وقتی ماوس را بر روی فیلد می‌برند، توضیح ظاهر می‌شود.
- نمونه کد:

     public class Example : MonoBehaviour
{
[Tooltip("This is the tooltip for myInt.")]
public int myInt = 42;
}


5. `[HideInInspector]`:
- توضیح: این اتربیوت به Unity می‌گوید که یک متغیر خصوصی را در پنل اینسپکتور نمایش ندهد. معمولاً برای مخفی کردن متغیرهایی که برنامه نیازی به تنظیم آن در ادیتور ندارد، استفاده می‌شود.
- نمونه کد:

     public class Example : MonoBehaviour
{
[HideInInspector]
public int myHiddenInt = 42;
}


6. `[ExecuteInEditMode]`:
- توضیح: این اتربیوت به توسعه‌دهندگان اجازه می‌دهد که اسکریپت را در حالت ویرایش اجرا کنند و تغییرات را در صفحه‌ی اصلی Unity نیز مشاهده کنند.
- نمونه کد:

     [ExecuteInEditMode]
public class Example : MonoBehaviour
{
// کد اینجا قرار می‌گیرد
}


اینها تنها چند نمونه از

اتربیوت‌هایی هستند که می‌توانید در Unity استفاده کنید. هر اتربیوت ویژگی‌های خاص خود را دارد و به توسعه‌دهندگان کمک می‌کند تا تعامل با پنل اینسپکتور را بهبود بخشند و اطلاعات بیشتری از وضعیت اجزای مختلف بازی در اختیار داشته باشند.

#یونیتی #برنامه_نویسی
👍4🔥42
ترنسفرم یک مفهوم کلیدی در Unity است که موقعیت، چرخش و مقیاس یک شیء در فضای سه بعدی را تعیین می‌کند. در Unity، کلاس Transform این ترنسفرم را به عنوان یک کامپوننت در اختیار شیء‌ها قرار می‌دهد. در زیر، متدهای مهم کلاس Transform توضیح داده شده‌اند:

1. `Translate(Vector3 translation)`:
- توضیح: افزودن یک ترجمه (تغییر موقعیت) به ترنسفرم.
- نمونه کد:

     // تغییر موقعیت به سمت راست 2 واحد
transform.Translate(Vector3.right * 2.0f);


2. `Rotate(Vector3 eulerAngles)`:
- توضیح: افزودن یک چرخش به ترنسفرم با زوایا Euler به واحدهای درجه.
- نمونه کد:

     // چرخش به اندازه 45 درجه در اطراف محور Y
transform.Rotate(new Vector3(0.0f, 45.0f, 0.0f));


3. `Scale(Vector3 scale)`:
- توضیح: افزودن یک مقیاس به ترنسفرم.
- نمونه کد:

     // تغییر اندازه به 2 برابر در سه محور
transform.Scale(new Vector3(2.0f, 2.0f, 2.0f));


4. `LookAt(Transform target, Vector3 upDirection)`:
- توضیح: چرخش به سمت یک نقطه خاص.
- نمونه کد:

     // چرخش به سمت یک شیء خاص
transform.LookAt(targetTransform);


5. `TransformPoint(Vector3 position)`:
- توضیح: تبدیل یک نقطه از فضای محلی به فضای جهانی ترنسفرم.
- نمونه کد:

     // تبدیل نقطه از فضای محلی به فضای جهانی
Vector3 localPoint = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 globalPoint = transform.TransformPoint(localPoint);


6. `InverseTransformPoint(Vector3 position)`:
- توضیح: تبدیل یک نقطه از فضای جهانی به فضای محلی ترنسفرم.
- نمونه کد:

     // تبدیل نقطه از فضای جهانی به فضای محلی
Vector3 globalPoint = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 localPoint = transform.InverseTransformPoint(globalPoint);


7. `TransformDirection(Vector3 direction)`:
- توضیح: تبدیل یک جهت از فضای محلی به فضای جهانی ترنسفرم.
- نمونه کد:

     // تبدیل جهت از فضای محلی به فضای جهانی
Vector3 localDirection = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 globalDirection = transform.TransformDirection(localDirection);


8. `InverseTransformDirection(Vector3 direction)`:
- توضیح: تبدیل یک جهت از فضای جهانی به فضای محلی ترنسفرم.
- نمونه کد:

     // تبدیل جهت ا

ز فضای جهانی به فضای محلی
Vector3 globalDirection = new Vector3(1.0f, 0.0f, 0.0f);
Vector3 localDirection = transform.InverseTransformDirection(globalDirection);


9. `SetPositionAndRotation(Vector3 position, Quaternion rotation)`:
- توضیح: تنظیم همزمان موقعیت و چرخش ترنسفرم.
- نمونه کد:

     // تنظیم همزمان موقعیت و چرخش
Vector3 newPosition = new Vector3(1.0f, 0.0f, 0.0f);
Quaternion newRotation = Quaternion.Euler(0.0f, 90.0f, 0.0f);
transform.SetPositionAndRotation(newPosition, newRotation);


10. `RotateAround(Vector3 point, Vector3 axis, float angle)`:
- توضیح: چرخش اطراف یک نقطه خاص.
- نمونه کد:

      // چرخش اطراف یک نقطه در اطراف محور Y با زاویه 45 درجه
Vector3 rotationPoint = new Vector3(0.0f, 0.0f, 1.0f);
Vector3 rotationAxis = Vector3.up;
float rotationAngle = 45.0f;
transform.RotateAround(rotationPoint, rotationAxis, rotationAngle);


این متدها تنها یک بخش از عملکردهای Transform در Unity هستند. برای اطلاعات بیشتر، به مستندات Unity مراجعه کنید.

#یونیتی #برنامه_نویسی
🔥4👍3
با کمال خوشحالی و شادمانی، به شما و خانواده محترمتان در این شب یلدا، جشن نور و گرمی را تبریک میگویم. امیدوارم نور این شب، روشنایی را به زندگی شما و عزیزانتان بیاورد و تا سال جدید، سلامتی، خوشبختی و موفقیت را در کنار خودتان داشته باشید.

شب یلدا مبارک❤️
8
در برنامه‌نویسی، Enum (مخفف Enumeration) یک نوع داده است که یک مجموعه از ثابت‌ها یا اعضا دارد. Enumها به برنامه‌نویس این امکان را می‌دهند که یک گروه از مقادیر مشخص را با نام‌های خواناتر و قابل فهم تعریف کنند. در زیر، نحوه تعریف و استفاده از Enumها در C# (زبان برنامه‌نویسی Unity) توضیح داده شده است:

### تعریف Enum:

یک Enum با استفاده از کلمه کلیدی enum تعریف می‌شود:

public enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}


در این مثال، یک Enum به نام DaysOfWeek با هفت مقدار (روزهای هفته) تعریف شده است.

### استفاده از Enum:

بعد از تعریف Enum، می‌توانید از آن برای تعیین مقدار یک متغیر یا پارامتر استفاده کنید. به عنوان مثال:

DaysOfWeek today = DaysOfWeek.Monday;


حالا today به عنوان یک متغیر از نوع DaysOfWeek تعریف شده و مقدار آن برابر با Monday است.

### مقادیر پیش‌فرض Enum:

هر Enum دارای یک مقدار پیش‌فرض است. اگر هیچ مقداری به یک Enum نداده شود، مقدار پیش‌فرض اولین عضو Enum خواهد بود. در مثال قبل، مقدار پیش‌فرض DaysOfWeek برابر با Sunday خواهد بود.

### تبدیل Enum به و از int:

Enumها به صورت پیش‌فرض به int تبدیل می‌شوند و برعکس. برای تبدیل Enum به int از Convert.ToInt32() استفاده می‌شود و برای تبدیل int به Enum از casting عادی استفاده می‌شود.

int dayValue = Convert.ToInt32(DaysOfWeek.Wednesday); // تبدیل Enum به int
DaysOfWeek newDay = (DaysOfWeek)3; // تبدیل int به Enum


### ارتقاء Enum:

می‌توانید یک Enum را با مقدارهای دلخواه ارتقاء دهید:

public enum Status
{
Pending = 0,
Approved = 1,
Rejected = 2
}


### Flag Enums:

Enumها می‌توانند با هم ترکیب شوند و از آن‌ها برای نمایش گزینه‌های چندگانه (به عنوان یک Flag Enum) استفاده شود:

[Flags]
public enum Colors
{
None = 0,
Red = 1,
Green = 2,
Blue = 4,
Yellow = Red | Green,
Cyan = Green | Blue,
Magenta = Red | Blue,
White = Red | Green | Blue
}


در این مثال، هر عضو از Colors با یک مقدار توانی از ۲ (2^n) نمایش داده شده است.

استفاده از Enumها به برنامه‌نویسان این امکان را می‌دهد که کدهای خود را خواناتر، قابل فهم‌تر و قابل تغییر بهتری بسازند، به خصوص زمانی که با مجموعه‌ای از مقادیر ثابت سروکار دارند.

#یونیتی #برنامه_نویسی
🔥4👍1🥰1
🌟 درود دوستان گرامی!

خوشحالیم که به شما یک منبع جدید از ویدیوهای آموزشی در زمینه برنامه‌نویسی و تکنولوژی معرفی کنیم. 🚀

👉 Programming studio

🖥 در اینجا، با ویدیوهای جذاب و کاربردی در زمینه برنامه‌نویسی آشنا می‌شوید. اگر به دنبال آموزش‌هایی سریع و موثر هستید، اینجاست که باید باشید!

🌐 لینک کانال: Programming studio

🚀 ما به دنبال ایجاد یک جامعه فعال و ایده‌آل هستیم. با ما همراه شوید و تجربیات خود را با ما به اشتراک بگذارید.

🙏 با دوستانتان هم به اشتراک بگذارید و ما را در این مسیر حمایت کنید. با تشکر از حضور شما!
2
در Unity و برنامه‌نویسی به زبان C#, متدهای دیباگ (Debugging) به توسعه‌دهندگان این امکان را می‌دهند تا به طور موثر‌تر خطاها را پیدا کنند، اطلاعات اضافی را در طول اجرای برنامه بررسی کنند، و از مراحل اجرای برنامه با استفاده از نقاط توقف (breakpoints) کنترل بهتری داشته باشند. در زیر، متدهای دیباگ مهم در Unity توضیح داده شده‌اند:

### 1. Debug.Log(object message):
- توضیح: یک پیام عادی به کنسول دیباگ Unity ارسال می‌کند.
- نمونه کد:

     int playerScore = 100;
Debug.Log("Player Score: " + playerScore);


### 2. Debug.LogWarning(object message):
- توضیح: یک هشدار به کنسول دیباگ ارسال می‌کند و پیام به رنگ زرد نمایش داده می‌شود.
- نمونه کد:

     string playerName = "John Doe";
Debug.LogWarning("Player name not set: " + playerName);


### 3. Debug.LogError(object message):
- توضیح: یک خطای مهم (error) به کنسول دیباگ ارسال می‌کند و پیام به رنگ قرمز نمایش داده می‌شود.
- نمونه کد:

     if (health <= 0)
{
Debug.LogError("Player is dead!");
}


### 4. Debug.LogFormat(string format, params object[] args):
- توضیح: یک پیام به کنسول دیباگ ارسال می‌کند با قابلیت فرمت‌بندی.
- نمونه کد:

     string playerName = "Alice";
int playerScore = 150;
Debug.LogFormat("Player: {0}, Score: {1}", playerName, playerScore);


### 5. Debug.Assert(bool condition):
- توضیح: یک ادعا (assertion) ایجاد می‌کند و اگر شرط مورد انتظار برقرار نباشد، یک خطای مهم ارسال می‌شود.
- نمونه کد:

     int playerHealth = 80;
Debug.Assert(playerHealth > 0, "Player health should be greater than zero.");


### 6. Debug.Break():
- توضیح: نقطه‌ی توقف را در کد ایجاد می‌کند و اجرای برنامه را متوقف می‌کند. معمولاً برای افزایش فهم از حالت برنامه در حال اجرا استفاده می‌شود.
- نمونه کد:

     if (enemyCount > 10)
{
Debug.Break(); // توقف در صورت تعداد دشمن‌ها بیشتر از 10 شود.
}


### 7. Debug.DrawLine(Vector3 start, Vector3 end, Color color = Color.white, float duration = 0.0f):
- توضیح: یک خط از نقطه‌ی شروع به نقطه‌ی پایان در صحنه رسم می‌کند (فقط در حالت اجرای ویرایشگر Unity).
- نمونه کد:

     Vector3 startPos = new Vector3(0, 0, 0);
Vector3

endPos = new Vector3(5, 0, 0);
Debug.DrawLine(startPos, endPos, Color.red, 2.0f);


### 8. Debug.DrawRay(Vector3 start, Vector3 dir, Color color = Color.white, float duration = 0.0f):
- توضیح: یک خط از یک نقطه با جهت داده‌شده در صحنه رسم می‌کند (فقط در حالت اجرای ویرایشگر Unity).
- نمونه کد:

     Vector3 rayStart = new Vector3(0, 0, 0);
Vector3 rayDirection = new Vector3(0, 1, 0);
Debug.DrawRay(rayStart, rayDirection * 5, Color.green, 2.0f);


### توجه:
- متدهای دیباگ معمولاً در حالت اجرای ویرایشگر Unity تاثیر دارند و در حالت اجرای برنامه‌های کامپایل شده توسط Unity، اجرا نمی‌شوند.
- بهینه‌تر است که استفاده از متدهای دیباگ را در محیط توسعه و تست انجام دهید و در نسخه‌های نهایی برنامه آن‌ها را حذف یا غیرفعال کنید.

#یونیتی #برنامه_نویسی
🔥5👍3👏1
در Unity، کلاس Gizmos از فضای نام UnityEngine برای رسم اشکال و خطوط در صحنه‌ی ویرایشگر Unity استفاده می‌شود. این امکان به توسعه‌دهندگان اجازه می‌دهد تا در حین توسعه و تست بازی، اشیاء گرافیکی را در صحنه ایجاد کرده و موقعیت، جهت یا ابعاد مختلف را بررسی کنند. در زیر، متدهای مهم کلاس Gizmos توضیح داده شده‌اند:

### 1. Gizmos.DrawRay(Vector3 from, Vector3 direction):
- توضیح: یک خط با شروع از نقطه from و در جهت direction رسم می‌کند.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawRay(transform.position, transform.forward * 5.0f);
}


### 2. Gizmos.DrawLine(Vector3 from, Vector3 to):
- توضیح: یک خط با شروع از نقطه from و پایان در نقطه to رسم می‌کند.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.blue;
Gizmos.DrawLine(transform.position, transform.position + new Vector3(5.0f, 0.0f, 0.0f));
}


### 3. Gizmos.DrawCube(Vector3 center, Vector3 size):
- توضیح: یک مکعب با مرکز center و ابعاد size رسم می‌کند.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.green;
Gizmos.DrawCube(transform.position, new Vector3(2.0f, 2.0f, 2.0f));
}


### 4. Gizmos.DrawSphere(Vector3 center, float radius):
- توضیح: یک کره با مرکز center و شعاع radius رسم می‌کند.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.yellow;
Gizmos.DrawSphere(transform.position, 3.0f);
}


### 5. Gizmos.DrawWireSphere(Vector3 center, float radius):
- توضیح: یک حلقه (شبکه) به دور یک کره با مرکز center و شعاع radius رسم می‌کند.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.cyan;
Gizmos.DrawWireSphere(transform.position, 3.0f);
}


### 6. Gizmos.DrawRay(Vector3 from, Vector3 direction, float length):
- توضیح: مانند DrawRay اما با امکان تعیین طول خط.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.magenta;
Gizmos.DrawRay(transform.position, transform.forward, 5.0f);
}


### 7. Gizmos.DrawWireCube(Vector3 center, Vector3 size):
- توضیح: مانند DrawCube اما با شبکه خطی به جای رنگ پر کردن.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.white;
Gizmos.DrawWireCube(transform.position, new Vector3(2.0f, 2.0f, 2.0f));
}


### 8. Gizmos.DrawMesh(Mesh mesh, Vector3 position, Quaternion rotation):
- توضیح: یک مش با مکان position و چرخش rotation رسم می‌کند.
- نمونه کد:

     void OnDrawGizmos()
{
Gizmos.color = Color.gray;
Gizmos.DrawMesh(mesh, transform.position, transform.rotation);
}


### توجه:
- این متدها معمولاً در متدهایی مانند OnDrawGizmos یا OnDrawGizmosSelected در اسکریپت‌های MonoBehaviour استفاده می‌شوند.
- این متدها بیشتر در حالت ویرایشگر Unity تاثیر دارند و در حالت اجرای بازی توسط بازیکن، معمولاً تاثیر گزار نیستند.
- از Gizmos.color می‌توانید برای تعیین رنگ اشکال مورد استفاده در متد مربوطه استفاده کنید.

#یونیتی #برنامه_نویسی
🔥8👍2🥰1
در Unity، کلاس Application از فضای نام UnityEngine استفاده می‌شود و اطلاعاتی در مورد وضعیت و اطلاعات برنامه فعلی فراهم می‌کند. در زیر، تعدادی از متدهای مهم این کلاس توضیح داده شده‌اند:

### 1. Application.LoadLevel(string sceneName) (از Unity 5.3 به بعد به SceneManager.LoadScene تغییر نام یافته است):
- توضیح: بارگذاری یک صحنه جدید با نام sceneName.
- نمونه کد:

     using UnityEngine.SceneManagement;

// بارگذاری صحنه با نام "Level2"
SceneManager.LoadScene("Level2");


### 2. Application.Quit():
- توضیح: خروج از برنامه در حال اجرا.
- نمونه کد:

     // خروج از برنامه
Application.Quit();


### 3. Application.isEditor:
- توضیح: یک خاصیت (property) بولین که نشان می‌دهد برنامه در حالت ویرایشگر (Editor) است یا در حالت اجرای بازی.
- نمونه کد:

     if (Application.isEditor)
{
Debug.Log("در حالت ویرایشگر");
}


### 4. Application.platform:
- توضیح: یک خاصیت (property) که نشان می‌دهد برنامه در چه پلتفرمی اجرا می‌شود (مثل Windows، macOS، iOS و ...).
- نمونه کد:

     RuntimePlatform platform = Application.platform;
Debug.Log("پلتفرم: " + platform);


### 5. Application.version:
- توضیح: یک خاصیت (property) که نسخه برنامه را نمایش می‌دهد.
- نمونه کد:

     string version = Application.version;
Debug.Log("نسخه برنامه: " + version);


### 6. Application.dataPath:
- توضیح: یک خاصیت (property) که مسیر دایرکتوری Assets در پروژه Unity را نشان می‌دهد.
- نمونه کد:

     string dataPath = Application.dataPath;
Debug.Log("مسیر دایرکتوری Assets: " + dataPath);


### 7. Application.persistentDataPath:
- توضیح: یک خاصیت (property) که مسیر دایرکتوری قابل دسترس برای ذخیره و بازیابی داده‌ها در طول زمان اجرا را نشان می‌دهد.
- نمونه کد:

     string persistentDataPath = Application.persistentDataPath;
Debug.Log("مسیر دایرکتوری قابل دسترس: " + persistentDataPath);


### 8. Application.platform:
- توضیح: یک خاصیت (property) که نشان می‌دهد برنامه در چه پلتفرمی اجرا می‌شود (مثل Windows، macOS، iOS و ...).
- نمونه کد:

     RuntimePlatform platform = Application.platform;
Debug.Log("پلتفرم: " + platform);


### 9. Application.internetReachability:
- توضیح: یک خاصیت (property) که وضعیت اتصال به اینترنت را نشان می‌دهد.
- مقادیر ممکن:
- NetworkReachability.NotReachable: عدم دسترسی به اینترنت.
- NetworkReachability.ReachableViaCarrierDataNetwork: دسترسی از طریق شبکه داده موبایل.
- NetworkReachability.ReachableViaLocalAreaNetwork: دسترسی از طریق شبکه محلی.
- نمونه کد:

     NetworkReachability reachability = Application.internetReachability;
Debug.Log("وضعیت اتصال به اینترنت: " + reachability);


### 10. Application.runInBackground:
- توضیح: یک خاصیت (property) که مشخص می‌کند آیا برنامه در حالت زمینه (بک‌گراند) اجرا می‌شود یا خیر.
- نمونه کد:

     bool runInBackground = Application.runInBackground;
Debug.Log("اجرای در زمینه: " + runInBackground);


این متدها و خصوصیات توسط توسعه‌دهندگان Unity برای برنامه نویسی و ارتباط با وضعیت برنامه به کار می‌روند.

#یونیتی #برنامه_نویسی
🔥6👍1
🔊 منبع رایگان آهنگ‌ها و افکت‌های صوتی برای پروژه‌های بازی

اگر به دنبال منابع صوتی برای بهبود تجربه کاربری و صداگذاری پروژه‌های بازی خود هستید، سایت Sound Jay یک گنجینه رایگان از آهنگ‌ها و افکت‌های صوتی را برای شما فراهم کرده است. این منابع با کیفیت بالا و دسته‌بندی‌های متنوع، از جمله موسیقی، صداهای محیط، و افکت‌های ویژه، می‌توانند به پروژه‌های بازی شما زندگی و جذابیت بیافزایند.

🔗 لینک سایت: Sound Jay

📄 شرایط استفاده:
قبل از استفاده از منابع صوتی، حتماً شرایط استفاده را مطالعه کنید و با آنها موافقت نمایید. به خصوص، ممکن است نیاز باشد که نام صاحب امتیاز یا لینک به سایت مرجع را در پروژه‌های خود ذکر کنید.

🎧 استفاده کنید و لذت ببرید!
🔥4👍1🤔1
🚀 آموزش گیت از مقدماتی تا پیشرفته

توضیح:
در این دوره گیت، از مباحث ابتدایی تا مفاهیم پیشرفته و کاربردهای عملی آن پوشش داده شده است. شما با استفاده از لینک زیر می‌توانید به تمامی ویدئوها دسترسی پیدا کنید:

🔗لینک دوره گیت

مباحثی که در دوره آموزش داده می‌شوند:
1. مقدمه‌ای به سیستم کنترل نسخه و نیازمندی‌های گیت📚
2. ایجاد یک مخزن (Repository) جدید🏗
3. اضافه کردن فایل‌ها و تغییرات به مخزن📝
4. استفاده از شاخه‌ها (Branches) و ادغام (Merge)🌲
5. حل خطاها و کنترل وضعیت (Status) فایل‌ها🛠
6. مدیریت کننده‌ها و همکاران (Collaborators) 👥
7. استفاده از گیت‌هاب (GitHub) برای همکاری و اشتراک‌گذاری پروژه🤝

با این دوره، شما قدرتمندترین ابزار کنترل نسخه را به عنوان یک توسعه‌دهنده خواهید فهمید و می‌توانید به صورت بهتری با تیم خود همکاری کنید.
🔥7👍2
در Unity، کلاس Time از فضای نام UnityEngine استفاده می‌شود و اطلاعات مربوط به زمان اجرای بازی را فراهم می‌کند. این کلاس شامل متدها و خصوصیاتی است که به توسعه‌دهندگان این امکان را می‌دهد تا زمان اجرای بازی را بسنجند و کنترل کنند. در زیر، تعدادی از متدها و خصوصیات مهم این کلاس توضیح داده شده‌اند:

### 1. Time.deltaTime:
- توضیح: یک خاصیت (property) که زمانی که طول یک چرخه اجرای بازی (frame) به ثانیه می‌شود را نشان می‌دهد. این مقدار معمولاً برای حرکت صاف و تطبیقی بر اساس فریم‌ها استفاده می‌شود.
- نمونه کد:

     void Update()
{
float movementSpeed = 5.0f;
transform.Translate(Vector3.forward * movementSpeed * Time.deltaTime);
}


### 2. Time.fixedDeltaTime:
- توضیح: یک خاصیت (property) که زمان مشخص شده برای هر چرخه اجرای بازی در حالت فیکس (Fixed Update) را نشان می‌دهد.
- نمونه کد:

     void FixedUpdate()
{
float rotationSpeed = 90.0f;
transform.Rotate(Vector3.up * rotationSpeed * Time.fixedDeltaTime);
}


### 3. Time.timeScale:
- توضیح: یک خاصیت (property) که مقیاس زمانی را کنترل می‌کند. مقدار 1 برابر با زمان واقعی است و مقادیر کمتر از 1 (مانند 0.5) باعث کندتر شدن بازی و مقادیر بیشتر از 1 باعث سریعتر شدن بازی می‌شوند.
- نمونه کد:

     void PauseGame()
{
Time.timeScale = 0.0f; // بازی را متوقف کن
}

void ResumeGame()
{
Time.timeScale = 1.0f; // ادامه اجرای بازی
}


### 4. Time.time:
- توضیح: یک خاصیت (property) که میزان زمان گذشته از زمان شروع بازی را نشان می‌دهد.
- نمونه کد:

     void Update()
{
float elapsedTime = Time.time; // زمان گذشته از شروع بازی
Debug.Log("Elapsed Time: " + elapsedTime);
}


### 5. Time.unscaledTime:
- توضیح: یک خاصیت (property) که میزان زمان گذشته از زمان شروع بازی را نشان می‌دهد، بدون در نظر گرفتن مقیاس زمانی (Time.timeScale).
- نمونه کد:

     void Update()
{
float unscaledTime = Time.unscaledTime; // زمان گذشته بدون در نظر گرفتن مقیاس زمانی
Debug.Log("Elapsed Time (Unscaled): " + unscaledTime);
}


### 6. Time.fixedTime:
- توضیح: یک خاصیت (property) که میزان زمان گذشته از زمان شروع بازی را در چرخه‌های اجرای بازی محدود به حالت Fixed Update نشان می‌دهد.
- نمونه کد:

     void FixedUpdate()
{
float fixedTime = Time.fixedTime; // زمان گذشته از شروع بازی در حالت Fixed Update
Debug.Log("Fixed Time: " + fixedTime);
}


### 7. Time.realtimeSinceStartup:
- توضیح: یک خاصیت (property) که میزان زمان گذشته از زمان شروع سیستم (از زمان روشن بودن سیستم) را نشان می‌دهد.
- نمونه کد:

     void Start()
{
float realTime = Time.realtimeSinceStartup; // زمان گذشته از شروع سیستم
Debug.Log("Real Time Since Startup: " + realTime);
}


### توجه:
- این متدها و خصوصیات بیشتر در متدهای Update و FixedUpdate از MonoBehaviour به کار می‌روند.
- Time.deltaTime و Time.fixedDeltaTime معمولاً برای جلوگیری از نوسانات حرکت و اجسام در بازی در هر نرخ فریم استفاده می‌شوند.
- Time.timeScale معمولا

ً برای ایجاد اثرات مثل ایستادن زمان یا افزایش سرعت بازی استفاده می‌شود.

#یونیتی #برنامه_نویسی
🔥5👍2👏1
در Unity، کلاس SceneManager جهت مدیریت صحنه‌ها (scenes) استفاده می‌شود.
### 1. SceneManager.LoadScene(string sceneName):
- توضیح: این متد برای بارگذاری یک صحنه جدید با نام مشخص شده استفاده می‌شود.
- نمونه کد:

     using UnityEngine.SceneManagement;

// بارگذاری یک صحنه با نام "Level2"
SceneManager.LoadScene("Level2");


### 2. SceneManager.LoadScene(int sceneBuildIndex):
- توضیح: این متد برای بارگذاری یک صحنه بر اساس ایندکس ساختار صحنه‌ها استفاده می‌شود. این ایندکس به ترتیب درخت صحنه‌ها در پروژه Unity است.
- نمونه کد:

     using UnityEngine.SceneManagement;

// بارگذاری صحنه با ایندکس 1
SceneManager.LoadScene(1);


### 3. SceneManager.LoadSceneAsync(string sceneName):
- توضیح: این متد به صورت ناهمزمان (asynchronously) یک صحنه جدید را بارگذاری می‌کند، که به منظور جلوگیری از توقف اجرای بازی در حین بارگذاری صحنه استفاده می‌شود.
- نمونه کد:

     using UnityEngine.SceneManagement;

// بارگذاری یک صحنه به صورت ناهمزمان
StartCoroutine(LoadSceneAsync("Level2"));

IEnumerator LoadSceneAsync(string sceneName)
{
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName);

while (!asyncLoad.isDone)
{
float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f);
Debug.Log("Loading progress: " + progress * 100f + "%");
yield return null;
}
}


### 4. SceneManager.LoadSceneAsync(int sceneBuildIndex):
- توضیح: همانند متد قبلی، اما با استفاده از ایندکس صحنه برای بارگذاری.
- نمونه کد:

     using UnityEngine.SceneManagement;

// بارگذاری صحنه به صورت ناهمزمان با استفاده از ایندکس 1
StartCoroutine(LoadSceneAsync(1));


### 5. SceneManager.GetActiveScene():
- توضیح: این متد صحنه‌ای که در حال حاضر فعال است را بازمی‌گرداند.
- نمونه کد:

     using UnityEngine.SceneManagement;

// دریافت صحنه‌ای که در حال حاضر فعال است
Scene currentScene = SceneManager.GetActiveScene();
Debug.Log("Active Scene name: " + currentScene.name);


### 6. SceneManager.GetSceneByName(string sceneName):
- توضیح: این متد اطلاعات یک صحنه را بر اساس نام آن بازمی‌گرداند، اما بدون بارگذاری آن.
- نمونه کد:

     using UnityEngine.SceneManagement;

// دریافت اطلاعات یک صحنه بر اساس نام
Scene targetScene = SceneManager.GetSceneByName("Level2");


### 7. SceneManager.GetSceneByBuildIndex(int buildIndex):
- توضیح: این متد اطلاعات یک صحنه را بر اساس ایندکس ساختار صحنه‌ها بازمی‌گرداند، اما بدون بارگذاری آن.
- نمونه کد:

     using UnityEngine.SceneManagement;

// دریافت اطلاعات یک صحنه بر اساس ایندکس
Scene targetScene = SceneManager.GetSceneByBuildIndex(1);


### 8. SceneManager.LoadScene(string sceneName, LoadSceneMode mode):
- توضیح: این متد برای بارگذاری یک صحنه با حالت خاص (مثل اضافه کردن به صحنه فعلی یا جایگزین کردن آن) استفاده می‌شود.
- نمونه کد:

     using UnityEngine.SceneManagement;

// بارگذاری یک صحنه و جایگزین کردن صحنه فعلی
SceneManager.LoadScene("Level2", LoadSceneMode.Single);


### 9. SceneManager.MergeScenes(Scene sourceScene, Scene destinationScene):
- توضیح: این متد به ترکیب (ادغام) دو صحنه بازی کمک می‌کند.
- نمونه کد:

     using UnityEngine.SceneManagement;

// ادغام دو صحنه
Scene sourceScene = SceneManager.GetSceneByName("SourceScene");
Scene destinationScene = SceneManager.GetSceneByName("DestinationScene");
SceneManager

.MergeScenes(sourceScene, destinationScene);


### 10. SceneManager.UnloadScene(string sceneName):
- توضیح: این متد برای خارج کردن یک صحنه از حافظه (آن‌را آزاد کردن) استفاده می‌شود.
- نمونه کد:

     using UnityEngine.SceneManagement;

// خارج کردن یک صحنه از حافظه
SceneManager.UnloadScene("Level1");


### توجه:
- برخی از متدها و مدیریت‌ها بر اساس اطلاعات ناهمزمان (Async) عمل می‌کنند و برای اجتناب از توقف اجرای بازی در حین عملیات مهم است.

#یونیتی #برنامه_نویسی
🔥10
در یونیتی Event Methods یا متدهای رویدادها مربوط به چرخه حیات اجزای MonoBehaviour هستند. این متدها در طول زندگی یک اجزا (مثل یک شیء در بازی) فراخوانی می‌شوند. برخی از متدهای رویدادها مهم شامل Awake`، `Start`، `Update`، `FixedUpdate`، `LateUpdate و OnDestroy هستند.

### 1. Awake:
- توضیح: این متد فراخوانی می‌شود هنگامی که اجزا (مثل یک شیء) ایجاد می‌شوند. این متد معمولاً برای اولیه‌سازی منابع و اطلاعات مورد نیاز قبل از شروع بازی استفاده می‌شود.
- نمونه کد:

  void Awake()
{
// اولیه‌سازی منابع و اطلاعات
}


### 2. Start:
- توضیح: این متد فراخوانی می‌شود در هنگام شروع اجرای بازی و پس از اجرای متد Awake. این متد برای اجرای کدهایی که به منابع دیگری (مثل اجزا دیگر یا دستورهای شروعی) وابسته هستند، مفید است.
- نمونه کد:

  void Start()
{
// کدهای شروعی پس از اجرای Awake
}


### 3. Update:
- توضیح: این متد در هر چرخه فریم (frame) فراخوانی می‌شود. این متد برای اعمال تغییرات مربوط به لحظه به لحظه (مثل حرکت شیء) استفاده می‌شود.
- نمونه کد:

  void Update()
{
// کدهای اعمال تغییرات در هر چرخه فریم
}


### 4. FixedUpdate:
- توضیح: این متد در هر چرخه فیکس شده (fixed frame) فراخوانی می‌شود. این متد برای اعمال تغییرات مربوط به فیزیک (مثل حرکت با اصطکاک) که ممکن است در هر فریم متفاوت باشند، استفاده می‌شود.
- نمونه کد:

  void FixedUpdate()
{
// کدهای اعمال تغییرات در هر چرخه فیکس شده
}


### 5. LateUpdate:
- توضیح: این متد در هر چرخه فریم بعد از اجرای متدهای Update فراخوانی می‌شود. این متد معمولاً برای اعمال تغییراتی استفاده می‌شود که به اطلاعات محاسباتی مربوط به فریم فعلی وابسته‌اند.
- نمونه کد:

  void LateUpdate()
{
// کدهای اعمال تغییرات پس از اجرای Update
}


### 6. OnDestroy:
- توضیح: این متد در هنگام از بین رفتن اجزاء (مثل حذف یک شیء از صحنه) فراخوانی می‌شود. این متد برای اجرای کد مرتبط با تمیز کردن منابع و حالت‌ها مفید است.
- نمونه کد:

  void OnDestroy()
{
// کدهای تمیز کردن منابع و اطلاعات
}


این متدها بخشی از چرخه حیات اجزاء در Unity را تشکیل می‌دهند و به توسعه‌دهندگان این امکان را می‌دهند که کدهای مربوط به اجزاء را در لحظات مختلف اجرا کنند.

#یونیتی #برنامه_نویسی
متدهای Callback در Unity معمولاً به متدهایی اطلاق می‌شود که توسط سیستم یا اجزای دیگر فراخوانی می‌شوند. این متدها به توسعه‌دهندگان این امکان را می‌دهند که بر اساس وقایع خاصی که در طول اجرای بازی رخ می‌دهند، عملیات مشخصی انجام دهند. در زیر، توضیحاتی در مورد چند متد Callback مهم در Unity آورده شده است:

### 1. OnEnable:
- توضیح: این متد زمانی صدا زده می‌شود که اجزا (مثل یک اسکریپت) فعال شوند. این ایده‌آل برای اجرای کدهایی که باید زمانی اجرا شوند که یک اجزا (مثل یک اسکریپت) فعال شود، مناسب است.
- نمونه کد:

  void OnEnable()
{
// کدهای اجرا شده هنگامی که اجزا فعال می‌شوند
}


### 2. OnDisable:
- توضیح: این متد زمانی صدا زده می‌شود که اجزا غیرفعال می‌شوند. این ایده‌آل برای تمیز کردن یا انجام عملیاتی قبل از غیرفعال شدن یک اجزا است.
- نمونه کد:

  void OnDisable()
{
// کدهای اجرا شده هنگامی که اجزا غیرفعال می‌شوند
}


### 3. OnValidate:
- توضیح: این متد زمانی صدا زده می‌شود که اجزا (مثل یک اسکریپت) در ویرایشگر Unity تغییر کرده و نیاز به اعتبارسنجی دارند. معمولاً برای اطمینان از صحت داده‌ها و اعمال تغییرات مرتبط با آن‌ها استفاده می‌شود.
- نمونه کد:

  void OnValidate()
{
// کدهای اجرا شده هنگام اعتبارسنجی اجزا
}


### 4. OnApplicationQuit:
- توضیح: این متد زمانی صدا زده می‌شود که کاربر بازی را قبل از خروج از بازی انجام دهد. این متد معمولاً برای انجام تمیزکارها (مثل ذخیره اطلاعات) در هنگام خروج از بازی استفاده می‌شود.
- نمونه کد:

  void OnApplicationQuit()
{
// کدهای اجرا شده هنگام خروج از بازی
}


### 5. OnApplicationFocus:
- توضیح: این متد زمانی صدا زده می‌شود که برنامه فوکوس می‌شود یا از فوکوس خارج می‌شود. معمولاً برای مدیریت عملکرد و اعمال تغییراتی که ممکن است با ورود یا خروج از فوکوس مرتبط باشند استفاده می‌شود.
- نمونه کد:

  void OnApplicationFocus(bool hasFocus)
{
if (hasFocus)
{
// کدهای اجرا شده هنگامی که برنامه فوکوس دارد
}
else
{
// کدهای اجرا شده هنگامی که برنامه از فوکوس خارج می‌شود
}
}


### 6. OnApplicationPause:


- توضیح: این متد زمانی صدا زده می‌شود که برنامه وارد حالت توقف (Pause) می‌شود. معمولاً برای مدیریت عملکرد و اعمال تغییرات مرتبط با ورود یا خروج از حالت توقف مورد استفاده قرار می‌گیرد.
- نمونه کد:

  void OnApplicationPause(bool isPaused)
{
if (isPaused)
{
// کدهای اجرا شده هنگامی که برنامه وارد حالت توقف می‌شود
}
else
{
// کدهای اجرا شده هنگامی که برنامه از حالت توقف خارج می‌شود
}
}


این متدها برخی از Callback Methods مهم در Unity هستند و می‌توانند برای ایجاد تعاملات مختلف در طول اجرای بازی مورد استفاده قرار گیرند.

#یونیتی #برنامه_نویسی
👍3🔥3👏2👌1
درود دوستان عزیز، امیدوارم حالتون عالی باشه.

به درخواست یکی از دوستان عزیز، قصد دارم توضیحاتی در مورد الگوهای طراحی مهم در یونیتی ارائه بدم و به تدریج مثال‌هایی رو هم ارائه بدم. پس اگر می‌خواهید در پروژه‌های بزرگتر با مشکل مواجه نشوید، این پست‌ها را با دقت مطالعه کنید.

دیزاین پترن‌ها در Unity به عنوان الگوهای معماری برنامه‌نویسی استفاده می‌شوند که به توسعه‌دهندگان کمک می‌کنند تا کد بهتری بنویسند و ساختار بهتری برای پروژه‌های خود ایجاد کنند. در زیر به برخی از اصطلاحات و دیزاین پترن‌های معروف در Unity اشاره میشود:

1. Singleton Pattern (الگوی تک نمونه):
این الگو به توسعه‌دهندگان کمک می‌کند تا یک نمونه از یک کلاس را فقط یک بار ایجاد کنند و سپس از این نمونه به عنوان نقطه دسترسی به آن کلاس استفاده کنند. این الگو معمولاً برای مواردی مانند مدیریت داده‌های عمومی (مانند مدیر صدا یا مدیر اسکریپت) استفاده می‌شود.

2. Observer Pattern (الگوی مشاهده‌گر):
این الگو به توسعه‌دهندگان این امکان را می‌دهد که یک مکانیزم اعلانیه (معمولاً یک رویداد) برای اشتراک اطلاعات بین اشیا ایجاد کنند. معمولاً این الگو برای پاسخ به رویدادها و واکنش به تغییرات در بازی استفاده می‌شود.

3. Factory Pattern (الگوی کارخانه):
این الگو به توسعه‌دهندگان این امکان را می‌دهد که ایجاد شیء را از پیاده‌سازی جداگانه‌ای که برای ساختن شیء مورد نظر مسئول است، جدا کنند. این الگو برای ایجاد نمونه‌های مختلف اشیاء بر اساس پارامترهای ورودی مورد استفاده قرار می‌گیرد.

4. State Pattern (الگوی وضعیت):
این الگو به توسعه‌دهندگان کمک می‌کند تا رفتارهای مختلف یک شیء را در وضعیت‌های مختلف تعریف کنند. به این ترتیب، هرگاه وضعیت یک شیء تغییر کند، رفتار آن نیز تغییر می‌کند.

اینها تنها چند نمونه از دیزاین پترن‌هایی هستند که می‌توانید در Unity استفاده کنید. بسته به نیازهای پروژه خود، ممکن است به دیگر الگوها و رویکردهای معماری هم پی ببرید.

#یونیتی #برنامه_نویسی
🔥5👍4🤝1