11/08/2018, 21:47

TẠO GAME “SHARKS HUNGRY” BẰNG UNITY2D

Video demo và file cài đặt game : https://www.youtube.com/watch?v=pw-WdN5QW-4 https://www.dropbox.com/s/c99af4d12j4n6yi/FishEatFish.apk?dl=0 Mô tả game : Game lấy ý tưởng của trò chơi “Swing copters” của Nguyễn Hà Đông. Đây là trò chơi đơn giản về đồ hoạ và cách chơi. Trong ...

Video demo và file cài đặt game :

https://www.youtube.com/watch?v=pw-WdN5QW-4

https://www.dropbox.com/s/c99af4d12j4n6yi/FishEatFish.apk?dl=0

Mô tả game :

Game lấy ý tưởng của trò chơi “Swing copters” của Nguyễn Hà Đông. Đây là trò chơi đơn giản về đồ hoạ và cách chơi. Trong game người chơi sẽ dùng cảm ứng gia tốc (nghiêng màn hình điện thoại ) để điều khiển một chú cá nhỏ tránh khỏi những con cá mập và những con cá có gai .Nếu chạm phải con cá mập thì sẽ bị nó ăn còn nếu chạm phải con cá có gai thì sẽ bị rơi xuống dưới .

Các bước làm game.

  • Tạo màn hình bắt đầu : hiển thị điểm , điểm cao nhất, các nút Play để vào chơi, nút Share để chia sẻ điểm lên Facebook. swing-copter-0-200x300.png

Ta sẽ sử dụng GUI của unity để hiển thị các nút và text điểm .Dưới đây là link hướng dẫn dùng GUI . http://docs.unity3d.com/Manual/gui-Basics.html

Tạo Animation cho các con cá . Đây là link hướng dẫn tạo Animation trong Unity2d: https://www.youtube.com/watch?v=O_0gZuqW6y8

Tạo màn hình chơi game. Nhìn nó sẽ như thế này . swing-copter-1-200x300.png

Những con cá có gai màu vàng di chuyển qua lại hai bên .Ta viết script để cho nó di chuyển và đặt trong hàm Update :

if(isMoveLeft && transform.position.x > minX)
{
    transform.position = new Vector3(transform.position.x - speed * Time.fixedDeltaTime,transform.position.y,transform.position.z);
}
else if(!isMoveLeft && transform.position.x < maxX)
{
            transform.position = new Vector3(transform.position.x + speed * Time.fixedDeltaTime,
                                             transform.position.y,transform.position.z);
}
if(transform.position.x <= minX)
{
    transform.Rotate(new Vector3(0, 180, 0));
            isMoveLeft = false;
}

if(transform.position.x >= maxX)
{
    transform.Rotate(new Vector3(0, 180, 0));
            isMoveLeft = true;
}

Những con cá sẽ di chuyển xuống dưới với vần tốc là “speed”

transform.position = new Vector3(transform.position.x,
                                         transform.position.y - speed * Time.fixedDeltaTime,
                                         transform.position.z);

Để điều khiển con cá vàng bé dùng cảm ứng gia tốc ta cần thêm script Acelometor.cs vào đối tượng con cá

using UnityEngine;
using System.Collections;
public class Acelometor : MonoBehaviour {
    public float speed =10;
    public float speedAc = 10;
    private int count;
    //accelerometer
    private Vector3 zeroAc;
    private Vector3 curAc;
    private float sensH = 10;
    private float sensV = 10;
    private float smooth = 0.5f;
    private float GetAxisH = 0;
    private float GetAxisV = 0;
    public bool die = false;
    public float maxX;
    public float minX;
    // Use this for initialization
    void Start () {
        count = 0;
        ResetAxes();
    }
    // Update is called once per frame
void Update () {
}
    // Update is called once per frame
void FixedUpdate () {
    if(die == false && transform.position.x > minX && transform.position.x < maxX)
    {
        if (SystemInfo.deviceType == DeviceType.Desktop) {
            //get input by keyboard
            float movehorizontal = Input.GetAxis (“Horizontal“);
            float movevertical = Input.GetAxis (“Vertical“);

            Vector3 movement = new Vector3 (movehorizontal, 0.0f, movevertical);
            rigidbody2D.AddForce (movement * speed * Time.deltaTime);
        }
        else
        {
            //get input by accelerometer
            curAc = Vector3.Lerp(curAc,  Input.acceleration-zeroAc, Time.deltaTime/smooth);
            GetAxisV = Mathf.Clamp(curAc.y * sensV, -1, 1);
            GetAxisH = Mathf.Clamp(curAc.x * sensH, -1, 1);
            Vector3 movement = new Vector3 (GetAxisH, GetAxisV, 0);
                transform.position = new Vector3(GetAxisH / 20.0f + transform.position.x,
                                                 GetAxisV / 20.0f + transform.position.y ,
                                                 transform.position.z);
            }
        }
    }
    //accelerometer
    void ResetAxes(){
        zeroAc = Input.acceleration;
        curAc = Vector3.zero;
    }
}
  • Bước tiếp theo ta sẽ bắt sự kiện khi con cá chạm phải cá gai hay cá mập. Ta thêm box collider vào tất cả các đối tượng trong game và bắt sự kiện khi các box collider va chạm với nhau. Ta them rigicbody2D vào con cá điều khiển, khi có va chạm với con cá gai ta chỉ cần thay đổi Gravity của nó thành 1 để nó rơi xuống bên dưới.
  • Khi con cá bị rơi xuống dưới màn hình hoặc bị cá mập ăn thì game kết thúc và ta cập nhật lại điểm rồi chuyển sang màn hình bắt đầu game.
PlayerPrefs.SetInt(“score“, score);
if(PlayerPrefs.GetInt(“best“) < score)
    PlayerPrefs.SetInt(“best“, score);
    die = true;
Application.LoadLevel(“Begin“);
0