Thứ Sáu, 29 tháng 11, 2013

Project RPG BÀI 4. XÁC ĐỊNH MỤC TIÊU

Tiếp tục cho phần tạo chức năng chiến đấu cho nhân vật, bài viết này mình sẽ hướng dẫn cách để tạo ra mục tiêu cho người chơi tấn công, nếu mục tiêu không được chọn thì sẽ không thể tấn công và ngược lại.



B1. Tại thẻ Project, nhấp chuột chọn Evil Cube, qua thẻ Inspector, bỏ dấu stick ở file Enemy AI (Script).


B2. Vẫn đang chọn Evil Cube, tại thẻ Inspector, nhấp vào nút Untagged và chọn Add Tag và gõ vào Element 0 từ Enemy. Nhấp chuột chọn lại Evil Cube và chọn Tag là Enemy



B3. Tại thẻ Hierarchy, nhấp chọn Evil Cube và ấn Ctrl + D 2 lần để tạo ra thêm 2 Evil Cube giống như lúc đầu. Đổi tên 3 Evil Cube này lại thành Evil Cubie 1, Evil Cubie 2 và Evil Cubie 3.


B4.Nhấp phải vào thư mục Script và chọn Creat | C# Script và đặt tên file là Targetting.


B5. Double click vào file C# vừa tạo và chèn đoạn code sau vào:

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

public class Targetting : MonoBehaviour {
    public List<Transform> targets;
    public Transform selectedTarget;

    private Transform myTransform;
    // Use this for initialization
    void Start () {
        targets = new List<Transform>();
        selectedTarget = null;
        myTransform = transform;
        AddAllEnemies();
    }

    public void AddAllEnemies(){
        GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");

        foreach(GameObject enemy in go)
            AddTarget(enemy.transform);
    }

    public void AddTarget(Transform enemy){
        targets.Add (enemy);
    }

    private void SortTargetsByDistance(){
        targets.Sort(delegate(Transform t1, Transform t2){
            return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
                    });
   
    }

    private void TargetEnemy(){
        if(selectedTarget == null){
                SortTargetsByDistance();
                selectedTarget = targets[0];
        }
        else{
            int index = targets.IndexOf (selectedTarget);

            if(index < targets.Count - 1){
                index++;
            }
            else{
                index = 0;
            }
            DeselectTarget();
            selectedTarget = targets[index];
        }
        SelectTarget();
    }

    private void DeselectTarget(){
        selectedTarget.renderer.material.color = Color.blue;
        selectedTarget = null;
    }

    private void SelectTarget(){
        selectedTarget.renderer.material.color = Color.red;
        PlayerAttack pa = (PlayerAttack)GetComponent("PlayerAttack");
        pa.target = selectedTarget.gameObject;
    }

    // Update is called once per frame
    void Update () {
        if(Input.GetKeyDown(KeyCode.Tab)){
            TargetEnemy();
        }
    }
}


B6. Kéo thả file C# vừa tạo ở bước trên vào Player ở thẻ Hierarchy.

B7. Sử dụng công cụ Tranform tool và di chuyển 3 Evil Cubie ra 3 nơi khác nhau như sau:


B8. Nhấn nút Play để kiểm tra thành quả. Trong khi chơi, bạn có thể ấn Tab để chọn mục tiêu (màu đỏ) mới có thể tấn công được.

Không có nhận xét nào:

Đăng nhận xét