Sơ lược giao diện hoạt động của phần gameplay:
Trước khi bắt đầu code phần gameplay, thì chúng ta phải hình dung chúng ta cần làm cái gì trước. Trong ví dụ này mình tập trung về 1 loại game cổ điển là game né chướng ngại vật.
Chúng ta sẽ cần 2 đối tượng chính là chướng ngại vật
và người chơi
.
Chúng ta cũng sẽ cần phải làm 1 phần tự động sinh ra chướng ngại vật, nhưng nó sẽ không được hiện thị ở phần view của người chơi mà phải ở trên phần view để người chơi không thấy được nó.
Chuẩn bị giao diện cho phần gameplay
Đầu tiên các bạn cần tạo ra 1 sence mới để chứa giao diện mới của phần gameplay.
Click chuột phải vào thư mực Scenes -> Create -> Scene. Sau đó các bạn đặt tên nó là Gameplay.
Sau đó các bạn hãy click đúp vào nó để mở lên.
Tiếp theo chúng ta sẽ tạo sẵn những object cần thiết cho game của chúng ta bằng cách
Click chuột phải -> chọn như hình, và hay đặt tên như hình để dễ làm việc
Sau đó chúng ta reset ví trí của tất cả object về trung tập trung bằng cách
click chuột phải ở trường Transform -> reset
Tiếp đến các bạn hãy down 3 file này về và ném vào thư mục assets. 3 file này mục đích để ta set background cho nó đẹp thôi, các bạn có thể thay 2 square file này bằng 1 file ảnh bất kì cũng được.
Link set background tại đây
Tiếp theo các bạn chọn Object background -> kéo thả Square vào chỗ sprite để nó lấy ảnh background.
Tiếp đến các bạn hãy set kích thước của background như sau:
- Position: là ví trị của object
- Rotation: là độ nguyên góc nhìn ở 360 độ nhưng vì chúng ta làm game 2D nên cài này không quan trọng
- Scale: là nơi chúng ta thay đổi kích thước của object.
Ở phần Addition Settings -> Order in Layer -> đổi 0
thành -1
. mục đích để background của chúng là xuống ở phía sau, tránh việc nó hiện thị đè lên các Object khác.
Các bạn có thể thay đổi theo ý muốn ở phần Scale nhé.
Note: Khi chọn độ rộng các bạn hãy nhớ lưu ý rằng là ta phải chia chiều rộng sao cho ta đủ chỗ chứa cả 5 chướng ngại vật như sau
Tiếp chúng ta sẽ set ví trí của camera để nó có thể thấy background của chúng bằng cách giảm tọa độ Z xuống còn -10. Vì nếu z = 0 thì nó sẽ ở cùng vị trí với background nó sẽ bị ghi đè lên nên ta không thể thấy gì.
Tiếp chúng ta sẽ thiết lập người chơi. Cũng tương tự như background các bạn hãy kèo thả Square vào trong Sprite sau đó thay đổi kích thước và ví trí của nó.
Chúng ta hãy đánh dấu những object sau bằng cách chọn object cần đánh dấu -> chọn nút phải -> chọn icon để đánh dấu
Làm tương tự với các spawnPoint1, spawnPoint2, spawnPoint3, spawnPoint4, spawnPoint5.
Tiếp chúng ta di chuyển Object BlockSpawner lên trên để không cho người chơi thấy được nó.
Sau đó chúng ta bố trí vị trí của các SpawnPoint cho phù hợp.
bằng cách click vào nút 4 mũi tên -> chọn object -> chọn mũi tên đỏ dể di chuyển qua trái và phải.
Sau đó chúng ta bố trí vị trí của các SpawnPoint cho phù hợp.
bằng cách click vào nút 4 mũi tên -> chọn object -> chọn mũi tên đỏ dể di chuyển qua trái và phải.
Tiếp đến chúng ta sẽ tạo 1 object chướng ngại vật
Chúng ta click chuột phải -> duplicate để tạo 1 object giống y như player
Sau đó các bạn hãy rename và thay đổi kích thước của Object Block đó sao cho vừa ý các bạn
Note: khi chọn chiều rộng ta phải chọn kích thước sao cho nó tương ứng với 5 spawn point
Sau khi tạo xong các bạn hãy kéo thả Object Block vừa tạo vào bảng bên dưới. sau khi kéo xong hãy xóa Object Block bên bảng bên trái đi.
Code chức năng cho player
Click chuột phải chọn Create -> Sscript C# -> đặt tên là Player
Mở file Player vừa tạo lên sau đó chúng ta sẽ code như sau:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Player : MonoBehaviour {
public float speed = 150f;
private Rigidbody2D rb;
public float mapWidth = 3.25f;
public float MouseSpeed = 5f;
public float slowness = 10f;
void Start() {
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate() {
float x = Input.GetAxis("Horizontal") * Time.fixedDeltaTime * speed;
if (x == 0) {
x = Input.GetAxis("Mouse X") * Time.fixedDeltaTime * speed * MouseSpeed;
}
Vector2 newPosition = rb.position + Vector2.right * x;
newPosition.x = Mathf.Clamp(newPosition.x, -mapWidth, mapWidth);
rb.MovePosition(newPosition);
}
void OnCollisionEnter2D() {
EndGame();
}
public void EndGame() {
StartCoroutine(RestartLevel());
}
IEnumerator RestartLevel() {
Time.timeScale = 1f / slowness;
Time.fixedDeltaTime = Time.fixedDeltaTime / slowness;
yield return new WaitForSeconds(2f / slowness);
Time.timeScale = 1f;
Time.fixedDeltaTime = Time.fixedDeltaTime * slowness;
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
Sau đó các bạn hãy mở file Gamemanager mà chúng ta đã code ở phần 1 rồi sửa lại thành như sau:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour {
public GameObject CreditUI;
public float slowness = 10f;
public void EndGame() {
StartCoroutine(RestartLevel());
}
IEnumerator RestartLevel() {
Time.timeScale = 1f / slowness;
Time.fixedDeltaTime = Time.fixedDeltaTime / slowness;
yield return new WaitForSeconds(2f / slowness);
Time.timeScale = 1f;
Time.fixedDeltaTime = Time.fixedDeltaTime * slowness;
}
public void exitgame() {
Application.Quit();
}
public void openCredit() {
CreditUI.SetActive(true);
}
public void closeCredit() {
CreditUI.SetActive(false);
}
public void startGame() {
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
public void returnToMenu() {
Time.timeScale = 1f;
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
}
}
Tiếp các bạn hãy tạo tiếp 1 Script đặt tên là BlockSpawner và mở nó lên rồi code như sau:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockSpawner : MonoBehaviour {
public Transform[] spawnPoints;
public GameObject blockPrefab;
public float TimeSpawnBetweenWave = 1f;
private float timeToSpawn = 2f;
void Update() {
if (Time.time >= timeToSpawn) {
spawnBlock();
timeToSpawn = Time.time + TimeSpawnBetweenWave;
}
}
void spawnBlock() {
int randomIndex = Random.Range(0, spawnPoints.Length);
for (int i = 0; i < spawnPoints.Length; i++) {
if (randomIndex != i) {
Instantiate(blockPrefab, spawnPoints[i].position, Quaternion.identity);
}
}
}
}
Thêm code di chuyển vào trong đối tượng Player
Các bạn chọn Add Component -> Rigidbody 2D
ở Component Rigidbody 2D mới thêm, bạn hãy chọn Body type -> Kinematic
Tiếp đến chúng ta thêm Script Player vào trong object Player
Các bạn hãy tự thay đổi thông số này sao cho phù hợp.
Tiếp đến các bạn chọn add component -> box collider 2D
Các có thể bấm nút play để thử chạy demo điều khiển Player trước
Thêm trường vào bên trong Block
Click chọn Block -> Add component -> rigidbody 2D
Click chọn Block -> Add component -> Box Collider 2D
Tiếp chúng ta tạo 1 script BlockDelete và code như sau:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockDelete : MonoBehaviour {
public float gravitySpeedRateAdd = 10f;
public float deleteAt = -10f;
void Start() {
GetComponent<Rigidbody2D>().gravityScale += Time.timeSinceLevelLoad / gravitySpeedRateAdd;
}
void Update() {
if (transform.position.y < deleteAt) {
Destroy(gameObject);
}
}
}
Sau đó các bạn hãy click chọn Object Block sau đó kéo thả BlockDelete vào bảng phải bên dưới như hình
Tiếp đến ta click chọn BlockSpawner -> kéo thả Script BlockSpawner vừa tạo vào
Sau đó hãy kéo các đối tượng vào trong Object như hình
Như vậy là giờ game của chúng ta đã hoàn thành giờ chúng ta chỉ cần thêm 1 cái nút để quay trở lại trang menu là xong.
Bằng cách click chuột phải -> UI -> button. Các bạn hãy tự set ví trị cho phù hợp.
Cuối cùng chúng ta chèn code vào trong button vừa tạo
như vậy là xong. các bạn có thể bấm nút play để trải nghiệm game trước khi build
Build Setting
Các bạn vào File -> build setting -> add Open Scenes
Sau đó hãy chọn platform muốn build
Tiếp theo hãy chọn Player setting ở đây sẽ chỉnh 1 số thông số
ở đây các bạn có thể set icon cho project của mình nữa, nó có 1 số tính năng khá hay nếu các bạn hứng thú có thể tự trải nghiệm
Nhự vậy là xong giờ bạn chỉ việc click nút build để build project.
Tổng kết:
Như vậy là các đã hoàn thành 1 game hoàn chỉnh. Hi vọng qua bài này các bạn đã có thể nắm sơ cách để làm việc với unity. Chúc các bạn thành công.