بالطبع فأن أول شيء سنحتاج له عند الشروع في عمل أي لعبة جديدة هي عمل سكربت للتحكم في اللاعب، فالقدرة علي أستلام الأوامر التي يرسلها مستخدمون اللعبة عبر لوحة المفاتيح، وترجمتها إلى حركة وأستجابة داخل لعبتنا هي الأساس الذي بأنشاءه نكون قد أنهينا نحو 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 تعليقات
ممكن سكربت القطع النقدية
ردحذفيعني فلوس داخل اللعبة او اي شي يلتقطة داخل اللعبة
شكراً بس ممكن سكربت للـ3d
ردحذف