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 độ 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: 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 Để 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 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 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ã: 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 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. Và ta viết mã xử lý va chạm trong tệp C# dan_move 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 var startTime = 0; var timeLimit = 90.0; function Update () { //The time taken so far timeTaken = startTime + Time.time; // Format the time nicely guiText.text = FormatTime (timeTaken); if (timeTaken >= timeLimit) Application.LoadLevel(0); } //Format time like this // 17[minutes]:21[seconds]:05[fraction] function FormatTime (time) { var intTime : int = time; var minutes : int = intTime / 60; var seconds : int = intTime % 60; //var fraction : int = time * 10; // fraction = fraction % 10; //Build string with format // 17[minutes]:21[seconds]:05[fraction] // timeText = minutes.ToString () ; //timeText = timeText + seconds.ToString (); timeText = String.Format (“{0:00} {1:00}”, minutes, seconds); // timeText += fraction.ToString (); return timeText; } Tải về bài hướng dẫn này trong word: Download