سكربت للتحكم في أتجاهات حركة اللاعب والتحكم في الأنميشن الخاص به في الألعاب " 2D " على محرك الألعاب " Unity Engine "

 بالطبع فأن أول شيء سنحتاج له عند الشروع في عمل أي لعبة جديدة هي عمل سكربت للتحكم في اللاعب، فالقدرة علي أستلام الأوامر التي يرسلها مستخدمون اللعبة عبر لوحة المفاتيح، وترجمتها إلى حركة وأستجابة داخل لعبتنا هي الأساس الذي بأنشاءه نكون قد أنهينا نحو 50% من لعبتنا، ولكن هناك نصيحة كبيرة يقولها أكبر البرمجين لكل مبتدأ، وهي عندما تكتب كود عليك مراعات أن يكون هذا الكود صالحة لإعادة الإستخدام مرة أخري في مشاريع وألعاب مختلفة، وهنا في مقالنا هذا سنعرض لكم سكربت بسيط يمكنه أستقبال الأوامر من لوحة المفاتيح، وترجمتها لحركة لشخصيتك الأساسية في اللعبة.



سكربت التحكم في الحركة

هو سكربت بسيط ولكنه صالح للإستخدام في جميع الألعاب " 2D" كما أنه يمكن إجراء بعض التعديلات البسيطة ليتناسب مع كافة الألعاب، ليصبح معك في كل ألعابك، فهو سكربت يجمع بين التحكم في الحركة عبر إعطاء قوة الدفع الفيزيائية عبر "  Rigidbody" وكذلك يعطيك القدرة على تغيير ال " Animation " لتغير شكل حركة اللاعب من السير إلى الجري أو التوقف.





using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class ZombieScript : MonoBehaviour {


    Animator animZombie;

    float speed = 10.0f;

    Rigidbody playerRB;



    // Use this for initialization

    void Start () {


        playerRB = GetComponent<Rigidbody>();


        animZombie = GetComponent<Animator>();

}

// Update is called once per frame

void Update () {


        //Walk Animation Zombie

        if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.LeftArrow)

             || Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.RightArrow))

        {

            //Animate Walk

            animZombie.SetBool("Walk", true);

            animZombie.SetBool("Stop", false);


        }


        //Stop Zombie Animation

        if (Input.GetKeyUp(KeyCode.UpArrow) || Input.GetKeyUp(KeyCode.LeftArrow)

             || Input.GetKeyUp(KeyCode.DownArrow) || Input.GetKeyUp(KeyCode.RightArrow))

        {

            animZombie.SetBool("Walk", false);

            animZombie.SetBool("Stop", true);

        }


        


    }


    void FixedUpdate()

    {

        //Move Code


        //Move Player Forward

        if (Input.GetKey(KeyCode.UpArrow))

        {

            playerRB.AddForce(new Vector3(0, 0, 5), ForceMode.VelocityChange);


            playerRB.rotation = Quaternion.LookRotation(Vector3.forward);

        }


        //Move Player Back

        if (Input.GetKey(KeyCode.DownArrow))

        {

            playerRB.AddForce(new Vector3(0, 0, -5), ForceMode.VelocityChange);


            playerRB.rotation = Quaternion.LookRotation(Vector3.back);


        }


        //Move Player Left

        if (Input.GetKey(KeyCode.LeftArrow))

        {

            //Move Player

            playerRB.AddForce(new Vector3(-5, 0, 0), ForceMode.VelocityChange);


            playerRB.rotation = Quaternion.LookRotation(Vector3.left);

        }


        //Move Player Right

        if (Input.GetKey(KeyCode.RightArrow))

        {

            //Move Player

            playerRB.AddForce(new Vector3(5, 0, 0), ForceMode.VelocityChange);


            playerRB.rotation = Quaternion.LookRotation(Vector3.right);

        }

    }

}


شرح الأكواد الخاصة بالسكربت

في البداية قمنا بتعريف بعض من المتغيرات العامة حتى نستطيع تخصيص تلك المتغيرات وإستدعائها، وهنا تم تعريف عدد ثلاث متغيرات هما "  Animator animZombie " وهو خاص بتعريف متحكم في الأنميشن، وكذلك " float speed " وهو متغير عشري سوف يستخدم في تحديد سرعة اللاعب، وكذلك المتغير من النوع "  Rigidbody playerRB " وهو متغير لتعريف الخصائص الفيزيائية.

في الدالة " Start " سنقوم بتخصيص أثنان من المتغيرات الذي سبق تعريفها وربط كل متغير منهم مع كومباوند "  Component" محدد من خصائص اللاعب، فسوف نقوم بتخصيص " Rigidbody" وكذلك تخصيص " Animator ".


        playerRB = GetComponent<Rigidbody>();


        animZombie = GetComponent<Animator>();


وفي دالة " Update " سنقوم بعملية التحكم " Animation" الخاصة باللاعب، وهنا لدينا فقط توقف و تحرك، فأننا هنا نستقبل الحركة من لوحة المفاتيح في أول مرة، فنقوم بإقاف "  Animation" الخاص بالتوقف وتشغيل الخاص بالتحرك وذلك مع الإستمرار في عملية الضغط على الزر.

أما عندما يتم رفع الأصابع من على الأزرار من لوحة الإدخال فيتم فورا توقف "  " الخاص التحرك وتشغيل الخاص بالتوقف.

  if (Input.GetKeyUp(KeyCode.UpArrow) || Input.GetKeyUp(KeyCode.LeftArrow)

             || Input.GetKeyUp(KeyCode.DownArrow) || Input.GetKeyUp(KeyCode.RightArrow))

        {

            animZombie.SetBool("Walk", false);

            animZombie.SetBool("Stop", true);

        }


أما في دالة "  FixedUpdate " فأنها هنا مخصصة لحركة اللاعب، حيث يتم استقبال الأوامر من لوحة الأدخال، ومنح اللاعب حركة فيزيائية عبر أعطائه قوة دفع " AddForce " عبر " Rigidbody" الخاصة به.

وكذلك يتم تغيير إتجاه دوران  " rotation " اللاعب عبر الأمر " Quaternion.LookRotation " ليتناسب أتجاه اللاعب مع حركته.

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

إرسال تعليق

2 تعليقات

  1. ممكن سكربت القطع النقدية
    يعني فلوس داخل اللعبة او اي شي يلتقطة داخل اللعبة

    ردحذف
  2. شكراً بس ممكن سكربت للـ3d

    ردحذف
Emoji
(y)
:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:P
:o
:>)
(o)
:p
(p)
:-s
(m)
8-)
:-t
:-b
b-(
:-#
=p~
x-)
(k)