Tải bản đầy đủ (.pdf) (18 trang)

Nhóm 6 Thực Hành Lập Trình Unity.pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (8.73 MB, 18 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>NHÓM 6: ực hành lập trình UnityThThành viên: </b>

<b>1. Lê Thành An 20235631 (leader) 2. Đinh Ngọc Khánh 20235752 3. Nguyễn Thế Thành 20235831 4. Nguyễn Anh Tuấn 20235860 </b>

1. TẠO ĐỊA HÌNH

<b>Để tạo địa hình trong Unity, ta chọn menu GameObjects | Create Others | Terrain </b>

Chọn Terrain vừa tạo, ta thấy cửa sổ Inspector như sau

Trong đó

<b>• Paint Terrain: Bao gồ</b>m nhiều cơng cụ để có thể ẽ” địa hình. Chẳng hạ“v n như:

o <b>(Stamp Terrain): Sử dụng để đóng dấu một o (Raise / Lower Terrain): Sử </b>

dụng để nâng cao bề mặt địa hình. Sử dụng kết hợp với phím Shift để hạ địa hình

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

o <b>(Paint Holes): Sử dụng để ẩn các phần của địa hình. Cơng cụ này cho </b>

phép tạo ra khoảng trống trong đị hình. Có thể dùng để tạo hang động a và vách đá

o <b>(Paint Texture): Vẽ texture lên địa hình </b>

o <b>(Set Height): Sử dụng phím Shift và ấn vào một độ cao nào đó để lấy </b>

mẫu, sau đó ta có thể sử dụng công cụ này để nâng độ cao đến bằng mẫu đó

o <b>(Smooth Height): Làm mịn bề mặt địa hình, giúp địa hình các vùng lân </b>

cận có độ cao tương đồng hơn hình dạng brush lên trên Heightmap hiện tại. Hữu ích khi tạo một brush tùy chỉnh bằng cách sử dụ Texture.ng

<b>• (Place Trees): Đặt cây lên bề mặt địa hình </b>

<b>• (Paint Details): Đặt các chi tiết nhỏ như cỏ cây hoa lá lên bề mặt địa hình • (Terrain Settings): Thay đổi các thiết lậ</b>p của địa hình.

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>Sau đó chúng ta sử dụng công cụ Raise / Lower Terrain, Smooth Terrain và Paint Height và tạo hình một hịn đảo dạng như hình vẽ ới đây</b>dư

ọn cơng cụ Ch <b>Paint Texture ấn vào button </b>, <b>Edit Textures và chọn Add Texture… </b>

Sau đó chúng ta lần lượt thêm vào các texture Grass (Hill), Good Dirt, Grass & Rock và Cliff (Layered Rock). Mục Normal map chúng ta để ống vì ở đây chúng ta trkhông sử dụ Normal map. Chúng ta để nguyên giá trị size của texture là (15, ng

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

15), trừ Cliff (Layered Rock) chúng ta chọn size là (70, 70).

Ngay sau khi chúng ta vừa thêm vào texture đầu tiên thì tồn bộ địa hình của chúng ta sẽ được phủ texture đó. Vì địa hình của chúng ta phần lớn là cỏ xanh nên để cho dễ dàng các bạn nên thêm texture Glass (Hill) đầu tiên.

Tiếp theo các bạn chọn texture Good Dirt để tơ vào những vùng xung quanh hịn đảo bằ Brush thích hợp. Lưu ý là các bạn có ể ỉnh Brush size, Opacity và ng th chTarget Strength của Brush.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Kết quả thu được tương tự như hình sau:

Tiếp theo, chúng ta sẽ sử dụng texture Grass&Rock để vẽ ở nhưng vùng núi cao, theo tư tưởng là ở các vùng núi cao cỏ sẽ khó mọc hơn vùng đồng bằng.

Cuối cùng, chúng ta sẽ dùng texture Cliff (Layered Rock) để vẽ lên đỉnh núi cao nhất.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Chúng ta có được một hịn đảo (tương đối) hồn chỉnh như sau

4. ĐI DẠO QUANH HỊN ĐẢO

Như vậy hịn đảo của chúng ta đã tương đối hoàn tất. Giờ chúng ta có thể đi dạo một vịng quanh hịn đảo để ểm tra những gì chúng ta đã xây dựng.ki

<i>Chúng ta có thể thay đổi vị trí của Main Camera để xem các góc khác nhau tại hịn </i>

đảo.

Các khác là chúng ta có thể download một gói character controller bất kỳ (ví dụ Starter Asset – First Person Character) sau đó thêm prefab <i>FPS Controller</i> vào địa hình.

Chi tiết xem thêm tại Phụ lục 1 - <i>Hướng dẫn cài đặt Starter Assets – First Person Character Controller. </i>

5. ĐẶT CÂY

<b>Chọn địa hình vừa tạo, ấn vào công cụ Place Tree Ấn vào Edit Trees… và chọn Add Tree </b>

Trong cửa sổ Add Tree hiện ra, ấn vào vòng tròn bên cạnh mục Tree và chọn mơ

<i>hình cây bất kỳ. Ở đây ta chọn mơ hình Palm có sẵn trong Terrain Asset. Ta cũng có </i>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<i>thể thay đổi giá trị Bend Factor, là độ tác động của gió lên độ nghiêng của cây (ví </i>

dụ: 2)

Việc đặt cây lên địa hình cũng tương tự như việ ẽ texture lên địa hình. Chú ý khi c vvẽ nếu zoom quá xa thì Unity sẽ tự động khơng hiển thị lên cửa sổ Scene, do đó làkhi đặt cây lên địa hình nên zoom vào một khoảng cách nhất định

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

6. VẼ CÁC CỎ CÂY HOA LÁ LÊN ĐỊA HÌNH

<b>Chọn cơng cụ Paint Details trong thanh cơng cụ của địa hình. Cũng tương tự như </b>

vẽ cây, chúng ta có thể dùng cơng cụ này để vẽ các chi tiết nhỏ như cỏ, hoa, lá… lên bề mặt địa hình. Các chi tiết này sử dụng cơng nghệ billboarding, thực chất là các texture 2D nhưng luôn quay về phía người chơi tạo cảm giác 3D.

<b>Tương tự, ta ấn vào Edit Details… và chọn Add Grass Texture. </b>

<i>Tiếp theo, ta chọn Detail Texture là Grass, chọn màu sắc Healthy Color và Dry Color</i>

cho phù hợp với màu sắ ủa địa hìnhc c

Để cỏ mọc rải rác và đồng thời cũng giảm thiểu tiêu tốn tài nguyên của máy tính, ta nên ọn Brush thưa hơn khi vẽ cỏ lên địa hình. Tương tự như khi vẽ cây cối, ch

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Unity sẽ không ển thị các chi tiết này trừ phi chúng ta zoom vào thật gầhi n.

7. SKYBOX

<b>Chọn menu Assets | Import Package | Skyboxes </b>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>Chọn menu Edit | Render Settings… Ở cửa sổ Inspector ấn vào Skybox Material và </b>

chọn skybox phù hợp

8. ÁNH SÁNG

Địa hình của chúng ta vừa tạo là cảnh ngồi trời, do đó chúng ta sẽ sử dụng

<i>Directional Light để làm nguồn ánh sáng chính cho khung cảnh. Với các loại ánh </i>

sáng khác chúng ta cũng làm tương tự.

<i>Mặc định, khi tạo ra Project mới, Unity đã tạo ra một Directional Light. Nếu chưa </i>

<b>có, chúng ta chọn menu GameObject | Create Other | Directional Light </b>

Ta có thể chọn đối tượng ánh sáng này và rotate hướng ánh sáng cho phù hợp. Mặc dù ta cũng có thể thay đổi vị trí của đối tượng này nhưng việc này khơng có

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<i>tác dụng trong game vì ánh sáng chiếu của Directional Light là ánh sáng song song.</i>

Các bạn download một asset water shader bất kỳ và add vào Scene. Chỉnh vị trí sao cho độ cao y cao hơn mặt đất và tâm đặt tại chính giữa địa hình. Sau đó phóng to đối tượ Water để bao trùm cả địa hình.ng

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Kết quả thu được như hình dưới

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

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ậ ở cách vị trí ban đầ ủa nhân vật một khoảng cách t u cđủ 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

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

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ó ể ểu là một “bảth hi 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).

<b>Đầu tiên, chúng ta vào menu Window | AI | Navigation để bật cửa sổ Navigation </b>

lên nếu

chưa đượ ật. Mặc địc b 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. Q 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,

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

các bạ ẽ n s phải bake lại Navigation Mesh.

Sau khi bake xong, trên cửa sổ Scene sẽ ển thị một lưới màu xanh trên bề mặhi t môi trường (khi cửa sổ Navigation đang đượ ật). Lưới màu xanh này thể c b 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)

(Nâng cao) Đố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 dung 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ố ủa prefab, có thể ải Unpack prefab để xóa nế ần. c c ph u cKéo mơ hình nhân vật mới vào thay thế.

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

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 -

<i>Sử dụng mơ hình từ Mixamo </i>

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.

Duplicate

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 qi 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ầ ử dụng Box Collider. Trong những n sgame phứ ạp hơn, cần chi tiết hơn trong việ ử lý va chạm (ví dụ game đốc t c x 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. Để them 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 ọn Add Components, tìm và thêm collider tương ứng. Ví dụ trong chbài này ta chọn BoxCollider. 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

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

giá trị Center và Size.

Để có thể xử lý va chạm, đánh dấu chọ ở mục Is Trigger. Khi đó, mỗi khi mơ hình n có va ạm, phương thức OnTriggerEnter của game object đó sẽ ch đượ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.

Để ực hiện, trướ ết ta chọth c h 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

<small>public class Player : MonoBehaviour { </small>

<small>private Vector3 defaultPosition; </small>

<small>// Start is called before the first frame update void Start() { </small>

<small>// Update is called once per frame </small>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<small>void OnTriggerEnter(Collider obj) { if (obj.tag == "Zombie") { </small>

<small>this.transform.position = defaultPosition; } } </small>

<small>} </small>

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”).

<small>else if (obj.tag == "Goal") { </small>

<small>// … }</small>

Gợi ý một số tính năng có thể cài đặt:

- Cho nhân vật chuyển vị trí đến một địa điểm khác trên bản đồ.

- Cho nhân vật dừng di chuyển (Gợi ý: Disable component Character Controller

<b>của nhân vật bằng lệnh GetComponent<CharacterController>().enabled = false; ) </b>

- Từ từ zoom camera ra xa. …

<b>---Hết--- </b>

</div>

×