TẠO GAME “SHARKS HUNGRY” BẰNG UNITY2D
This post hasn't been updated for 3 years
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.
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 .
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“);
All Rights Reserved