برنامه نویسی

یک مینی بازی از فضاپیماها و یادگیری

هی همه!

من بسیار هیجان زده هستم که اولین تجربه خود را به عنوان یک دوره کارآموزی با همه شما به اشتراک بگذارم. امروز، من به دنیای توسعه بازی پرداختم و وظیفه داشتم یک مینی بازی برای مجموعه بازی های آینده خود بسازم. و اجازه دهید به شما بگویم، این سفر در حال حاضر کاملاً طی شده است!

امروز، آستین‌هایم را بالا زدم و به دنیای توسعه بازی‌ها پرداختم، همه اینها در خدمت خلق تجربه‌ای جذاب برای مخاطبانمان بود. با بازی خود، نه تنها هدف ما سرگرم کردن است، بلکه می‌خواهیم در برخی از یادگیری‌ها نیز دزدکی بگذریم. این را تصور کنید: یک بازی با مضمون فضایی برای دو بازیکن، که یادآور بازی کلاسیک Space Invaders است. اما نکته اینجاست – به جای سرنگونی بیگانگان، بازیکنان باید فضاپیمای کوچک خود را در فضا هدایت کنند تا اعداد شناور را جمع آوری کنند. چرا؟ خوب، برای حل معادلات، البته! این یک راه هیجان انگیز برای درگیر کردن بچه ها با مفاهیم ریاضی به روشی سرگرم کننده و تعاملی است.

با این حال، مانند هر پروژه ای، من به یک مانع برخوردم. ببینید، من با تطبیق مکانیک بازی برای دستگاه های تلفن همراه دست و پنجه نرم کرده ام. به طور خاص، من در تلاش هستم تا بفهمم چگونه می توان فضاپیمای بازیکن را روی صفحه تلفن قابل کشیدن کرد. من مقداری کد را سرهم کرده‌ام، اما افسوس که آنطور که انتظار می‌رفت عمل نمی‌کند. حرکت می‌کند، اما نه آنطور که من می‌خواهم – بالای صفحه نمایشگر می‌چرخد و کاملاً به جایی که قرار است برود نمی‌رسد.

این چیزی است که من برای این مشکل استفاده کردم:

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

public class TouchControl : MonoBehaviour
{
    //Public Variables
    public GameObject player1;
    public GameObject player2;
    //A modifier which affects the rackets speed
    public float speed;
    //Fraction defined by user that will limit the touch area
    public int frac;

    //Private Variables
    private float fracScreenWidth;
    private float widthMinusFrac;
    private Vector2 touchCache;
    private Vector3 player1Pos;
    private Vector3 player2Pos;
    private bool touched = false;
    private int screenHeight;
    private int screenWidth;
    // Use this for initialization
    void Start()
    {
        //Cache called function variables
        screenHeight = Screen.height;
        screenWidth = Screen.width;
        fracScreenWidth = screenWidth / frac;
        widthMinusFrac = screenWidth - fracScreenWidth;
        player1Pos = player1.transform.position;
        player2Pos = player2.transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        //If running game in editor
#if UNITY_EDITOR
        //If mouse button 0 is down
        if (Input.GetMouseButton(0))
        {
            //Cache mouse position
            Vector2 mouseCache = Input.mousePosition;
            //If mouse x position is less than or equal to a fraction of the screen width
            if (mouseCache.x <= fracScreenWidth)
            {
                player1Pos = new Vector3(-3.70f, Mathf.Clamp(mouseCache.y / screenHeight * speed, -3, 3.5f), 0.5f);
            }
            //If mouse x position is greater than or equal to a fraction of the screen width
            if (mouseCache.x >= widthMinusFrac)
            {
                player2Pos = new Vector3(15.75f, Mathf.Clamp(mouseCache.y / screenHeight * speed, -3, 3.5f), 0.5f);
            }
            //Set touched to true to allow transformation
            touched = true;
        }
#endif
        //If a touch is detected
        if (Input.touchCount >= 1)
        {
            //For each touch
            foreach (Touch touch in Input.touches)
            {
                //Cache touch position
                touchCache = touch.position;
                //If touch x position is less than or equal to a fraction of the screen width
                if (touchCache.x <= fracScreenWidth)
                {
                    player1Pos = new Vector3(-3.70f, Mathf.Clamp(touchCache.y / screenHeight * speed, -3, 3.5f), 0.5f);
                }
                //If mouse x position is greater than or equal to a fraction of the screen width
                if (touchCache.x >= widthMinusFrac)
                {
                    player2Pos = new Vector3(15.75f, Mathf.Clamp(touchCache.y / screenHeight * speed, -3, 3.5f), 0.5f);
                }
            }
            touched = true;
        }
    }

    //FixedUpdate is called once per fixed time step
    void FixedUpdate()
    {
        if (touched)
        {
            //Transform rackets
            player1.transform.position = player1Pos;
            player2.transform.position = player2Pos;
            touched = false;
        }
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اما نترس! اینجا جایی است که همه شما وارد می شوید. من برای هر گونه پیشنهاد یا ایده در مورد چگونگی مقابله با این چالش با انجمن شگفت انگیز خود تماس می گیرم. چه شما یک توسعه دهنده باتجربه باشید یا فقط در حل مشکلات مهارت داشته باشید، من همه گوش هستم!

بنابراین، اگر نظر یا دیدگاهی برای به اشتراک گذاشتن دارید، لطفاً در نظرات زیر دریغ نکنید. با هم، من مطمئن هستم که می توانیم این کد را شکسته و چیزی واقعاً خاص ایجاد کنیم.

از اینکه در این ماجراجویی به من ملحق شدید متشکریم و منتظر به‌روزرسانی‌های بیشتر در مورد سفر کارآموزی من باشید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا