यूनिटी में मिनी गेम | CUBEavoid
CUBEavoid एक मिनी गेम है जिसे Unity. सोर्स कोड में बनाया गया है, और नीचे सेट किया गया है।
इसका लक्ष्य माउस कर्सर से बड़े क्यूब को पुनः स्केल करके छोटे क्यूब से बचना है।
चरण 1: सभी आवश्यक स्क्रिप्ट बनाएं
- एक नई स्क्रिप्ट बनाएं, इसे SC_PlayerCube.cs नाम दें, इसमें से सब कुछ हटा दें, और नीचे दिए गए कोड को इसके अंदर पेस्ट करें:
SC_PlayerCube.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SC_PlayerCube : MonoBehaviour
{
//Assign enemy mesh renderer
public MeshRenderer enemy;
public Text gameOverText;
Transform thisT;
MeshRenderer mr;
//Global static variable
public static bool GameOver = false;
// Start is called before the first frame update
void Start()
{
thisT = transform;
mr = GetComponent<MeshRenderer>();
gameOverText.enabled = false;
}
// Update is called once per frame
void Update()
{
if (GameOver)
return;
if (gameOverText.enabled)
{
//Game has resumed, disable game over text
gameOverText.enabled = false;
}
//Scale player cube with mouse movement
Vector3 playerScale = (new Vector3(Screen.width / 2 - Input.mousePosition.x, 1, Screen.height / 2 - Input.mousePosition.y)).normalized * 10;
//Keep Y scale at 10
playerScale.y = 10;
//Limit minimum X and Z scale to 0.1
if (playerScale.x >= 0 && playerScale.x < 0.1f)
{
playerScale.x = 0.1f;
}
else if (playerScale.x < 0 && playerScale.x > -0.1f)
{
playerScale.x = -0.1f;
}
if (playerScale.z >= 0 && playerScale.z < 0.1f)
{
playerScale.z = 0.1f;
}
else if (playerScale.z < 0 && playerScale.z > -0.1f)
{
playerScale.z = -0.1f;
}
thisT.localScale = playerScale;
//Check if enemy have intersected with the player, if so, stop the game
if (mr.bounds.Intersects(enemy.bounds))
{
GameOver = true;
gameOverText.enabled = true;
}
}
}
- एक नई स्क्रिप्ट बनाएं, इसे SC_EnemyCube.cs नाम दें, इसमें से सब कुछ हटा दें, और नीचे दिए गए कोड को इसके अंदर पेस्ट करें:
SC_EnemyCube.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//This script controls enemy cube AI
public class SC_EnemyCube : MonoBehaviour
{
//Private variables
Camera mainCamera;
float movementTime = 0;
Vector3 startPoint;
Vector3 endPoint;
// Start is called before the first frame update
void Start()
{
//Get camera tagged "MainCamera"
mainCamera = Camera.main;
GenerateStartEndPoint();
}
//Assign start and end points slightly outside the Camera view
void GenerateStartEndPoint()
{
Vector3 relativeStart;
Vector3 relativeEnd;
//Randomly pick whether to go Left <-> Right or Up <-> Down
if (Random.Range(-10, 10) > 0)
{
relativeStart = new Vector3(Random.Range(-10, 10) > 0 ? 1.1f : -0.1f, Random.Range(0.00f, 1.00f), mainCamera.transform.position.y);
if (relativeStart.y > 0.4f && relativeStart.y < 0.6f)
{
if(relativeStart.y >= 0.5f)
{
relativeStart.y = 0.6f;
}
else
{
relativeStart.y = 0.4f;
}
}
relativeEnd = relativeStart;
relativeEnd.x = relativeEnd.x > 1 ? -0.1f : 1.1f;
}
else
{
relativeStart = new Vector3(Random.Range(0.00f, 1.00f), Random.Range(-10, 10) > 0 ? 1.1f : -0.1f, mainCamera.transform.position.y);
if (relativeStart.x > 0.4f && relativeStart.x < 0.6f)
{
if (relativeStart.x >= 0.5f)
{
relativeStart.x = 0.6f;
}
else
{
relativeStart.x = 0.4f;
}
}
relativeEnd = relativeStart;
relativeEnd.y = relativeEnd.y > 1 ? -0.1f : 1.1f;
}
//Convert screen points to world points
startPoint = mainCamera.ViewportToWorldPoint(relativeStart);
endPoint = mainCamera.ViewportToWorldPoint(relativeEnd);
//Reset movement time
movementTime = 0;
}
// Update is called once per frame
void Update()
{
//Game over, wait for click
if (SC_PlayerCube.GameOver)
{
//Click to resume
if (Input.GetMouseButtonDown(0))
{
SC_PlayerCube.GameOver = false;
GenerateStartEndPoint();
}
else
{
return;
}
}
//Move enemy from one side to the other
if(movementTime < 1)
{
movementTime += Time.deltaTime * 0.5f;
transform.position = Vector3.Lerp(startPoint, endPoint, movementTime);
}
else
{
//Re-generate start / end point
GenerateStartEndPoint();
}
}
}
चरण 2: सेटअप
दो मुख्य स्क्रिप्ट तैयार हो जाने के बाद, आइए गेम की स्थापना के लिए आगे बढ़ें:
- यदि आपने अभी तक ऐसा नहीं किया है तो नया दृश्य बनाएं
- मुख्य कैमरा चुनें, इसकी स्थिति को (0, 10, 0) और इसके रोटेशन को (90, 0, 0) में बदलें
- मुख्य कैमरे के कैमरा घटक गुणों को बदलें: फ़्लैग साफ़ करें से 'Solid Color', पृष्ठभूमि से 'white', प्रक्षेपण से 'Orthographic', और आकार से '10'
- नया क्यूब बनाएं (गेम ऑब्जेक्ट -> 3D ऑब्जेक्ट -> क्यूब) और इसे नाम दें "Player"
- "Player" स्थिति को (0, 0, 0) में बदलें और स्केल को (10, 10, 10) में बदलें
- नई सामग्री बनाएं (प्रोजेक्ट फ़ोल्डर पर राइट-क्लिक करें -> बनाएं -> सामग्री) और इसे नाम दें "PlayerMaterial"
- "PlayerMaterial" शेडर को अनलिट/कलर में बदलें और उसका रंग काला करें
- क्यूब "PlayerMaterial" को असाइन करें "Player"
- क्यूब की प्रतिलिपि बनाएँ "Player" और उसका नाम बदलें "Enemy"
- "Enemy" स्केल को (0.7, 0.7, 0.7) में बदलें
- इसकी प्रतिलिपि बनाएँ "PlayerMaterial" और इसका नाम बदलें "EnemyMaterial"
- "EnemyMaterial" हेक्साडेसिमल रंग को 157EFB में बदलें
- अंत में, Cube "EnemyMaterial" को असाइन करें "Enemy"
आइए एक सरल यूआई बनाएं:
- नया UI टेक्स्ट बनाएं (गेम ऑब्जेक्ट -> UI -> टेक्स्ट), इसका नाम बदलें "GameOverText"
- सुनिश्चित करें कि नए टेक्स्ट के लिए RectTransform संरेखण मध्य केंद्र पर सेट किया गया है
- टेक्स्ट स्थिति X और स्थिति Y को 0 पर सेट करें
- ऊंचाई को 100 में बदलें
- टेक्स्ट घटक के लिए, नीचे दिया गया टेक्स्ट सेट करें (सुनिश्चित करें कि रिच टेक्स्ट गुण चेक किया गया है):
Game Over
<size=15>Click to Try Again</size>
- फ़ॉन्ट आकार 25 पर सेट करें
- टेक्स्ट संरेखण को मध्य केंद्र पर सेट करें
- टेक्स्ट का रंग लाल पर सेट करें
अंत में, आइए स्क्रिप्ट असाइन करें:
- क्यूब का चयन करें "Player" और उसे SC_PlayerCube स्क्रिप्ट असाइन करें
- "Enemy" क्यूब को शत्रु चर में असाइन करें
- "GameOverText" गेम ओवर टेक्स्ट वैरिएबल को असाइन करें
- क्यूब का चयन करें "Enemy" और उसे SC_EnemyCube स्क्रिप्ट असाइन करें
अब जब प्ले बटन दबाया जाएगा, तो नीला क्यूब स्क्रीन पर घूमना शुरू कर देगा, जिसे रोकने के लिए आपको माउस कर्सर का उपयोग करके काले क्यूब का आकार बदलना होगा।
इस खेल को किसी भी तरह से सुधारने के लिए स्वतंत्र महसूस करें।