Thứ Tư, 29 tháng 1, 2014

Project RPG BÀI 9. XUẤT THÔNG TIN NHÂN VẬT



Đã xong giai đoạn lưu trữ thông tin nhân vật khởi tạo ban đầu, bây giờ là xuất thông tin đó ra dưới dạng câu lệnh thông báo trong hộp thoại Console của Unity (Debug.Log). :)



B1. Chắc rằng bạn đang ở Scene, Character Generator (bao gồm 1 Main Camera và __GameSettings đã gắn script GameSettings), ấn Ctrl + S để save scene này lại.

B2. Vào File | New Scene (Ctrl + N) để tạo scene mới và save scene này lại với tên là Level1.


B3. Double click vào C# GameSettings và xóa tất cả đi, chèn lại đoạn code sau vào:

using UnityEngine;
using System.Collections;
using System;

public class GameSettings : MonoBehaviour {

    void Awake(){
        DontDestroyOnLoad(this);
    }
    // Use this for initialization

    public void SaveCharacterData(){
        GameObject pc =GameObject.Find("pc");

        PlayerCharacter pcClass = pc.GetComponent<PlayerCharacter>();
        PlayerPrefs.DeleteAll();
        PlayerPrefs.SetString("Player Name", pcClass.Name);


        for(int cnt = 0; cnt < Enum.GetValues(typeof(AttributeName)).Length; cnt++){
            PlayerPrefs.SetInt (((AttributeName)cnt).ToString() + " - Base Value", pcClass.GetPrimaryAttribute(cnt).BaseValue);
            PlayerPrefs.SetInt (((AttributeName)cnt).ToString() + " - EXP To Level", pcClass.GetPrimaryAttribute(cnt).ExpToLevel);
        }

        for(int cnt = 0; cnt < Enum.GetValues(typeof(VitalName)).Length; cnt++){
            PlayerPrefs.SetInt (((VitalName)cnt).ToString() + " - Base Value", pcClass.GetVital(cnt).BaseValue);
            PlayerPrefs.SetInt (((VitalName)cnt).ToString() + " - EXP To Level", pcClass.GetVital(cnt).ExpToLevel);
            PlayerPrefs.SetInt (((VitalName)cnt).ToString() + " - Cur Value", pcClass.GetVital(cnt).CurValue);

            //PlayerPrefs.SetString(((VitalName)cnt).ToString() + " - Mobs", pcClass.GetVital(cnt).GetModifyingAttributesString());

        }
       
        for(int cnt = 0; cnt < Enum.GetValues(typeof(SkillName)).Length; cnt++){
            PlayerPrefs.SetInt(((SkillName)cnt).ToString() + " - Base Value", pcClass.GetSkill(cnt).BaseValue);
            PlayerPrefs.SetInt(((SkillName)cnt).ToString() + " - EXP To Level", pcClass.GetSkill(cnt).ExpToLevel);

            //PlayerPrefs.SetString(((SkillName)cnt).ToString() + " - Mobs", pcClass.GetSkill(cnt).GetModifyingAttributesString());

        }
    }

    public void LoadCharacterData(){
        GameObject pc = GameObject.Find("pc");
       
        PlayerCharacter pcClass = pc.GetComponent<PlayerCharacter>();

        pcClass.Name = PlayerPrefs.GetString("Player Name", "Name me");

        for(int cnt = 0; cnt < Enum.GetValues(typeof(AttributeName)).Length; cnt++){
            pcClass.GetPrimaryAttribute(cnt).BaseValue = PlayerPrefs.GetInt (((AttributeName)cnt).ToString() + " - Base Value", 0);
            pcClass.GetPrimaryAttribute(cnt).ExpToLevel = PlayerPrefs.GetInt (((AttributeName)cnt).ToString() + " - EXP To Level", 1);
        }

        for(int cnt = 0; cnt < Enum.GetValues(typeof(VitalName)).Length; cnt++){
            pcClass.GetVital(cnt).BaseValue = PlayerPrefs.GetInt (((VitalName)cnt).ToString() + " - Base Value", 0);
            pcClass.GetVital(cnt).ExpToLevel = PlayerPrefs.GetInt (((VitalName)cnt).ToString() + " - EXP To Level", 0);

            pcClass.GetVital(cnt).Update();

            //get the stored value for the curValue for each of the Vital
            pcClass.GetVital(cnt).CurValue = PlayerPrefs.GetInt(((VitalName)cnt).ToString() + " - Cur Value", 1);
        }

        for(int cnt = 0; cnt < Enum.GetValues(typeof(SkillName)).Length; cnt++){
            pcClass.GetSkill(cnt).BaseValue = PlayerPrefs.GetInt(((SkillName)cnt).ToString() + " - Base Value", 0);
            pcClass.GetSkill(cnt).ExpToLevel = PlayerPrefs.GetInt(((SkillName)cnt).ToString() + " - EXP To Level", 0);

        }
        //output curValue for each of the Vital
        for(int cnt = 0; cnt < Enum.GetValues(typeof(SkillName)).Length; cnt++){
            Debug.Log(((SkillName)cnt).ToString() + " : " + pcClass.GetSkill(cnt).BaseValue+ " - " + pcClass.GetSkill(cnt).ExpToLevel );
        }
    }
}


B4. Nhấp phải vào folder Script và chọn Create | C# Script rồi đặt tên là GameMaster. Double click vào C# Script vừa tạo và chèn đoạn code sau vào:

using UnityEngine;
using System.Collections;

public class GameMaster : MonoBehaviour {
    public GameObject playerCharacter;
    public GameObject gameSettings;
    public Camera mainCamera;

    public float zOffset;
    public float yOffset;
    public float xRotOffset;

    private GameObject _pc;
    private PlayerCharacter _pcScript;

    // Use this for initialization
    void Start () {
        _pc = Instantiate(playerCharacter, Vector3.zero, Quaternion.identity) as GameObject;
        _pc.name = "pc";

        _pcScript = _pc.GetComponent<PlayerCharacter>();

        zOffset = -2.5f;
        yOffset = 2.5f;
        xRotOffset = 22.5f;
        mainCamera.transform.position = new Vector3 (_pc.transform.position.x, _pc.transform.position.y + yOffset, _pc.transform.position.z + zOffset);
        mainCamera.transform.Rotate(xRotOffset, 0, 0);

        LoadCharacter();
    }

    public void LoadCharacter(){
        GameObject gs = GameObject.Find("__GameSettings");

        if(gs == null){
            GameObject gs1 = Instantiate(gameSettings, Vector3.zero, Quaternion.identity) as GameObject;
            gs1.name = "__GameSettings";
        }
            GameSettings gsScript = GameObject.Find ("__GameSettings").GetComponent<GameSettings>();

            //loading the character data
            gsScript.LoadCharacterData();


    }
}



B5. Vào Game Object | Create Empty và đổi tên thành  Game Master. Kéo thả file C# GameMaster ở thẻ Project vừa tạo ở bước trên vào Game Master ở thẻ Hierarchy.

B6. Nhấp chọn Game Master ở thẻ Hierarchy. Kéo thả Player Character Prefabs trong thư mục Prefabs ở thẻ Project vào mục Player Character. Và chọn Game Master ở thẻ Hierarchy. Kéo thả Main Camera vào script ở thẻ Inspector như sau:


B7. Tại thẻ Project, nhấp chọn Create | Folder và đặt tên là Assets. Tải file Human.rar này về rồi giải nén ra. Kéo thả thư mục Human vào folder Assets vừa tạo trong Unity.


B8. Kéo thả Player Character Prefabs ở thẻ Project vào Hierarchy.


B9. Kéo thả HumanAnimated ở thẻ Project vào Player Character Prefabs ở thẻ Hierarchy.


B10. Kéo thả Player Character Prefabs ở thẻ Hierarchy vào Player Character Prefabs ở thẻ Project.


B11. Xóa Player Character Prefabs ở thẻ Hierarchy đi.


B12. Vào Game Object | Create Other | Directional Light và chỉnh thông số ở thẻ Inspector như sau:


B13. Vào File | Build Settings, trong bảng Scenes in build chọn Targetting Example và ấn Delete. Kéo thả Level1 ở thẻ Project / Scenes vào vị trí bên dưới Character Generator.unity. Sau đó tắt cửa sổ này đi.


B14. Double click vào file C# Character Generator và chỉnh dòng code được khoanh đỏ thành hình dưới đây:


B15. Tại thẻ Project, nhấp phải vào thư mục Prefab và chọn Create | Prefab và đặt tên là Game Settings.


B16. Ấn Ctrl + S để save scene Level1 này lại. Double click vào scene Charater Generator ở thẻ Project, kéo thả __GameSettings ở thẻ Hierarchy vào prefab Game Settings ở thẻ Project.


B17. Save scene này lại, double click vào scene Level1, tại thẻ Hierarchy, nhấp chuột chọn Game Master và kéo thả Game Settings ở thẻ Project / Prefabs vào thẻ Inspector như sau:


B18. Double click vào file C# Vital và sửa ExpToLevel thành 40 như hình sau:


B19. Double click vào scene Character Generator và ấn nút Play để kiểm tra thành quả. Ấn Ctrl + Shift + C để mở hộp thoại Console.

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

Đăng nhận xét