ثلاثة مسارات
الدرس 1 من 20 في دورة لعبة Unity: مسارات السماء على Coddy.
في هذه الدورة، ستبني لعبة كاملة، ميزةً في كل درس. يندفع عدّاء على طريق عالٍ في السماء. تظهر أمامه الحواجز والقضبان والجدران، وتصطف العملات على المسارات، ويزداد الطريق سرعةً كلما طال صمودك.
يحتوي المشروع بالفعل على أربعة نصوص برمجية: Runner على اللاعب، وRoad، وGameManager، وCoin. معظمها فارغ الآن، وستكتمل خطوةً خطوةً مع كل درس. وهناك نص برمجي خامس، CameraFit، على الكاميرا، وهو جاهز: يوسّع مجال الرؤية على شاشة الهاتف الطويلة لتتسع المسارات الثلاثة كلها، ولن تحتاج إلى تغييره.
لا يتحرك العدّاء إلى الأمام مطلقًا. بل ينتقل فقط بين ثلاثة مسارات: اليسار والوسط واليمين. احتفظ بالمسار كعدد صحيح، -1 أو 0 أو 1، واحسب موقعه على المحور x:
float targetX = lane * laneWidth;لدى العدّاء CharacterController، لذا يتحرك باستخدام controller.Move(motion): تأخذ Move مقدار المسافة التي يجب قطعها في هذا الإطار، لا الموقع الذي يجب أن ينتهي عنده. للوصول إلى targetX، تحرّك بمقدار الفرق بينه وبين موقع العدّاء الحالي:
float x = targetX;
Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
controller.Move(move);تساوي Mathf.Max(-1, lane - 1) قيمة lane - 1، لكن لا يمكن أن تقل عن -1، لذا لا يوجد مسار أبعد من المسار الأيسر.
التحدي
سهل- في
Runner.Update، عند الضغط على A أو سهم اليسار (Input.GetKeyDown)، عيّنlane = Mathf.Max(-1, lane - 1). - عند الضغط على D أو سهم اليمين، عيّن
lane = Mathf.Min(1, lane + 1). - ثم احسب
targetXوحرّك العداء إلى هناك باستخدامcontroller.Move، كما سبق. - اضغط «العب» وجرّب A وD.
جرّب بنفسك
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public int lane;
private CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// غيّر المسارات هنا
}
}
جميع دروس لعبة Unity: مسارات السماء
تدرّب بنفسك: Playground لـ Unity