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

هی همه!
من بسیار هیجان زده هستم که اولین تجربه خود را به عنوان یک دوره کارآموزی با همه شما به اشتراک بگذارم. امروز، من به دنیای توسعه بازی پرداختم و وظیفه داشتم یک مینی بازی برای مجموعه بازی های آینده خود بسازم. و اجازه دهید به شما بگویم، این سفر در حال حاضر کاملاً طی شده است!
امروز، آستینهایم را بالا زدم و به دنیای توسعه بازیها پرداختم، همه اینها در خدمت خلق تجربهای جذاب برای مخاطبانمان بود. با بازی خود، نه تنها هدف ما سرگرم کردن است، بلکه میخواهیم در برخی از یادگیریها نیز دزدکی بگذریم. این را تصور کنید: یک بازی با مضمون فضایی برای دو بازیکن، که یادآور بازی کلاسیک 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;
}
}
}
اما نترس! اینجا جایی است که همه شما وارد می شوید. من برای هر گونه پیشنهاد یا ایده در مورد چگونگی مقابله با این چالش با انجمن شگفت انگیز خود تماس می گیرم. چه شما یک توسعه دهنده باتجربه باشید یا فقط در حل مشکلات مهارت داشته باشید، من همه گوش هستم!
بنابراین، اگر نظر یا دیدگاهی برای به اشتراک گذاشتن دارید، لطفاً در نظرات زیر دریغ نکنید. با هم، من مطمئن هستم که می توانیم این کد را شکسته و چیزی واقعاً خاص ایجاد کنیم.
از اینکه در این ماجراجویی به من ملحق شدید متشکریم و منتظر بهروزرسانیهای بیشتر در مورد سفر کارآموزی من باشید!