B1. Nhấp phải vào folder Character Classes và chọn Creat | C# Script và đặt tên là PlayerCharacter. Double click vào file vừa tạo và chèn đoạn code sau vào:
public class PlayerCharacter : BaseCharacter {
}
B2. Nhấp phải vào folder Character Classes và chọn Creat | C# Script và đặt tên là CharacterGenerator. Double click vào file vừa tạo và chèn đoạn code sau vào:
using UnityEngine;
using System.Collections;
using System; //used for Enum class
public class CharacterGenerator : MonoBehaviour {
private PlayerCharacter _toon;
private const int STARTING_POINTS = 350;
private const int MIN_STARTING_ATTRIBUTE_VALUE = 10;
private const int STARTING_VALUE = 50;
private int pointsLeft;
private const int OFFSET = 5;
private const int LINE_HEIGHT = 20;
private const int STAT_LABEL_WIDTH = 100;
private const int BASEVALUE_LABEL_WIDTH = 30;
private const int BUTTON_WIDTH = 20;
private const int BUTTON_HEIGHT = 20;
private int statStartingPos = 40;
// Use this for initialization
void Start () {
_toon = new PlayerCharacter();
_toon.Awake();
pointsLeft = STARTING_POINTS;
for(int cnt = 0; cnt < Enum.GetValues(typeof(AttributeName)).Length; cnt++){
_toon.GetPrimaryAttribute(cnt).BaseValue = STARTING_VALUE;
pointsLeft -= (STARTING_VALUE - MIN_STARTING_ATTRIBUTE_VALUE);
}
_toon.StatUpate();
}
// Update is called once per frame
void Update () {
}
void OnGUI(){
DisplayName();
DisplayPointsLeft();
DisplayAttributes();
DisplayVitals();
DisplaySkills();
}
private void DisplayName(){
GUI.Label(new Rect(10, 10, 50, 25),"Name:");
_toon.Name = GUI.TextField(new Rect(65, 10, 100, 25), _toon.Name );
}
private void DisplayAttributes(){
for(int cnt = 0; cnt < Enum.GetValues(typeof(AttributeName)).Length; cnt++){
GUI.Label(new Rect( OFFSET, //x
statStartingPos + (cnt * LINE_HEIGHT), //y
STAT_LABEL_WIDTH, //width
LINE_HEIGHT //height
), ((AttributeName)cnt).ToString());
GUI.Label(new Rect( STAT_LABEL_WIDTH + OFFSET, //x
statStartingPos + (cnt * LINE_HEIGHT), //y
BASEVALUE_LABEL_WIDTH, //width
LINE_HEIGHT //height
), _toon.GetPrimaryAttribute(cnt).AdjustedBaseValue.ToString());
if(GUI.Button(new Rect( OFFSET + STAT_LABEL_WIDTH + BASEVALUE_LABEL_WIDTH, //x
statStartingPos + (cnt*BUTTON_HEIGHT), //y
BUTTON_WIDTH, //width
BUTTON_HEIGHT //height
),"-")){
if(_toon.GetPrimaryAttribute(cnt).BaseValue > MIN_STARTING_ATTRIBUTE_VALUE){
_toon.GetPrimaryAttribute(cnt).BaseValue--;
pointsLeft++;
_toon.StatUpate();
}
}
if(GUI.Button(new Rect( OFFSET + STAT_LABEL_WIDTH + BASEVALUE_LABEL_WIDTH + BUTTON_WIDTH, //x
statStartingPos + (cnt*BUTTON_HEIGHT), //y
BUTTON_WIDTH, //width
BUTTON_HEIGHT //height
),"+")){
if(pointsLeft > 0){
_toon.GetPrimaryAttribute(cnt).BaseValue++;
pointsLeft--;
_toon.StatUpate();
}
}
}
}
private void DisplayVitals(){
for(int cnt = 0; cnt < Enum.GetValues(typeof(VitalName)).Length; cnt++){
GUI.Label(new Rect( OFFSET, //x
statStartingPos + ((cnt + 7)* LINE_HEIGHT), //y
STAT_LABEL_WIDTH, //width
LINE_HEIGHT //height
), ((VitalName)cnt).ToString());
GUI.Label(new Rect( OFFSET + STAT_LABEL_WIDTH,
statStartingPos + ((cnt + 7) * LINE_HEIGHT),
BASEVALUE_LABEL_WIDTH,
LINE_HEIGHT
), _toon.GetVital(cnt).AdjustedBaseValue.ToString());
}
}
private void DisplaySkills(){
for(int cnt = 0; cnt < Enum.GetValues(typeof(SkillName)).Length; cnt++){
GUI.Label(new Rect( OFFSET + STAT_LABEL_WIDTH + BASEVALUE_LABEL_WIDTH + BUTTON_WIDTH * 2 + OFFSET * 2, //x
statStartingPos + (cnt * LINE_HEIGHT), //y
STAT_LABEL_WIDTH, //width
LINE_HEIGHT //height
), ((SkillName)cnt).ToString());
GUI.Label(new Rect( OFFSET + STAT_LABEL_WIDTH + BASEVALUE_LABEL_WIDTH + BUTTON_WIDTH * 2 + OFFSET * 2 + STAT_LABEL_WIDTH, //x
statStartingPos + (cnt * LINE_HEIGHT), //y
BASEVALUE_LABEL_WIDTH, //width
LINE_HEIGHT //height
), _toon.GetSkill(cnt).AdjustedBaseValue.ToString());
}
}
private void DisplayPointsLeft(){
GUI.Label(new Rect(250, 10, 100, 25), "Points Left: " + pointsLeft.ToString());
}
}
B3. Tạo thẻ Project, nhấp chọn nút Creat và chọn Folder và đặt tên là Scenes. Ấn Ctrl + Shift + S để save scene hiện tại lại với tên là Targetting và kéo thả vào thư mục Scenes.
B4. Vào File | New Scene, sau đó ấn Ctrl + S để save scene này lại và đặt tên là Character Generator.
B5. Tại thẻ Project, kéo thả file C# Script CharacterGenerator vào MainCamera ở thẻ Hierarchy.
B6. Double click vào file BaseCharacter ở thẻ Project | Script | Character Classes và chèn thêm đoạn code được tô đỏ như sau:
private void SetupVitals(){
for(int cnt = 0; cnt < _vital.Length; cnt++){
_vital[cnt] = new Vital();
}
SetupVitalModifiers();
}
private void SetupSkills(){
for(int cnt = 0; cnt < _skill.Length; cnt++){
_skill[cnt] = new Skill();
}
SetupSkillModifiers();
}
for(int cnt = 0; cnt < _vital.Length; cnt++){
_vital[cnt] = new Vital();
}
SetupVitalModifiers();
}
private void SetupSkills(){
for(int cnt = 0; cnt < _skill.Length; cnt++){
_skill[cnt] = new Skill();
}
SetupSkillModifiers();
}
B7. Bấm Ctrl + S để save scene Character Generator lại. Ấn nút Play để kiểm tra thành quả.
This comment has been removed by the author.
ReplyDeleteco loi o code rui anh oi
ReplyDeleteBạn chụp màn hình Console rồi post qua đây xem
Deletehttp://d.f18.photo.zdn.vn/upload/original/2014/08/07/10/01/3062454033_658482235_574_574.jpg
ReplyDeleteDòng 43 của bạn thiếu đóng ngoặt
DeleteSửa lại dòng đó trong file ModifiedStat của b nhé
Deleteok bạn , cảm ơn bạn :D
Deletebạn ơi sao mình k add được file Script CharacterGenerator vào MainCamera.
ReplyDeleteNó thông báo là
can't add script
can't add component CharacterGenerator because it doesn't exist. check to see if the file name or class name match
tai sao ha ad
ReplyDeleteCần save file đó lại trước.
Deletecam on nha
ReplyDelete