Bài 3 - Phát triển trò chơi - Bài giảng Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Tạo một số đường đi cho màn chơi: Sử dụng texture đất để vẽ lên cỏ. Có thể dùng công cụ Lower terrain làm đường đi thấp hơn một chút so với xung quanh. Lưu ý xóa hết cây và cỏ trên đường đi, có thể hiểu là nó tỉ lệ thuận (1 cách tương đối) với thời gian chạy. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Thông tin:
12 trang 4 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Bài 3 - Phát triển trò chơi - Bài giảng Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Tạo một số đường đi cho màn chơi: Sử dụng texture đất để vẽ lên cỏ. Có thể dùng công cụ Lower terrain làm đường đi thấp hơn một chút so với xung quanh. Lưu ý xóa hết cây và cỏ trên đường đi, có thể hiểu là nó tỉ lệ thuận (1 cách tương đối) với thời gian chạy. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

58 29 lượt tải Tải xuống
I 3 PHÁT TRIN T CHƠI T CÁC TÀI NGUN SN
1. Ý NG T CI
- Người chơi điều khin mt nhân vt, chy trn khỏi đám zombie. Mục tiêu là người chơi
cn phải đến nơi trú ẩn.
2. THIT K N CHƠI
A) THIT K LEVEL
Tiếp tc phát triển môi trường t Bài 2, b sung thêm mô hình nhà vi mục đích làm nơi
trú n cho nhân vt cách v trí ban đầu ca nhân vt mt khoảng cách đủ xa.
Tùy chn: To mt s đường đi cho màn chơi: S dụng texture đất để v lên c. th
dùng công c Lower terrain làm đường đi thấp hơn một chút so với xung quanh. Lưu ý
xóa hết cây và c trên đường đi.
B) TO NAVIGATION MESH
Sau khi đã hài lòng với màn chơi, chúng ta cần phi to mt Navigation Mesh. Cái này có
th hiu một bản đồ” xác định nhng v trí các nhân vt th di chuyn trên b
mt của môi trường được (Không áp dụng cho người chơi, nhưng sẽ áp dng cho các nhân
vật máy điều khiển, vd. các đối tượng s dng script AIThirdPersonController).
Đầu tiên, chúng ta vào menu Window | AI | Navigation để bt ca s Navigation lên nếu
chưa được bt. Mặc định ca s này s nm bên tab bên trái ca ca s Inspector.
n vào tab Bake trong ca s Navigation, sau đó thiết lp các thông s như sau:
- Radius: Bán kính của agent. Đặt là 0.5 (tương đương với 0.5 mét)
- Height: Chiều cao. Đặt là 2
- Step Height: Bưc chân ca agent. Nếu con s y đủ ln thì agent th di chuyn
qua các địa hình (vd. bc) có khong cách nh hơn giá trị này. Đặt là 0.5.
- Max Slope: Góc tối đa của địa hình mà agent có th di chuyển được. Đặt là 45 độ.
Sau đó n vào nút Bake để Unity nh toán và sinh ra lưới di chuyển cho các agent trên địa
hình. Quá trình này có th mt nhiu phút, các bn vn có th làm các thao tác khác trên
Unity. Lưu ý: Nếu các bạn thay đổi bt k đối tượng tĩnh nào, các bạn s phi bake li
Navigation Mesh.
Sau khi bake xong, trên ca s Scene s hin th một lưới màu xanh trên b mt môi
trường (khi ca s Navigation đang được bt). Lưới màu xanh này th hin nhng khu
vc mà các agent có th di chuyển được.
3. TO CÁC NHÂN VT VÀ QI VT
A) NHÂN VT
Các bn th s dng Third Person Controller hoc First Person Controller tùy ý bng
cách download các gói Starter Pack tương ng trên Unity Asset Store (xem thêm mc 4,
bài 2)
Tùy chn: Đối vi Third Person Controller, các bn có th thay thế mô hình nhân vt khác
theo các bước như sau:
c 1: Thêm vào mt Third Person Controller vào Scene.
c 2: Download nhân vt mi. Có th download trên Unity Asset store hoc dùng
mt hình bt k (ví d download t Mixamo). Chn Animation Type ca hình
đó là Humanoid.
c 3: Xóa mô hình gc ca prefab, có th phải Unpack prefab để xóa nếu cn. Kéo
mô hình nhân vt mi vào thay thế.
c 4: Chọn prefab Third Person Controller, đổi Avatar ca nhân vt mi.
Tham kho thêm chi tiết đối vi các mô hình download ti Mixamo ti Ph lc 2 - S
dng mô hình t Mixamo
B) QUÁI VT
Thêm AI Character Controller vào màn chơi, sau đó kéo Game Object người chơi vào mục
Target trong AI Character Controller trên ca s Inspector ca quái vt. Vic này s
khiến cho các đối tượng này t động di chuyển đến người chơi. Để giảm độ khó ca trò
chơi, ta giảm Speed của các đối tượng này còn 0.1.
Việc thay đổi mô hình ca quái vật cũng tương t như thay đổi mô hình của người chơi.
4. TƯƠNG C
A) GIA NHÂN VT QUÁI VT
Ý tưởng là khi nhân vt có va chm vi quái vật thì trò chơi kết thúc. Do đó, cn phi xét
x va chm giữa 2 đối tượng ( đây là quái vt và nhân vt). Việc này trong Unity được
x lý bng các thành phn Collider. Trong các game đơn giản, hoc cn tối ưu hiệu năng,
chúng ta ch cn s dng Box Collider. Trong nhng game phc tạp hơn, cần chi tiết hơn
trong vic x lý va chm (ví d game đối kháng), chúng ta có th s dng Mesh Collider.
Mặc định, các game object trong Unity không collider đ tối ưu hiệu năng. Để thêm
collider cho một đối ng, các bn chọn đối tượng game cn thêm, ti ca s Inspector
chọn Add Components, tìm thêm collider tương ng. d trong bài này ta chn
BoxCollder. Nhìn sang mô hình trên ca s Scene, có th thấy Collider được hin th màu
xanh lá cây bao xung quanh mô hình. Chn Edit Collider nếu thấy đường bao không khp
vi mô hình, hoc chnh sa trc tiếp giá tr Center và Size.
Để th x va chạm, đánh dấu chn mc Is Trigger. Khi đó, mi khi hình va
chạm, phương thức OnTriggerEnter của game object đó sẽ đưc gi.
Ý tưởng trò chơi là khi nào nhân vật có va chm vi quái vật, người chơi sẽ b reset v v
trí ban đầu. Để thc hin ý tưởng này, ta cn mt biến lưu trữ tọa độ của người chơi
lúc mi bt đầu. Mi khi có va chm với đối tượng được đánh du, tọa độ của người chơi
s chuyn v v trí ban đầu này.
Để thc hiện, trước hết ta chọn đối tượng quái vt. Trong ca s Inspector, dưới tên ca
đối tượng game chn Tag Add Tag… và thêm vào một tag nào đó, ví dụ “Zombie”.
Sau đó, viết mã ngun cho nhân vt (xem li cách tạo script và thêm vào đối tượng game
Bài 1) như sau
public class Player : MonoBehaviour
{
private Vector3 defaultPosition;
// Start is called before the first frame update
void Start()
{
defaultPosition = this.transform.position;
}
// Update is called once per frame
void Update()
{
}
void OnTriggerEnter(Collider obj)
{
if (obj.tag == "Zombie")
{
this.transform.position = defaultPosition;
}
}
}
B) GIA NHÂN VT SAFE HOUSE
Tương tự, ta cũng thêm một đối tượng ngôi nhà vào khung cnh, thêm tag cho ngôi nhà
(ví d “Goal”).
else if (obj.tag == "Goal")
{
PH LC
PH LC 1 HƯỚNG DẪN CÀI ĐT STARTER ASSETS FIRST PERSON CHARACTER
CONTROLLER
c 1: Truy cập vào đường link Starter Asset First Person Character
Tiếp theo nhn vào nút Add to my Asset. Sau khi thêm vào thành công thì nút đó s thay
bằng Open in Unity như hình trên. Sau đó nhấn vào Open in Unity, ca s Package
Manager trên Unity s hin ra và tr ti asset mình va thêm vào
c 2: Download và Import:
Ti package manager, khi tr ti asset mình va thêm s có nút Download để ti asset
đó về. Sau khi ti xong, nút download s thành nút Import như hình dưới
Nhn vào nút Import, ca s Import s hin lên, ta nhn tiếp vào Import
(Lưu ý, nếu có thông báo này hin ra, nhn Yes, khi đó Unity sẽ khởi đng li)
c 3: Cho nhân vt vào game và tri nghim
ca s project, truy cập theo đường dn sau:
Assets\StarterAssets\FirstPersonController\Prefabs
Sau khi vào thư mục Prefabs, kéo 3 prefabs vào scene game, đó là:
- MainCamera (Nếu trong scene đã một MainCamera trước đó thì hãy xóa cái
đấy trước)
- PlayerCapsule
- PlayerFollowCamera
(Lưu ý: Khi kéo PlayerCapsule vào Scene thì hãy để lên trên địa hình, nếu không sau khi
chy game nhân vt s lt xuống dưới địa hình và rơi tự do)
Tiếp theo, nhn vào PlayerFollowCamera trên Scene, trong ca s Inspector s thy mt
Component tên là CinemachineVirtualCamera
Ti phn Follow hin tại đang None chúng ta s kéo PlayerCameraRoot nm trong
PlayerCapsule trong ca s Hierarchy vào
Chú ý: Do asset mi thêm vào s dng h thng Input mi nên chúng ta cn phi thay thế
li h thống Input như sau:
Click chut phi vào ca s Hierarchy, kéo xung Ui, chn Event System, mt Object mi
có tên Event System s đưc to.
Nhn vào Event System, ca s Inspector kéo đến Component Standalone Input
Module và nhn vào nút Replace with InputSystemUIInputModule.
PH LC 2 - S DNG MÔ NH T MIXAMO
Để s dng mô hình t Mixamo: Truy cp vào link https://www.mixamo.com
Đăng nhập vào mixamo sau đó chọn cho mình nhân vt mình mun s dng nhn
Download. Chọn nơi tải v là folder Assets ca project
Chọn định dạng như hình:
Nhân vt sau khi ti xong:
Nhn vào file nhân vt va ti xong, trong ca s Inspector nhn vào Materials. Ti
Location, chuyn thành Use External Materials (Legacy) sau đó nhấn Apply,
Material ca nhân vt s đưc cp nht
Nếu có thông báo này, hãy nhn Fix Now
Tiếp theo, chuyn sang Rig, ti mc Animation Type chuyn sang Humanoid ri
nhn Apply
c 3: Thay thế nhân vt
Trong ca s Hierarchy, nhn chut phi vào PlayerAmature ri chn Prefab
Unpack
Tiếp theo, m các object con ca PlayerAmature ra s thy object tên
Amature_Mesh, hãy a object đó đi bằng cách nhn chuột vào object đó rồi nhn
phím Del.
Kéo file nhân vt va ti vào object Geometry, nhân vt mi s đưc thay thế
Cui cùng, nhn li vào PlayerAmature, trong ca s Inspector Component
Animator, ti phn Avatar hãy thay Avatar ca nhân vt mi vào
| 1/12

Preview text:

BÀI 3 – PHÁT TRIỂN TRÒ CHƠI TỪ CÁC TÀI NGUYÊN CÓ SẴN 1. Ý TƯỞNG TRÒ CHƠI
- Người chơi điều khiển một nhân vật, chạy trốn khỏi đám zombie. Mục tiêu là người chơi
cần phải đến nơi trú ẩn. 2. THIẾT KẾ MÀN CHƠI A) THIẾT KẾ LEVEL
Tiếp tục phát triển môi trường từ Bài 2, bổ sung thêm mô hình nhà với mục đích làm nơi
trú ẩn cho nhân vật ở cách vị trí ban đầu của nhân vật một khoảng cách đủ xa.
Tùy chọn: Tạo một số đường đi cho màn chơi: Sử dụng texture đất để vẽ lên cỏ. Có thể
dùng công cụ Lower terrain làm đường đi thấp hơn một chút so với xung quanh. Lưu ý
xóa hết cây và cỏ trên đường đi. B) TẠO NAVIGATION MESH
Sau khi đã hài lòng với màn chơi, chúng ta cần phải tạo một Navigation Mesh. Cái này có
thể hiểu là một “bản đồ” xác định những vị trí mà các nhân vật có thể di chuyển trên bề
mặt của môi trường được (Không áp dụng cho người chơi, nhưng sẽ áp dụng cho các nhân
vật máy điều khiển, vd. các đối tượng sử dụng script AIThirdPersonController).
Đầu tiên, chúng ta vào menu Window | AI | Navigation để bật cửa sổ Navigation lên nếu
chưa được bật. Mặc định cửa sổ này sẽ nằm bên tab bên trái của cửa sổ Inspector.
Ấn vào tab Bake trong cửa sổ Navigation, sau đó thiết lập các thông số như sau:
- Radius: Bán kính của agent. Đặt là 0.5 (tương đương với 0.5 mét)
- Height: Chiều cao. Đặt là 2
- Step Height: Bước chân của agent. Nếu con số này đủ lớn thì agent có thể di chuyển
qua các địa hình (vd. bậc) có khoảng cách nhỏ hơn giá trị này. Đặt là 0.5.
- Max Slope: Góc tối đa của địa hình mà agent có thể di chuyển được. Đặt là 45 độ.
Sau đó ấn vào nút Bake để Unity tính toán và sinh ra lưới di chuyển cho các agent trên địa
hình. Quá trình này có thể mất nhiều phút, các bạn vẫn có thể làm các thao tác khác trên
Unity. Lưu ý: Nếu các bạn thay đổi bất kỳ đối tượng tĩnh nào, các bạn sẽ phải bake lại Navigation Mesh.
Sau khi bake xong, trên cửa sổ Scene sẽ hiển thị một lưới màu xanh trên bề mặt môi
trường (khi cửa sổ Navigation đang được bật). Lưới màu xanh này thể hiện những khu
vực mà các agent có thể di chuyển được.
3. TẠO CÁC NHÂN VẬT VÀ QUÁI VẬT A) NHÂN VẬT
Các bạn có thể sử dụng Third Person Controller hoặc First Person Controller tùy ý bằng
cách download các gói Starter Pack tương ứng trên Unity Asset Store (xem thêm mục 4, bài 2)
Tùy chọn: Đối với Third Person Controller, các bạn có thể thay thế mô hình nhân vật khác theo các bước như sau:
Bước 1: Thêm vào một Third Person Controller vào Scene.
Bước 2: Download nhân vật mới. Có thể download trên Unity Asset store hoặc dùng
một mô hình bất kỳ (ví dụ download từ Mixamo). Chọn Animation Type của mô hình đó là Humanoid.
Bước 3: Xóa mô hình gốc của prefab, có thể phải Unpack prefab để xóa nếu cần. Kéo
mô hình nhân vật mới vào thay thế.
Bước 4: Chọn prefab Third Person Controller, đổi Avatar của nhân vật mới.
Tham khảo thêm chi tiết đối với các mô hình download tại Mixamo tại Phụ lục 2 - Sử
dụng mô hình từ Mixamo
B) QUÁI VẬT
Thêm AI Character Controller vào màn chơi, sau đó kéo Game Object người chơi vào mục
Target ở trong AI Character Controller trên cửa sổ Inspector của quái vật. Việc này sẽ
khiến cho các đối tượng này tự động di chuyển đến người chơi. Để giảm độ khó của trò
chơi, ta giảm Speed của các đối tượng này còn 0.1.
Việc thay đổi mô hình của quái vật cũng tương tự như thay đổi mô hình của người chơi. 4. TƯƠNG TÁC
A) GIỮA NHÂN VẬT VÀ QUÁI VẬT
Ý tưởng là khi nhân vật có va chạm với quái vật thì trò chơi kết thúc. Do đó, cần phải xét
xử lý va chạm giữa 2 đối tượng (ở đây là quái vật và nhân vật). Việc này trong Unity được
xử lý bằng các thành phần Collider. Trong các game đơn giản, hoặc cần tối ưu hiệu năng,
chúng ta chỉ cần sử dụng Box Collider. Trong những game phức tạp hơn, cần chi tiết hơn
trong việc xử lý va chạm (ví dụ game đối kháng), chúng ta có thể sử dụng Mesh Collider.
Mặc định, các game object trong Unity không có collider để tối ưu hiệu năng. Để thêm
collider cho một đối tượng, các bạn chọn đối tượng game cần thêm, tại cửa sổ Inspector
chọn Add Components, tìm và thêm collider tương ứng. Ví dụ trong bài này ta chọn
BoxCollder. Nhìn sang mô hình trên cửa sổ Scene, có thể thấy Collider được hiển thị màu
xanh lá cây bao xung quanh mô hình. Chọn Edit Collider nếu thấy đường bao không khớp
với mô hình, hoặc chỉnh sửa trực tiếp giá trị Center và Size.
Để có thể xử lý va chạm, đánh dấu chọn ở mục Is Trigger. Khi đó, mỗi khi mô hình có va
chạm, phương thức OnTriggerEnter của game object đó sẽ được gọi.
Ý tưởng trò chơi là khi nào nhân vật có va chạm với quái vật, người chơi sẽ bị reset về vị
trí ban đầu. Để thực hiện ý tưởng này, ta cần có một biến lưu trữ tọa độ của người chơi
lúc mới bắt đầu. Mỗi khi có va chạm với đối tượng được đánh dấu, tọa độ của người chơi
sẽ chuyển về vị trí ban đầu này.
Để thực hiện, trước hết ta chọn đối tượng quái vật. Trong cửa sổ Inspector, dưới tên của
đối tượng game chọn Tag → Add Tag… và thêm vào một tag nào đó, ví dụ “Zombie”.
Sau đó, viết mã nguồn cho nhân vật (xem lại cách tạo script và thêm vào đối tượng game ở Bài 1) như sau
public class Player : MonoBehaviour {
private Vector3 defaultPosition;
// Start is called before the first frame update void Start() {
defaultPosition = this.transform.position; }
// Update is called once per frame void Update() { }
void OnTriggerEnter(Collider obj) { if (obj.tag == "Zombie") {
this.transform.position = defaultPosition; } } }
B) GIỮA NHÂN VẬT VÀ SAFE HOUSE
Tương tự, ta cũng thêm một đối tượng ngôi nhà vào khung cảnh, thêm tag cho ngôi nhà (ví dụ “Goal”). else if (obj.tag == "Goal") { PHỤ LỤC
PHỤ LỤC 1 – HƯỚNG DẪN CÀI ĐẶT STARTER ASSETS – FIRST PERSON CHARACTER CONTROLLER
Bước 1: Truy cập vào đường link Starter Asset – First Person Character
Tiếp theo nhấn vào nút ở Add to my Asset. Sau khi thêm vào thành công thì nút đó sẽ thay
bằng Open in Unity như hình trên. Sau đó nhấn vào Open in Unity, cửa sổ Package
Manager trên Unity sẽ hiện ra và trỏ tới asset mình vừa thêm vào
Bước 2: Download và Import:
Tại package manager, khi trỏ tới asset mình vừa thêm sẽ có nút Download để tải asset
đó về. Sau khi tải xong, nút download sẽ thành nút Import như hình dưới
Nhấn vào nút Import, cửa sổ Import sẽ hiện lên, ta nhấn tiếp vào Import
(Lưu ý, nếu có thông báo này hiện ra, nhấn Yes, khi đó Unity sẽ khởi động lại)
Bước 3: Cho nhân vật vào game và trải nghiệm
Ở cửa sổ project, truy cập theo đường dẫn sau:
Assets\StarterAssets\FirstPersonController\Prefabs
Sau khi vào thư mục Prefabs, kéo 3 prefabs vào scene game, đó là:
- MainCamera (Nếu trong scene đã có một MainCamera trước đó thì hãy xóa cái đấy trước) - PlayerCapsule
- PlayerFollowCamera
(Lưu ý: Khi kéo PlayerCapsule vào Scene thì hãy để lên trên địa hình, nếu không sau khi
chạy game nhân vật sẽ lọt xuống dưới địa hình và rơi tự do)
Tiếp theo, nhấn vào PlayerFollowCamera trên Scene, trong cửa sổ Inspector sẽ thấy một
Component tên là CinemachineVirtualCamera
Tại phần Follow hiện tại đang là None chúng ta sẽ kéo PlayerCameraRoot nằm trong
PlayerCapsule ở trong cửa sổ Hierarchy vào
Chú ý: Do asset mới thêm vào sử dụng hệ thống Input mới nên chúng ta cần phải thay thế
lại hệ thống Input như sau:
Click chuột phải vào cửa sổ Hierarchy, kéo xuống Ui, chọn Event System, một Object mới
có tên Event System sẽ được tạo.
Nhấn vào Event System, ở cửa sổ Inspector kéo đến Component Standalone Input
Module
và nhấn vào nút Replace with InputSystemUIInputModule.
PHỤ LỤC 2 - SỬ DỤNG MÔ HÌNH TỪ MIXAMO
Để sử dụng mô hình từ Mixamo: Truy cập vào link https://www.mixamo.com
Đăng nhập vào mixamo sau đó chọn cho mình nhân vật mình muốn sử dụng và nhấn
Download. Chọn nơi tải về là folder Assets của project
Chọn định dạng như hình:
Nhân vật sau khi tải xong:
Nhấn vào file nhân vật vừa tải xong, trong cửa sổ Inspector nhấn vào Materials. Tại
Location
, chuyển thành Use External Materials (Legacy) sau đó nhấn Apply,
Material của nhân vật sẽ được cập nhật
Nếu có thông báo này, hãy nhấn Fix Now
Tiếp theo, chuyển sang Rig, tại mục Animation Type chuyển sang Humanoid rồi nhấn Apply
Bước 3: Thay thế nhân vật
Trong cửa sổ Hierarchy, nhấn chuột phải vào PlayerAmature rồi chọn Prefab Unpack
Tiếp theo, mở các object con của PlayerAmature ra sẽ thấy object tên là
Amature_Mesh, hãy xóa object đó đi bằng cách nhấn chuột vào object đó rồi nhấn phím Del.
Kéo file nhân vật vừa tải vào object Geometry, nhân vật mới sẽ được thay thế
Cuối cùng, nhấn lại vào PlayerAmature, trong cửa sổ Inspector có Component
Animator, tại phần Avatar hãy thay Avatar của nhân vật mới vào
Document Outline

  • BÀI 3 – PHÁT TRIỂN TRÒ CHƠI TỪ CÁC TÀI NGUYÊN CÓ SẴN
    • 1. Ý tưởng trò chơi
    • 2. Thiết kế màn chơi
      • a) Thiết kế level
      • b) Tạo Navigation Mesh
    • 3. Tạo các nhân vật và quái vật
      • a) Nhân vật
      • b) Quái vật
    • 4. Tương tác
      • A) Giữa nhân vật và quái vật
      • b) Giữa nhân vật và safe house
  • PHỤ LỤC
    • Phụ lục 1 – Hướng dẫn cài đặt Starter Assets – First Person Character Controller
    • Phụ lục 2 - Sử dụng mô hình từ Mixamo