Не работает Update по отношению к классу

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Не работает Update по отношению к классу

Сообщение Chaz 12 май 2012, 21:42

Привет мужики! Есть 3 класса, класс BaseCharacter
Синтаксис:
Используется 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 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 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 void AddExp(uint exp)
        {
                _freeExp+=exp;
                CalculateLevel();
        }
       
        public void CalculateLevel()
        {
               
        }
       
        public void SetupPrimaryAttributes()
        {
                for(int cnt = 0; cnt<_primaryAttribute.Length;cnt++)
                _primaryAttribute[cnt] = new Attribute();
        }
       
        public void SetupVitals()
        {
                for(int cnt = 0; cnt<_vital.Length;cnt++){
                        _vital[cnt]=new Vital();}
                SetupVitalModifiers();
        }
       
        public void SetupSkills()
        {
                for(int cnt =0; cnt<_skill.Length;cnt++)
                {
                        _skill[cnt]= new Skill();
                }
                SetupSkillModifiers();
        }
       
        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()
        {
                ModifyingAttribute healthModify = new ModifyingAttribute();
                healthModify.attribute = GetPrimaryAttribute((int)AttributeName.Constituion);
                healthModify.ratio = 0.5f;
               
                ModifyingAttribute energyModify = new ModifyingAttribute();
                energyModify.attribute = GetPrimaryAttribute((int)AttributeName.Constituion);
                energyModify.ratio = 1.0f;
               
                ModifyingAttribute manaModify = new ModifyingAttribute();
                manaModify.attribute = GetPrimaryAttribute((int)AttributeName.Willpower);
                manaModify.ratio = 1.0f;
                //GetVital((int)VitalName.Health).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion),.5f));
                //GetVital((int)VitalName.Energy).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion),1.0f));
                //GetVital((int)VitalName.Mana).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower),1.0f));
        }
        public void SetupSkillModifiers()
        {
                GetSkill((int)SkillName.Melle_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Might),.33f));
                GetSkill((int)SkillName.Melle_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Nimbleness),.33f));
               
                GetSkill((int)SkillName.Melle_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed),.33f));
                GetSkill((int)SkillName.Melle_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constituion),.33f));
               
                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));
               
                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));
               
                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));
               
                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 StatUpdate()
        {
                for(int cnt = 0; cnt<_vital.Length;cnt++)
                {
                        _vital[cnt].Update();// ошибка "здесь"
                }
                for(int cnt = 0; cnt<_skill.Length;cnt++)
                {
                        _skill[cnt].Update();
                }
                       
        }
}
 

класс Vital
Синтаксис:
Используется csharp
using UnityEngine;
public class Vital : BaseStat
{
         private int _curValue;
        public Vital()
        {
                 _curValue = 0;
                ExpToLvl=50;
                LvlMod = 1.1f;
        }
        public int CurValue
        {
                 get{if(_curValue>AdjustedBaseValue)
                _curValue=AdjustedBaseValue;
                        return _curValue;
                }
                set{_curValue=value;}
        }

}
    public enum VitalName
{
         Health,
         Energy,
         Mana
}
 

и класс Skill
Синтаксис:
Используется csharp
using UnityEngine;
public class Skill : ModifyStat
{
         private bool _known;
        public Skill()
        {
                 _known = false;
                ExpToLvl = 25;
                LvlMod = 1.1f;
        }
        public bool Known
        {
                get{return _known;}
                set{_known=value;}
        }
}
        public enum SkillName
        {
                Melle_Offence,
                Melle_Defence,
                Ranged_Offence,
                Ranged_Defence,
                Magic_Offence,
                Magic_Defence
        }
 

Как видите Vital и Skill очень похожи, но при попытке скомпилить строки
Синтаксис:
Используется csharp
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();
                }
                       
        }

Возникает ошибка - Assets/Stats/BaseCharacter.cs(133,37): error CS1061: Type `Vital' does not contain a definition for `Update' and no extension method `Update' of type `Vital' could be found (are you missing a using directive or an assembly reference?)
Помогите, пожалуйста, разобраться как исправить эту досадную ошибку.
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: Не работает Update по отношению к классу

Сообщение Zaicheg 12 май 2012, 21:57

Я не вижу в вашем классе Vital ни метода Update, ни наследования от класса, содержащего такой метод. На каких основаниях вы его вызываете -- не ясно.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Не работает Update по отношению к классу

Сообщение Chaz 12 май 2012, 22:08

но в классе Skill тоже нету метода Update и в классах от которых он происходит тоже нет Update, но оно ж работает
вот классы от которых он происходит
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;

public struct ModifyingAttribute
{
         public Attribute attribute;
        public float ratio;
        public ModifyingAttribute(Attribute att, float rat)
        {
                attribute=att;
                ratio=rat;
        }
}
public class ModifyStat : BaseStat
{
         private List<ModifyingAttribute> _mods;
        private int _modValue;
        public ModifyStat()
        {
                 _mods = new List<ModifyingAttribute>();
                _modValue = 0;
        }
        public void AddModifier(ModifyingAttribute mod)
        {
                _mods.Add(mod);
        }
        private void CalculateModValue()
        {
                _modValue=0;
                if(_mods.Count>0)
                {
                         foreach(ModifyingAttribute att in _mods)
                                _modValue+= (int) (att.attribute.AdjustedBaseValue * att.ratio);
                }
        }
        public int AdjustedBaseValue
        {
          get{return BaseValue+BuffValue+_modValue;}     
        }
        public void Update()
        {
                CalculateModValue();
        }
       
        }
 

Синтаксис:
Используется csharp
public class BaseStat
{
         private int _baseValue;
         private int _buffValue;
        private int _expTolvl;
        private float _LevelModifier;
       
        public BaseStat()
        {
                _baseValue=0;
                _buffValue=0;
                _LevelModifier=1.1f;
                _expTolvl=100;
        }
        //--------------------
        public int BaseValue{
                get{return _baseValue;}
                set{_baseValue=value;}
        }
       
    public int BuffValue
        {
                get{return _buffValue;}
                set{_buffValue=value;}
        }
        public int ExpToLvl
        {
                 get{return _expTolvl;}
                set{_expTolvl=value;}
        }
        public float LvlMod
        {
                get{return _LevelModifier;}
                set{_LevelModifier=value;}
        }
        //-----------------------
        private int CalculateExpToLvl()
        {
                return (int) (_LevelModifier*_expTolvl);
        }
        //--------------------------
        public void LevelUP()
        {
                 _expTolvl=CalculateExpToLvl();
                _baseValue++;
        }
        //--------------------
        private int AdjustedBaseValue
        {
                get{return _baseValue+_buffValue;}
        }
}
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: Не работает Update по отношению к классу

Сообщение seaman 12 май 2012, 22:30

Этот "Update" - не Юнитивский Update,- это метод класса ModifyStat. Соответственно ошибка - Vital должна от него наследоваться, а не от BaseStat.
Хотя на самом деле ошибка в другом - в бездумном списывании.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Не работает Update по отношению к классу

Сообщение Chaz 12 май 2012, 22:35

да я хотел сначала списать, а потом думать, автор сам так грил =) да и вроде пересматривал все классы, хз как не увидел апдейта в модифи
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: Не работает Update по отношению к классу

Сообщение Chaz 12 май 2012, 22:37

в любом случае - спасибо, в следующий раз буду лучше присматриваться, ну и вопросы не будут уже такими простыми если че не понятно буит
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: Не работает Update по отношению к классу

Сообщение Zaicheg 12 май 2012, 23:26

seaman писал(а):да и вроде пересматривал все классы, хз как не увидел апдейта в модифи

Один из них мог наследоваться от MonoBehaviour из пространства имён UnityEngine, который как раз содержит Update.
Последний раз редактировалось Zaicheg 13 май 2012, 00:36, всего редактировалось 1 раз.
Причина: цитировал Chaz'а конечно, не туда нажал просто )
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Не работает Update по отношению к классу

Сообщение seaman 13 май 2012, 00:21

1. Цитата неверна - я этого не писал.
2. Не наследуются они от МоноБехевиор. Там свой Update. Поэтому его и вызываем специально - он не вызывается движком. Путаница именно из за того, что метод назван так же как стандартный.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 15