Thứ Ba, 10 tháng 12, 2013

Project RPG BÀI 5.2. NỀN TẢNG NHÂN VẬT


Để tạo được các thuộc tính vật lý hay các thông số vật lý cho nhân vật, các bạn phải khai báo các thuộc tính này thành các class khác nhau, bài viết này chủ yếu khởi tạo các thuộc tính cơ bản của người chơi như Tốc độ, Trí tuệ, Sức mạnh,... tất cả đều code bằng C# và chưa thể sử dụng được liền mà phải đợi sử dụng ở Bài 6. Khởi Tạo Nhân Vật.



B1. Nhấp phải vào folder Character Classes rồi chọn Creat | C Sharp Script và đặt tên là BaseCharacter.

B2. 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;                    //added to access the enum class

public class BaseCharacter : MonoBehaviour {
    private string _name;
    private int _level;
    private uint _freeExp;

    private Attribute[] _primaryAttribute;
    private Vital[] _vital;
    private Skill[] _skill;

    public void Awake(){
        _name = string.Empty;
        _level = 0;
        _freeExp = 0;

        _primaryAttribute = new Attribute[Enum.GetValues(typeof(AttributeName)).Length];
        _vital = new Vital[Enum.GetValues(typeof(VitalName)).Length];
        _skill = new Skill[Enum.GetValues(typeof(SkillName)).Length];

        SetupPrimaryAttributes();
        SetupVitals();
        SetupSkills();
    }

    public string Name{
        get{ return _name;}
        set{ _name = value;}
    }
    public int Level{
        get{ return _level;}
        set{ _level = value;}
    }
    public uint FreeExp{
        get{ return _freeExp;}
        set{ _freeExp = value;}
    }
       
    public void AddExp(uint exp){
        _freeExp += exp;

        CalculateLevel();
    }

    //take avg of all of the players skills and assign that as the player lv
    public void CalculateLevel(){

    }

    private void SetupPrimaryAttributes(){
        for(int cnt = 0; cnt < _primaryAttribute.Length; cnt++){
            _primaryAttribute[cnt] = new Attribute();
        }
    }
    private void SetupVitals(){
        for(int cnt = 0; cnt < _vital.Length; cnt++){
            _vital[cnt] = new Vital();
        }
       
    }
    private void SetupSkills(){
        for(int cnt = 0; cnt < _skill.Length; cnt++){
            _skill[cnt] = new Skill();
        }
       
    }

    public Attribute GetPrimaryAttribute(int index){
        return _primaryAttribute[index];
    }

    public Vital GetVital(int index){
        return _vital[index];
    }

    public Skill GetSkill(int index){
        return _skill[index];
   
    }
    private void SetupVitalModifiers(){
        //health
        GetVital((int)VitalName.Health).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion), .5f));
        //energy
        GetVital((int)VitalName.Energy).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion), 1));
        //mana
        GetVital((int)VitalName.Mana).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), 1));

    }
    private void SetupSkillModifiers(){
        //melee offence
        GetSkill((int)SkillName.Melee_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Might), .33f));
        GetSkill((int)SkillName.Melee_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Nimbleness), .33f));
        //melee defence
        GetSkill((int)SkillName.Melee_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
        GetSkill((int)SkillName.Melee_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion), .33f));
        //magic offence
        GetSkill((int)SkillName.Magic_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
        GetSkill((int)SkillName.Magic_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), .33f));
        //magic defence
        GetSkill((int)SkillName.Magic_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
        GetSkill((int)SkillName.Magic_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), .33f));
        //ranged offence
        GetSkill((int)SkillName.Ranged_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
        GetSkill((int)SkillName.Ranged_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
        //ranged defence
        GetSkill((int)SkillName.Ranged_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
        GetSkill((int)SkillName.Ranged_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Nimbleness), .33f));
    }

    public void StatUpate(){
        for(int cnt = 0; cnt < _vital.Length; cnt++)
            _vital[cnt].Update();
        for(int cnt = 0; cnt < _skill.Length; cnt++)
            _skill[cnt].Update();
    }
}

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

Đăng nhận xét