Tạo boom tự di chuyển tới nhân vật trong Doge game với Unity3D

Lập trình Doge game với Unity3D

0.0 (0 đánh giá)
Tạo bởi HowKteam Cập nhật lần cuối 08:25 28-10-2016 3.617 lượt xem 1 bình luận
Học nhanh

Danh sách bài học

Tạo boom tự di chuyển tới nhân vật trong Doge game 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ị: Doge game.

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

  • Lập trình C# cơ bản
  • Class
  • OOP trong C#

File SheepController.cs

using UnityEngine;
using System.Collections;

public class SheepController : MonoBehaviour {

    Vector3 mousePos;
    public float moveSpeed = 5;
    public float minX = -5.5f;
    public float maxX = 5.5f;
    public float minY = -3;
    public float maxY = 3;
	// Use this for initialization
	void Start () {
        mousePos = transform.position;
	}
	
	// Update is called once per frame
	void Update () {
	    if (Input.GetMouseButton(0))
        {
            mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

            mousePos = new Vector3(Mathf.Clamp(mousePos.x, minX, maxX), Mathf.Clamp(mousePos.y, minY, maxY), 0);
        }
        transform.position = Vector3.Lerp(transform.position, mousePos, moveSpeed * Time.deltaTime);
    }
}

File WolfController.cs

using UnityEngine;
using System.Collections;

public class WolfController : MonoBehaviour {

    public GameObject boom;
    public float minBoomTime = 2;
    public float maxBoomTime = 4;
    private float boomTime = 0;
    private float lastBoomTime = 0;
    private GameObject Sheep;
	// Use this for initialization
	void Start () {
        UpdateBoomTime();
        Sheep = GameObject.FindGameObjectWithTag("Player");
	}
	
	// Update is called once per frame
	void Update () {
	    if (Time.time >= lastBoomTime + boomTime)
        {
            ThroughBoom();
        }
	}

    void UpdateBoomTime()
    {
        lastBoomTime = Time.time;
        boomTime = Random.Range(minBoomTime, maxBoomTime + 1);
    }

    void ThroughBoom()
    {
        GameObject bom = Instantiate(boom, transform.position, Quaternion.identity) as GameObject;

        bom.GetComponent<BoomController>().target = Sheep.transform.position;

        UpdateBoomTime();
    }
}

File BoomController.cs

using UnityEngine;
using System.Collections;

public class BoomController : MonoBehaviour {

    public Vector3 target;
    public float moveSpeed = 5;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        transform.Translate((transform.position - target) * moveSpeed * Time.deltaTime * -1);
    }
}

File game Demo

File Assets

Bài sau chúng ta sẽ cùng nhau tìm hiểu về cách tạo hiệu ứng ném boom.

Đừ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 Doge game với Unity3D

Lập trình Doge game 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
nghia1990_hl đã bình luận 21:06 18-05-2017

Mình thì lấy Sheep position ở boom script ở hàm start(), mình thấy có vẻ dễ hiểu hơn :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoomController : MonoBehaviour {
    public GameObject Sheep;
    private Vector3 SheepPosition;
	// Use this for initialization
	void Start () {
        Sheep = GameObject.FindGameObjectWithTag("Player");
        SheepPosition = Sheep.transform.position;

    }
	
	// Update is called once per frame
	void Update () {
        this.transform.Translate((SheepPosition - this.transform.position)*Time.deltaTime);
	}
}

 

Không có video.