Hiệu ứng di chuyển Zombie trong game Zombie Hunter với Unity3D

Lập trình game Zombie Hunter với Unity3D

0.0 (0 đánh giá)
Tạo bởi HowKteam Cập nhật lần cuối 00:45 11-05-2017 4.770 lượt xem 0 bình luận
Học nhanh

Danh sách bài học

Hiệu ứng di chuyển Zombie trong game Zombie Hunter với Unity3D

Không có gì tuyệt vời hơn là luyện tập với ví dụ thực tế. Nào cùng nhau thử thách bản thân với trò chơi thú vị: Zombie Hunter

Bạn nên có kiến thức về:

  • Lập trình C# cơ bản
  • Class
  • OOP trong C#
  • Xem qua hai serial game 2D với Unity3D: Flappy bird Doge game

Code RotateGun.cs

using UnityEngine;
using System.Collections;

public class RotateGun : MonoBehaviour {
    public Vector3 target;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {

        LookAtCursor();
	}

    void LookAtCursor()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))
        {
            target = hit.point;
        }

        transform.LookAt(target);
    }
}

Code MoveToPlayer.cs

using UnityEngine;
using System.Collections;

public class MoveToPlayer : MonoBehaviour {

    float moveSpeed;
    public float minMoveSpeed = 0.05f;
    public float maxMoveSpeed = 0.3f;
    GameObject player;
    GameObject lookAtTarget;
	// Use this for initialization
	void Start () {
        player = GameObject.FindGameObjectWithTag("Player");
        lookAtTarget = GameObject.FindGameObjectWithTag("LookTarget");
        UpdateMoveSpeed();
	}

    void UpdateMoveSpeed()
    {
        moveSpeed = Random.Range(minMoveSpeed, maxMoveSpeed);
    }
	
    void Move()
    {
        if (player == null || lookAtTarget == null)
            return;
        transform.LookAt(lookAtTarget.transform.position);
        transform.position = Vector3.Lerp(transform.position, player.transform.position, moveSpeed * Time.deltaTime);
    }

	// Update is called once per frame
	void Update () {
        Move();
	}
}

Code SpawnEnemy.cs

using UnityEngine;
using System.Collections;

public class SpawnEnemy : MonoBehaviour {

    GameObject[] spawnPoint;
    public GameObject zombie;
    public PlayerPrefs z;
    public float minSpawnTime = 0.2f;
    public float maxSpawnTime = 1;
    private float lastSpawnTime = 0;
    private float spawnTime = 0;
	// Use this for initialization
	void Start () {
        spawnPoint = GameObject.FindGameObjectsWithTag("Respawn");
        UpdateSpawnTime();
	}

    void UpdateSpawnTime()
    {
        lastSpawnTime = Time.time;
        spawnTime = Random.Range(minSpawnTime, maxSpawnTime);
    }

    void Spawn()
    {
        int point = Random.Range(0, spawnPoint.Length);
        Instantiate(zombie, spawnPoint[point].transform.position, Quaternion.identity);        
        UpdateSpawnTime();
    }
	
	// Update is called once per frame
	void Update () {
	    if (Time.time >= lastSpawnTime + spawnTime)
        {
            Spawn();
        }
	}
}

Code PlayerController.cs

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    public int damge = 1;

    public float fireTime = 0.3f;
    private float lastFireTime = 0;

	// Use this for initialization
	void Start () {
        UpdateFireTime();
	}

    void UpdateFireTime()
    {
        lastFireTime = Time.time;
    }
	
    void Fire()
    {
        if (Time.time >= lastFireTime + fireTime)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                if (hit.transform.tag.Equals("Zombie"))
                {
                    hit.transform.gameObject.GetComponent<ZombieController>().GetHit(damge);
                }
            }

            UpdateFireTime();
        }
    }

	// Update is called once per frame
	void Update () {
	    if (Input.GetMouseButton(0))
        {
            Fire();
        }
	}
}

Code ZombieController.cs

using UnityEngine;
using System.Collections;

public class ZombieController : MonoBehaviour {

    public int zombieHealth = 3;
    private Animator anim;
    private bool isShooten;
    public float shootTime = 0.5f;
    public bool IsShooten
    {
        get { return isShooten; }
        set
        {
            isShooten = value;
            ShootenAnim(isShooten);
            UpdateShootenTime();
        }
    }
    private float lastShootenTime = 0;
	// Use this for initialization
	void Start () {
        anim = gameObject.GetComponent<Animator>();
        IsShooten = false;        
	}

    void UpdateShootenTime()
    {
        lastShootenTime = Time.time;
    }

    void ShootenAnim(bool isShooten)
    {
        anim.SetBool("isShooten", isShooten);
    }
	
    public void GetHit(int damge)
    {
        IsShooten = true;
        zombieHealth -= damge;       

        if (zombieHealth <= 0)
        {
            Dead();
        }
    }

    void Dead()
    {
        Destroy(gameObject);
    }

	// Update is called once per frame
	void Update () {
        if (IsShooten && Time.time >= lastShootenTime + shootTime)
        {
            IsShooten = false;
        }
    }
}

File game Demo

File Assets

project

Bài sau chúng ta sẽ cùng nhau tìm hiểu về xử lý hiệu ứng bắn đạn.

Đừng quên: “Luyện tập – Thử thách – Không ngại khó


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả

Khóa học

Lập trình game Zombie Hunter với Unity3D

Lập trình game Zombie Hunter với Unity3D

Đánh giá

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Không có video.