القائمة الرئيسية

الصفحات

Unity Game Engine: كائنات اللعبة الاساسية والثانوية على Unity

Unity Game Engine: كائنات اللعبة الاساسية والثانوية على Unity

 Unity Game Engine: كائنات اللعبة الاساسية والثانوية على Unity 

حان الوقت لوضع ألعاب الأطفال جانباً ، فبدلا من ذلك، 
نحن سنتعلم كيفية إنشاء فرعي gameObjects من gameObjects 
الرئيسية في التسلسل الهرمي، وهي تقنية يبرهن على 
أن تكون مفيدة للغاية عند استخدامها مع طريقة ()Instantiate .
إذا كنت قد وصلت مباشرة إلى هذا البرنامج التعليمي ، 
نوصيك بمراجعة البرنامج التعليمي الأخير الخاص بنا لفهم المثال المستمر.
إذا كنت تولي اهتمامًا وثيقًا للشخصية التي أنشأناها في البرنامج التعليمي السابق ،
 فستلاحظ أن الكرات النارية ظهرت للتو من وسط شخصية لعبتنا الرئيسية ،
 وليس من المكان الذي تتوقعه (كما في هذه الحالة ، اليد الممدودة ) لاطلاق الرصاص .

كائنات اللعبة الاساسية والثانوية

الآن ، ماذا لو بدلاً من الشخصية ، كانت هناك لعبة غير مرئية - 
كائن أطلق الكرات النارية؟ بعد كل شيء ، لن يتمكن المستخدم (لاعب اللعبة)
 حقًا من رؤية من أطلق الكرة النارية بالضبط. لذلك دعونا نفعل ذلك. بادئ ذي بدء ،
 قم بإنشاء gameObject جديدة فارغة .
 فإن موقع gameObjects بشكل عام له علاقة بعالم اللعبة .
ولكن بالنسبة لأشياء معينة ، مثل البندقية أو الاسهم والقوس ، 
فقد تحتاج إلى أن تكون ذات صلة بجسم لعبة أخرى بدلاً من ذلك.




 بدلاً من أن نقول أن هذا الكائن gameObject على بعد وحدتين من المركز الميت للعبة ،
 يمكننا أن نجعل gameObjects تقول إن هذا الكائن gameObject على بُعد وحدتين 
من كائن gameObject الآخر ، بغض النظر عن مكانه.
دعنا نجربها في لعبتنا ، لنرى كيف تعمل حقًا.
 لجعل gameObject ثانويا ، ما عليك سوى سحب الكائن الثانوي المقصود و
إفلاته في كائن اللعبة الأصل المقصود. 
في حالتنا ، سنقوم بسحب كائن gameObject الفارغ إلى كائن الشخصية (Shooting ).
ستلاحظ أن كائن gameObject الجديد يأتي الآن في قائمة منسدلة تحت شخصيتنا الرئيسية ،
 ولديه مسافة بادئة صغيرة مضافة إلى اسمه في التسلسل الهرمي.
 هذا يعني أن gameObject هو الآن تابع لشخصيتنا. 
إذا حاولت تحريك الشخصية الآن ، ستلاحظ أن gameObject الفارغة تتحرك معها أيضًا ،
 لكنها تظل على نفس المسافة النسبية.
لكن كائن gameObject الفارغ يطفو بالقرب من رأس شخصيتنا ، وليس بالقرب من يده!
 لإصلاح ذلك ، ما عليك سوى ضبط موضع كائن gameObject الفارغ
 باستخدام position القيم الموجودة في طريقة العرض Transform ،
 حتى يصل كائن gameObject الفارغ إلى المكان الذي تريده.

Unity Game Engine: كائنات اللعبة الاساسية والثانوية على Unity




مرة أخرى ، سيكون لجسم gameObject الثانوي موقعه بالنسبة 
إلى الرئيسية ، وليس عالم اللعبة. 
بمعنى أنه إذا قمت بتعيين الموضع على (0, 0, 0)،
 فسيتم وضع كائن gameObject الصغير في المركز الميت 
للكائن الأصلي للعبة ، وليس الشاشة.
في حالتنا ، إذا كنت تتذكر من البرنامج التعليمي الأخير ،
فقد أضفنا الكود لإنشاء كرة نارية جديدة في كل مرة يتم فيها الضغط على
 مفتاح المسافة ، في النص المرفق بكائن لعبة Shooting  .
 ويحمل النص نفسه أيضًا رمز تمكين نقل كائن لعبة Shooting  .
لذلك سيتعين علينا إزالة رمز إنشاء المباني الجاهزة النارية من
 طريقة ()Shooter update الفصل.
لنقم بإنشاء فئة جديدة ShootingBehaviour وإضافة الكود إلى طريقة
 () update هذه الفئة وإرفاق هذا البرنامج النصي بكائن لعبة Invisible child
 الجديد في كائن لعبة Shooting  .



سنكتب هذا الكود


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShootingBehaviour : MonoBehaviour
{
    public GameObject fireball;
    
    void update() 
    {
        
        // When spacebar is hit
        if(Input.GetKeyDown(KeyCode.Space))
        {
            // instantiate the fireball object
            Instantiate(fireball,
                new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, 0),
                new Quaternion(0, 0, 0, 0));
        }
    }

}
وسيبدو Shooterالفصل الذي يقوم بحركة Shooting Savi ،

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooter : MonoBehaviour
{
    public RigidBody2D body;
    public float speed;
    
    void update() 
    {
        body.velocity = new Vector2(Input.GetAxisRaw("Horizontal")*speed, Input.GetAxisRaw("Vertical")*speed);
    }

}


الآن بعد أن قمنا بإرفاق نص التصوير بكائن gameObject 
الفارغ وجعلناه ثانوي في كائن gameObject الخاص بشخصيتنا ، فلنختبر لعبتنا الآن.

إنها تعمل! إذن ما الذي تعلمناه في هذا الدرس؟
 لقد تعلمنا كيف تعمل على تكييف gameObject و
كيف يمكننا استخدامها لصالحنا ، ولم يكن علينا تغيير كود واحد 
 (ليس علينا القيام بالكثير من العمل).

جدول المحتويات