تعلم لغة سي شارب C# لتصميم العاب Unity
السلام عليكم ورحمة الله
اما بعد فان هذا الموضوع لتعلم لغة سي شارب مع التركيز اكثر على اليونيتي لتطوير العاب
هذا درس اخر مشابه للدرس السابق حول لغة C#
الدرس السابق من هنا
كنت دخلت الى انرل انجن سابقا وكانت تجربة صعبة لان المشكلة كانت في اغلب الدروس باليوتيب تشرح في نسخة unreal engine 5
والمشكلة ان هذا الاصدار الجديد يحتاج جهاز حاسوب قوي لذلك كان عندي لاق بتلك النسخة فحاولت العمل على نسخة 4.27 لكن مع الاسف هناك اختلافات بين هذا الاصدار والاصدار الخامس فمثلا انت تتابع دورة معينة حتى تجد نفسك عالق في نافذة معينة توجد بالشرح ولا توجد عندك انت في نسختك واكتشفت لاحقا ان انرل انجن فيه عيب كبير وهو ان كل نسخة جديدة تكون مختلفة عن الاخرى في بعض الاضافات ونوافذ جديدة وهذا يشكل مشكيل عند المبتدئين للتعلم البرنماج
ثم الدروس باليوتيب فيها نوع من السطحية فلا يشرحون لك مثلا اذا قام باضافة نود جديد لماذا قام باضافته وكيف تتعامل معه بل فقط يقولك اتبع وافعل ما افعله ويغفلون شروحات مهمة لا يخبرونك بها بالدورات
المشكلة الاخرى التي واجهتني بالبرنماج هي الملفات التي اقوم بحفظها بمجرد فتح واغلاق البرنماج تختفي كل الملفات ويختفي معها البلوبرينت الذي وضعته سابقا وهذا فعلا مثير للاعصاب هه المهم يمكن اضافات معلومات جديدة اذا توفرت عن انرل انجن ولان دعونا نبدا الرحلة في عالم سي شارب واليونيتي
لغة سي شارب C#
اولا سنحتاج محرر اكواد للعمل عليه اثناء تنفيد اوامر الكود
لذلك قمت بتجربة اقوى برنماج لتحرير الاكواد وهو برنماج Visual studio community تقوم بتحميله ثم اثناء التثبيت سيطلب منك اختيار الاضافات التي تريد تحميلها وعلينا اختيار الاضافات التي تناسب لغة C#
ASPNET و NET Desktop وNET Multi PLatform APP و Applications windows و Unity Games سيكون الحجم الكلي تقريبا 25GB جيكا
ولكن اذا كنت تريد فقط سي شارب لليونيتي unity فان اضافة Develeppement Unity كافية للعمل على البرنماج ويعطيك حجم تحميل الاداة فقط 3 جيكا فقط وهذا جيد ثم يمكنك فيما بعد تحميل ادوات اخرى اذا كنت تريد العمل على تطبيقات و اشياء اخرى
للتاكد ان البرنماج يعمل مع اليونيتي تفتح يونيتي unity ثم تذهب الى قائمة Edit ثم Preferences ثم في External tools تاكد من اختيار Visual studio او اي محرر اكواد عندك بالحاسوب الذي تستخذمه
وهذا هو عيب البرنماج ان مساحات الملفات كبيرة لانه يحتوي على كل ما ستحتاجه مستقبلا يعني ولكن عيبه الثاني هو انه ثقيل على الجهاز وياخذ بعض الوقت ليفتح معك
ثم لدينا برنماج اخر لمحرر الاكواد وهو Visual studio code هو خفيف على الاجهزة ومناسب جدا
ولكن فيه مشاكل كثيرة اثناء محاولة تنصيب سي شارب داخله او اي لغة اخرى وفيه مشاكل اثناء محاولة عمل compile للاكواد ومزعج جدا من هذه الناحية ويحتاج الى صيانة هذا العيب الكبير بكل صراحة
لذلك لدي حل نهائي لهذه البرامج التي تسبب وجع الراس وهو برنماج اخر صغير جدا وخفيف بحجم 35 ميغا فقط وهو برنماج Sharpdevelope انه البرنماج الذي استعمله مؤقتا فقط حتى اقوم بتنصيب visual studio community الاساسي
Download here تحميل البرنماج هنا https://bit.ly/4aq65OY You will need also SDK ستحتاج لهذا البرنماج كذلك ضروري لكل برامج محرر الاكواد Download SDK Here https://dotnet.microsoft.com/en-us/download/dotnet/9.0
تقوم بتنصيب SDK اولا ثم تفتح البرنماج تضغط New solution ثم console application
وهكذا نكون مستعدين للبدء الان
اساسيات سي شارب C#
اي كود سنكتبه لبد من كتابته بين هذه الاقواس
{public static void Main(string[] args)
{
Console.Title ="lhob";
Console.WriteLine("Hello yass baby");
// TODO: Implement Functionality Here
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
consol writeline هو امر بقراءة الاكواد او استخرج لي العبارة التالية
console title هو امر بتغيير اسم النافذة التي يظهرها لنا الconsole
console readkey هو امر بتوقيف الشاشة كي لا تنغلق تلقائيا حتى نضغط على احد ازرار
الامر باللون الاخضر // لاضافة ملاحظات وعناوين داخل محرر الكود ولا يستطيع البرنماج قراءتها
الاكواد لبد ان تنتهي دائما ب علامة ; يطلق عليها statment
نضغط F5 للقيام بعملية compile او قراءة للكود
العلامات المطلوبة دائما اثناء كتابة الكود في حاسوب محمول مثلا
" " تجدها بالضغط رقم 3 بالاعلى الكيبورد
; تجدها بالضغط زر النقطة فوق Alt Gr
= تجدها عند الضغط زر يساوي بالاعلى
. النقطة تجدها بالضغط shift مع زر النقطة
) تجدها قرب زر يساوي
( تجدها في الرقم 5 بالاعلى
{ تجدها بالضغط Alt Gr مع 4 بالاعلى
} تجدها بالضغط Alt Gr وزر يساوي
[ تجدها بالضغط Alt Gr ورقم 5 بالاعلى
] تجدها بالضغط Alt Gr وزر قرب الصفر بالاعلى
> بالضغط على زر قرب واحد بالاعلى
< بالضغط shift مع نفس الزر قرب واحد
/ زر المتواجد فوق ctrl
\ بالضغط Alt Gr و 8
; فاصلة منقوطة انتباه هذه العلامة دائمة في نهاية كل سطر اكواد لكن في هذا الموضوع تظهر لي في بداية العملية اوك كي لا تختلط عليكم الامور
المتغاييرات Variables
المتغاييرات تستعمل لتخزين بيانات مؤقتة او دائمة في الذاكرة memory بغرض التعامل معها اثناء تنفيد البرنماج
مثلا لو اردنا انشاء برنماج يعطينا مجموع عددين سيكون علينا حجز في الذاكرة مكانين لمتغايرين رقميين
ثم نعطي كل متغايير منهما قيمة كي نتمكن من حساب المجموع
وطريقة الاعلان عن متغايير كما يلي
كتابة نوع المتغايير اولا لان فيه انواع متعددة والقيمة التي نريد تخزينها فيه
قيمة رقمية --- متغايير رقمي
قيمة حرفية --- متغايير حرفي
قيمة نصية --- متغايير نصي الى اخره
الرقمي اعداد صحيحة : int // العشري ذات دقة عالية : Double
النصي : String // العشري ذات ذقة عادية : Float
منطقي صح او خطاء : bool // التاريخ : DateTime
الحروف : Char // وانواع اخرى
شروط كتابة المتغايير
يجب ان يبدا بحرف ام علامة _
لا يحتوي على مسافة ولا يبدا برقم ولا يبدا برمز ولا يجب استعمال اسماء محجوزة مثل int لانها اسمها متغاييرات ولا اي اسم يستعمله البرنماج مثل static وغيره
الفرق بين float و Double
float يصل فقط الى سبع احرف بعد الفاصلة
يحجز فقط 4 بايت من الذاكرة نواة 32بايت ونطاق اضيق و سريع في العمليات الحسابية مناسب للارقام غير حاسمة مثل الالعاب او الرسومات ثلاثي الابعاد فهو يكفي ويوفر اداء افضل واستهلاك اقل للذاكرة
Double تصل اعداده العشرية الى 15 رقم بعد الفاصلة
يحجز 8 بايت من الذاكرة نواة 64بايت ونطاق اوسع بطيء بالعمليات الحسابية لكنه اكثر دقة ضروري فقط اثناء الحسابات الدقيقة جدا مثل الفزياء او الاموال
1. المتغيرات الأساسية (Primitive Types) أ. الأرقام الصحيحة int: لتخزين الأعداد الصحيحة. int score = 100; long: لتخزين أعداد صحيحة أكبر حجمًا. long highScore = 1000000L; ب. الأرقام العشرية float: للأرقام العشرية ذات الدقة العادية. float speed = 5.5f; double: للأرقام العشرية ذات الدقة الأعلى. double precision = 3.141592653589793; ج. القيم المنطقية bool: لتخزين قيم "true" أو "false". bool isGameOver = false; د. الأحرف والنصوص char: لتخزين حرف واحد. char grade = 'A'; string: لتخزين النصوص. string playerName = "Alice"; 2. المتغيرات المصفوفية (Array and List Types) Array: لتخزين قائمة ثابتة من العناصر. int[] scores = { 10, 20, 30 }; List<T>: لتخزين قائمة ديناميكية يمكن تعديل حجمها. List<string> inventory = new List<string>(); inventory.Add("Sword"); 3. المتغيرات المرجعية (Reference Types) GameObject: يشير إلى كائن في المشهد. GameObject player = GameObject.Find("Player"); Transform: يُستخدم لإدارة الموقع والدوران والقياس. Transform playerTransform = player.transform; Component: للإشارة إلى مكونات معينة مثل Rigidbody أو Collider. Rigidbody rb = GetComponent<Rigidbody>(); 4. أنواع Unity المخصصة أ. المتغيرات ثلاثية الأبعاد Vector2: يُستخدم لتمثيل الإحداثيات ثنائية الأبعاد. Vector2 position = new Vector2(5, 10); Vector3: للإحداثيات ثلاثية الأبعاد. Vector3 position = new Vector3(1, 2, 3); ب. Quaternions تُستخدم لتحديد الدوران. Quaternion rotation = Quaternion.Euler(0, 90, 0); ج. Color لتحديد الألوان. Color color = Color.red; 5. الأنواع المخصصة (Custom Types) يمكنك إنشاء أنواع مخصصة باستخدام struct أو class. public struct PlayerStats { public int health; public int mana; } 6. المتغيرات الزمنية Time.deltaTime: لحساب الفرق الزمني بين الإطارات، مما يجعل الحركة سلسة. transform.Translate(Vector3.forward * speed * Time.deltaTime); 7. المتغيرات الفيزيائية Rigidbody: للتحكم في الجسم الفيزيائي. Rigidbody rb = GetComponent<Rigidbody>(); rb.AddForce(Vector3.up * 10); 8. المتغيرات المتعلقة بالدخل (Input Variables) Input.GetAxis: للحصول على القيم من لوحة المفاتيح أو وحدة التحكم. float horizontal = Input.GetAxis("Horizontal"); 9. الأنواع الثابتة (Constant Types) const: متغير لا يمكن تغييره بعد التهيئة. const int MaxHealth = 100; readonly: متغير يُحدد عند التشغيل فقط. readonly string GameTitle = "My Unity Game"; 10. المتغيرات الثابتة عالميًا (Static Variables) تُستخدم لمشاركة القيم عبر جميع الكائنات من نفس النوع. public static int playerCount = 0; اختر نوع المتغير بناءً على احتياجات اللعبة لتحسين الأداء.
لكتابة ملاحظات داخل البرنماج في عدة اسطر نستعمل كود
/* ....... */
الثوابت مثل المتغاييرات لكنها تبقى ثابتة ولا تتغير اثناء تنفيد البرنماج
الاعلان عن الثوابت نستعمل كلمة const
مثلا
const int myNumber=3;
const string name="karim";
الفرق بين اوامر الاخراج write و writeLine
write يطبع الكلمات في سطر واحد
writeline يطبع كل كلمة في سطر لوحدها
الان سنقوم بانشاء برنماج يطلب منا ادخال الاسم وحين نكتب الاسم سوف يظهر لنا رسالة ترحيبية
Console.Write("enter your name: ");
string name=Console.ReadLine();
Console.Write("Hello mr: "+name);
ملاحظة تاكد من الحجم الصحيح للحروف فمثلا لبد الحرف C كبير في كلمة Console والحرف الكبير ايضا في كلمة Write اوك حجم الحروف مهم جدا لان اي حرف كبير اذا كتبته صغير سيعطيك خطاء في قراءة الكود
نستعمل + لدمج مع المتغايير
طلبنا من البرنماج حفظ القيمة التي سيكتبها الشخص ثم يستدعي الرسالة الترحيبية بعد ادخال الاسم المخزن داخل name
لو حاولنا القيام مثلا بطلب الشخص ادخال عمره باستعمال متغايير رقمي int هكذا
Console.Write("enter your age: ");
int age=Console.ReadLine();
فسوف يعطينا خطاء لان الدالة Console.ReadLine هي دالة نصية ولا يمكن وضعها داخل متغايير الرقمي
اذا طريقة تحويل الدالة النصية الى دالة رقمية بطريقتين
الطريقة الاولى باستعمال Parse على الشكل التالي
Console.Write("enter your name: ");
string name=Console.ReadLine();
Console.Write("enter your age: ");
التحويل
int age=int.Parse(Console.ReadLine());
ثم نكتب
Console.Write("Hello Mr: "+ name +"your age is: "+age);
الطريقة الثانية
int age=Convert.ToInt32(Console.ReadLine());
ToInt32 تقوم باخذ قيمة مدخلة من نوع معين مثل string - float-double
وتحاول تحويلها الى عدد صحيح int
امثلة
تحويل نص رقمي الى عدد صحيح
لدينا
string numberText="123";
int number=
الحل
Convert.ToInt32(numberText);
Console.WriteLine(number);
الناتج 123
تحويل رقم عشري الى عدد صحيح تقريبي
لدينا
double decimalNumber=12.9;
int integer=
الحل
Convert.ToInt32(decimalNumber);
Console.WriteLine(integer);
الناتج 13
تحويل قيمة منطقية boolean
لدينا
bool isTrue=true;
int number =
Convert.ToInt32(isTrue);
Console.WriteLine(number);
الناتج 1 true
لدينا الروابط او القواعد
وهي مجموعة من الرموز المستعملة لانجاز مجموعة من العمليات
1 روابط رياضية
تستعمل من اجل القيام بعمليات حسابية وهي رموز معروفة
+ للجمع . - للطرح , / القسمة , * الضرب , % باقي القسمة
2 الروابط المنطقية
ترجع لنا النتيجة صح او خطا حسب العملية المنطقية سواء كانت عبارة او مجموعة عبارات
الرابط && : يعني And و : يعطي قيمة صحيحة اذا كانت كل الاطراف صحيحة
الرابط II : يعني Or او : يعطي قيمة صحيحة اذا كانت كل الاطراف صحيحة
الرابط Cond?Var1:Var2 : يتحقق من الشرط اذا لم يتحقق يمر الى الامر الذي يليه
3 الروابط المقارنة
تستعمل للمقارنة بين المتغايرات غالبا يستعمل معها متغايير bool
IS : للتحقق من نوع المتغايير
> : اصغر قطعا
< : اكبر قطعا
=> , =< : اصغرمن او يساوي , اكبر من او يساوي
=! : يخالف
== : يساوي
4 روابط اعطاء قيمة :
= : لاعطار قيمة لمتغايير
- - , ++ : تزيد او تنقص بمقدار واحد
=% , =* ; =/ ; =- ; =+ : لها نفس دور العمليات الحسابية العادية
مثال عمليات حسابية
Arithmetic Operators
int x , y,sum;
x=7;
y=9;
sum=x+y;
للطباعة الامر نكتب
;Console.Write("answer is:"+sum)
هذا الكود لوقف الشاشة طبعا اذا لم تكتبه سابقا نكتبه تحته ِ;()Console.readkey
يمكنك تغير عبارة answer is وتضع في مكانها اي عبارة اخرى
وسيعطينا النتيجة 16 التي هي عملية الجمع بين قيمة X و Y
سيتم اضافة معلومات جديدة في هذا الموضوع كلما توفر لدينا الوقت لذلك
فابقى على الاطلاع قدر الامكان ونتمنى للجميع الاستفادة والنفع وتكون صدقة جارية انشاء الله ادعي لنا من قلبك وبتوفيق انشاء الله
اشترك بالقناة لدعمنا