Hướng dẫn làm game trên Unity 3D Phần 2

Thảo luận trong 'Unity' bắt đầu bởi Trần Văn Cường, 16/1/16.

  1. Trần Văn Cường

    Trần Văn Cường I love CNTT Thành viên BQT Thành viên BQT

    Tham gia ngày:
    8/11/15
    Bài viết:
    3,693
    Đã được thích:
    43
    Điểm thành tích:
    48
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên
    Nơi ở:
    Quảng Ninh thân yêu!
    Web:

    • Thiết lập vùng dịch chuyển của súng để súng không dịch chuyển ra ngoài màn hình game: có 02 cách để giới hạn vùng dịch chuyển cho vật đó là: giới hạn tọa độ và chặn vật khác. Hướng dẫn cách giới hạn tọa độ
    • huong-dan-lam-game-tren-unity-3d-750x272.png
    • Chọn đối tượng súng nhấn vào biểu tượng khoanh tròn trên thanh công cụ ToolBar; Chọn khung Scene; nhấn chuột vào mũi tên vàng trục tọa độ x; kích rê sang phải hoặc trái và quan sát Position khung Inspector. Khi tọa độ x của vật > giá trị này thì vật sẽ di chuyển ra ngoài màn hình Game; Vậy khi x < giá trị này thì ấn phím dịch phải vật mới dịch chuyển; còn > giá trị này vật không dịch chuyển; Tương tự như vậy khi vật nằm phía bên trái tọa độ Đề_các.
    • Mở C# sung_move sửa thêm điều kiện dịch chuyển:
    huong-dan-lam-game-tren-unity-3d-step-2-750x306.png
    transform.position.x: lấy tọa độ trục x của vật

    • Tạo GameObject: Đạn
    • Tương tự bg, sung ta vào [menu] GameObject/2D Object/Sprite đặt tên Dan; kéo hình ảnh đạn vào thuộc tính Sprite Renderer ở khung Inspector đối tượng Dan.
    • Đạn được bắn thẳng theo trục y: có mã dịch chuyển đạn
    • Đạn được bắn từ GameObject súng khi nhấn phím Space: phải gắn đạn vào súng.
    • 1 hình ảnh đạn (sprite) nhưng xuất hiện nhiều lần (đặt đối tượng đạn vào thư mục Prefabs)
    Tạo tệp C# dan_move: viết mã dịch chuyển đạn (tương tự như dịch chuyển súng)

    Để gắn đạn cho súng và đạn xuất hiện khi ấn phím Space: ta mở tệp C# sung_move thêm mã khi người chơi ấn phím Space đạn bay lên từ súng

    huong-dan-lam-game-tren-unity-3d-step-3-750x348.png

    Để tạo một Prefab trong quá trình thực thi game: Instantiate(gameObject, Vector3, Quaternion) sinh đối tượng GameObject, tại vị trí Vector3, góc xoay

    Instantiate(dan,transform.position,Quaternion.identity);

    Câu lệnh trong đoạn mã là sinh đối tượng dan, tại vị trí súng và đạn bay thẳng.

    Và biến dan là một đối tượng GameObject nên được khai báo như mẫu; Lưu code; buid.

    Quay lại Unity

    + Tạo đạn là Prefabs: mở thư mục Prefabs; kéo đối tượng dan từ cửa sổ Hierachy xuống. Xóa đối tượng dan ở khung Hierachy.

    + Chọn đối tượng súng ở khung Hierachy rồi kéo dan trong Prefabs vào biến bên khung Inspector

    huong-dan-lam-game-tren-unity-3d-step-4-750x332.png

    Lưu Scene (CTRL + S). Chạy thử

    Ta nhận thấy rằng đối tượng Dan được sinh hiển thị trong khung Hierachy không được giải phóng bộ nhớ khi Dan đi ra khỏi màn hình Game. Cách xử lý: Khi mà tọa độ Dan ra khỏi màn hình Game thì giải phóng Dan. Mở C# dan_move; thêm code

    huong-dan-lam-game-tren-unity-3d-step-5-750x272.png

    transform.position.y lấy tọa độ y của Dan. Cả câu lệnh: kiểm tra nếu tọa độ của viên đạn >5.5 (ra khỏi màn hình Game) thì Destroy(this.gameObject): giải phóng Dan.

    Lưu lại Buid All; chạy thử

    • Tạo GameObject Gà: giống Dan
    • [menu] GameObject/2D Object/Sprite đặt tên Ga; kéo hình ảnh gà vào thuộc tính Sprite Renderer ở khung Inspector đối tượng Ga.
    + Gà dịch chuyển từ phải sang trái và khi ra khỏi màn hình Game cũng được giả phóng giống Dan. Mở thư mục Scripts tạo tệp C# ga_move viết mã:

    huong-dan-lam-game-tren-unity-3d-step-6-750x272.png

    Gắn ga_move vào đối tượng Ga. Lưu, chạy thử.

    Để gà xuất hiện ngẫu nhiên ở mép phải màn hình Game ta làm như sau:

    + Dịch chuyển đối tượng Ga sinh nhiều lần vào Prefabs; xóa đối tượng khỏi khung Hierachy.

    + Tạo một đối tượng rỗng (để chứa đối tượng gà ở trên) và cho sinh ngẫu nhiên: Vào [menu] GameObject\ Creat Empty

    + Tạo mã sinh_ga

    huong-dan-lam-game-tren-unity-3d-step-7-750x292.png

    Sau đó quay lại màn hình Hierachy áp đối tượng sinh_ga trong thư mục Prefabs cho đối tượng ga.

    Lưu và chạy thử

    Như vậy ba đối tượng súng, đạn, gà đã hoạt động theo kịch bản. Bước tiếp theo ta phải xử lý là khi gà gặp đạn thì gà và đạn cùng biến mất hay trong Unity được gọi là xử lý va chạm.

    • Để xử lý va chạm gà và đạn ta làm như sau:
    • Tạo biên đối tượng để xác định va chạm: Mở thư mục Prefabs chọn đối tượng dan; khung Inspector chọn Add Component\ Physics 2D\Box Collider 2D. Tương tự như vậy với đối tượng ga.
    huong-dan-lam-game-tren-unity-3d-step-8-750x390.png

    Và ta viết mã xử lý va chạm trong tệp C# dan_move

    huong-dan-lam-game-tren-unity-3d-step-10-750x322.png

    Lưu lại, Built All, quay trở lại Unity; gán thêm thuộc tính Rigidbody 2D cho đối tượng ga (Add Component\ Physics 2D\Rigidbody 2D); chọn Gravity Scale (trọng lực của vật) của Rigidbody 2D là 0 để vật không bị trôi xuống

    Lưu Scene (CTRL + S) chạy thử.

    Giới hạn game chơi trong 1 phút

    1. var startTime = 0;
    2. var timeLimit = 90.0;
    3. function Update () {
    4. //The time taken so far
    5. timeTaken = startTime + Time.time;
    6. // Format the time nicely
    7. guiText.text = FormatTime (timeTaken);
    8. if (timeTaken >= timeLimit)
    9. Application.LoadLevel(0);
    10. }
    11. //Format time like this
    12. // 17[minutes]:21[seconds]:05[fraction]
    13. function FormatTime (time)
    14. {
    15. var intTime : int = time;
    16. var minutes : int = intTime / 60;
    17. var seconds : int = intTime % 60;
    18. //var fraction : int = time * 10;
    19. // fraction = fraction % 10;
    20. //Build string with format
    21. // 17[minutes]:21[seconds]:05[fraction]
    22. // timeText = minutes.ToString () ;
    23. //timeText = timeText + seconds.ToString ();
    24. timeText = String.Format (“{0:00} {1:00}”, minutes, seconds);
    25. // timeText += fraction.ToString ();
    26. return timeText;
    27. }
    Tải về bài hướng dẫn này trong word: Download
     

    Bình Luận Bằng Facebook

    data-href="https://cnttqn.com/threads/huong-dan-lam-game-tren-unity-3d-phan-2.1276.html"