Страница 1 из 1

Падение Unity

СообщениеДобавлено: 04 дек 2010, 21:29
nimferus
Добрый день. Прохожу уроки Hack and Slash. Возникла такая проблема. Юнити падает. Выяснил где. Вот код.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System;

public class BaseCharacter : MonoBehaviour {
        private string _name;
        private int _level;
        private uint _freeExp;
       
        private Attribute[] _primaryAttribute;
        private Vital[] _vital;
        private Skill[] _skill;
       
        public BaseCharacter() {
                _level = 0;
                _freeExp = 0;
                _name = string.Empty;
                _primaryAttribute = new Attribute[Enum.GetValues(typeof(AttributeName)).Length];
                _vital = new Vital[Enum.GetValues(typeof(VitalName)).Length];
                _skill = new Skill[Enum.GetValues(typeof(SkillName)).Length];
               
                Debug.Log(_primaryAttribute.Length);
                for(int cnt = 0; cnt < _primaryAttribute.Length; cnt++) {
==========>>   _primaryAttribute[cnt] = new Attribute();        <<<<<<<<<<<<<<============== Из-за этого падает ================================
                        Debug.Log(cnt);
                }
                //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();
        }
       
        public void CalculateLevel() {
        }
       
        private void SetupPrimaryAttributes() {
                Debug.Log(_primaryAttribute.Length);
                for(int cnt = 0; cnt < _primaryAttribute.Length; cnt++) {
                        _primaryAttribute[cnt] = new Attribute();      
                        Debug.Log(cnt);
                }
        }
       
        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).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion), .5f));
                //energy
                GetVital((int)VitalName.Energy).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion), 1));
                //mana
                GetVital((int)VitalName.Mana).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), 1));

        }
       
        private void SetupSkillModifiers() {
                //melee offence
                GetSkill((int)SkillName.Melee_Offence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Might), .33f));
                GetSkill((int)SkillName.Melee_Offence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Nimbleness), .33f));
                //melee defence
                GetSkill((int)SkillName.Melee_Defence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
                GetSkill((int)SkillName.Melee_Defence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion), .33f));
                //magic offence
                GetSkill((int)SkillName.Magic_Offence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
                GetSkill((int)SkillName.Magic_Offence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), .33f));
                //magic defence
                GetSkill((int)SkillName.Magic_Defence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
                GetSkill((int)SkillName.Magic_Defence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), .33f));
                //range offence
                GetSkill((int)SkillName.Ranged_Offence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
                GetSkill((int)SkillName.Ranged_Offence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
                //range defence
                GetSkill((int)SkillName.Ranged_Defence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Nimbleness), .33f));
                GetSkill((int)SkillName.Ranged_Defence).AddMidifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
               
        }
       
        public void StatUpdate() {
                for(int cnt = 0; cnt < _vital.Length; cnt++)
                        _vital[cnt].Update();
                for(int cnt = 0; cnt < _skill.Length; cnt++)
                        _skill[cnt].Update();
        }
}

 


В чём может быть проблема, странно то, что в уроках всё работает. Хотя у меня версия 3,1 а там 3,0 , но не думаю что из-за этого)

Re: Падение Unity

СообщениеДобавлено: 04 дек 2010, 21:39
Zaicheg
А можно ссылку на урок?

Re: Падение Unity

СообщениеДобавлено: 04 дек 2010, 21:43
nimferus
Да конечно, правда там многовато)
http://www.burgzergarcade.com/hack-slas ... e-tutorial

Re: Падение Unity

СообщениеДобавлено: 04 дек 2010, 22:14
nimferus
Поспешил я, всё же проблема осталась.
Ссылка на весь проект - http://dl.dropbox.com/u/9915705/Hack%20and%20Slash.zip
Заранее спасибо.

Re: Падение Unity

СообщениеДобавлено: 04 дек 2010, 23:17
Neodrop
А в логах почитать не пробовали? :-?

Re: Падение Unity

СообщениеДобавлено: 04 дек 2010, 23:39
nimferus
Посмотрел логи, там вроде всё как и должно быть, никаких слов об ошибка крешах и т.д.

Re: Падение Unity

СообщениеДобавлено: 05 дек 2010, 00:13
Avatarchik
Ошибка пофиксена,(была из-за неправильного использования get,set).Как сказал автор:
это всё злой копи паст
:D

Re: Падение Unity

СообщениеДобавлено: 06 дек 2010, 08:37
Fox Rex
Если из за использования свойств валится юнити, то это ошибка не кода, а разработчиков движка.

Re: Падение Unity

СообщениеДобавлено: 06 дек 2010, 13:20
gnoblin
ох, нет!
прежде чем делать такой мега-вывод надо посмотреть код.

Re: Падение Unity

СообщениеДобавлено: 06 дек 2010, 17:22
Avatarchik
Если из за использования свойств валится юнити, то это ошибка не кода, а разработчиков движка.

Я тоже с этим не соглашусь, так как тут сам разработчик накосячил... :-?
Вот сам код:
Синтаксис:
Используется csharp
        private int _baseValue;
        private int _buffValue;
        private int _expToLevel;
        private float _levelModifier;
       
        public BaseStat() {
                _baseValue = 0;
                _buffValue = 0;
                _levelModifier = 1.1f;
                _expToLevel = 100;
        }
    #region Basic Setters and Getters
    //Basic Setters and Getters
    public int BaseValue
    {
        get { return _baseValue; }
        set { _baseValue = value; }
    }

    public int BuffValue
    {
        get { return BuffValue; }
        set { BuffValue = value; }
    }

    public int ExpToLevel
    {
        get { return ExpToLevel; }
        set {ExpToLevel = value; }
    }

    public float LevelModifier
    {
        get { return LevelModifier; }
        set { LevelModifier = value; }
    }
    #endregion

    private int CalculateExpToLevel()
    {
        return (int)(_expToLevel * _levelModifier);
    }

    public void LevelUp()
    {
        _expToLevel = CalculateExpToLevel();
        _baseValue++;
    }

    public int AdjustedBaseValue
    {
        get { return _baseValue + _buffValue; }
    }

}