Trong bài viết này, FPT Polytechnic Hà Nội sẽ giới thiệu cho các bạn cách tạo ra một tựa game 2D đơn giản bằng Chat GPT.
Mục lục
- 1 Chia nhỏ yêu cầu – tạo module riêng biệt cho từng chức năng
- 2 Gom vào thư mục riêng – dễ tổ chức và tái sử dụng
- 3 Tập trung vào kết quả mong muốn, tránh nói mơ hồ
- 4 Đưa ví dụ cụ thể – ChatGPT sinh code chính xác hơn
- 5 Dùng markdown – giúp dễ đọc, dễ copy
- 6 Kiểm tra lại – dùng prompt để sửa lỗi
- 7 Lập kế hoạch tổng thể – làm từ tổng quan đến chi tiết
Chia nhỏ yêu cầu – tạo module riêng biệt cho từng chức năng
Prompt gợi ý: Viết script Unity C# để điều khiển nhân vật 2D di chuyển qua lại bằng phím A/D. Đặt tên script là PlayerMovement.cs, viết theo hướng component, không dùng code trong GameManager.
Phản hồi ChatGPT sẽ tạo dạng:
// PlayerMovement.cs
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
void Update()
{
float moveX = Input.GetAxisRaw(“Horizontal”);
transform.Translate(Vector2.right * moveX * moveSpeed * Time.deltaTime);
}
}
Gom vào thư mục riêng – dễ tổ chức và tái sử dụng
Prompt gợi ý: Hãy tạo các thư mục theo cấu trúc: Scripts/Player, Scripts/Enemies, Scripts/UI và sắp xếp script vào đúng thư mục.
Ví dụ cấu trúc:
- PlayerMovement.cs ➜ Scripts/Player/
- EnemyAI.cs ➜ Scripts/Enemies/
- HealthBar.cs ➜ Scripts/UI/
Tập trung vào kết quả mong muốn, tránh nói mơ hồ
Prompt mơ hồ (không nên):
Làm game 2D nhân vật có thể chạy và nhảy
Prompt tốt hơn:
Viết 2 script Unity C#:
- PlayerMovement.cs điều khiển nhân vật đi trái/phải bằng A/D
- PlayerJump.cs cho phép nhảy khi nhấn Space, chỉ nhảy khi đang đứng trên mặt đất
Kết quả mong đợi:
// PlayerJump.cs
using UnityEngine;
public class PlayerJump : MonoBehaviour
{
public float jumpForce = 7f;
private Rigidbody2D rb;
public LayerMask groundLayer;
public Transform groundCheck;
private float checkRadius = 0.2f;
void Start() => rb = GetComponent<Rigidbody2D>();
void Update()
{
bool isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, groundLayer);
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
}
Đưa ví dụ cụ thể – ChatGPT sinh code chính xác hơn
Prompt có ví dụ: Tiếp tục phần code sau để nhân vật có thể nhảy bằng Space. Dùng Rigidbody2D:
void Update() {
float horizontal = Input.GetAxis(“Horizontal”);
transform.Translate(Vector2.right * horizontal * speed * Time.deltaTime);
}
Kết quả:
void Update() {
float horizontal = Input.GetAxis(“Horizontal”);
transform.Translate(Vector2.right * horizontal * speed * Time.deltaTime);
if (Input.GetKeyDown(KeyCode.Space) && isGrounded) {
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
Dùng markdown – giúp dễ đọc, dễ copy
Prompt: Viết hướng dẫn dạng markdown về cách tạo nhân vật 2D có thể nhảy, có ảnh minh họa Inspector
Ví dụ ChatGPT trả về:
Hướng dẫn thêm nhảy cho nhân vật 2D:
- Tạo empty GroundCheck dưới chân Player.
- Gắn script PlayerJump.cs.
- Trong Inspector:
- Gán Rigidbody2D
- Chọn Layer Ground
- Gán vị trí groundCheck
Kiểm tra lại – dùng prompt để sửa lỗi
Prompt sau khi chạy thử bị lỗi: Script nhảy không hoạt động, có thể vì không xác định đúng Ground. Sửa giúp với.
Gợi ý của ChatGPT: Hãy chắc chắn rằng Ground object nằm trong layer Ground, và Player có một groundCheck đặt gần chân. Ngoài ra cần đảm bảo Rigidbody2D đang hoạt động.
Lập kế hoạch tổng thể – làm từ tổng quan đến chi tiết
Prompt gợi ý: Tạo kế hoạch chi tiết cho game 2D platformer gồm:
- Nhân vật
- Vật phẩm
- Kẻ địch
- Màn chơi
- Thắng/thua
Ví dụ kế hoạch:
- Nhân vật: di chuyển trái/phải, nhảy, animation
- Vật phẩm: đồng xu, máu, nhặt và lưu điểm
- Kẻ địch: AI đơn giản, gây sát thương
- Màn chơi: dùng Tilemap, nhiều màn
- Thắng/thua: Win khi đến đích, Lose khi rơi hố
Giảng viên Lê Thị Hằng
Bộ môn Công nghệ thông tin
FPT Polytechnic Hà Nội