Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by venhip · Nov 25, 2012 at 04:41 PM · enumskillsburgzergarcade

Error calling enum lists

Hey, I've been following BurgZergArcade's tutorials on youtube and one thing he uses during his set up for a leveling system is create enum lists for the vitals (health, stamina and mana) and his skills (Melee offense and the like). I've been having problems when trying to modify and display the values in the script that have an index value greater than 0. Any insight as to why, or if possible how to fix it would be very appreciated.

The errors I receive when I uncomment any of the commented lines in SetupVitalModifiers(); or SetupSkillModifiers(); are all Null Reference errors.

Vital.cs:

 public class Vital : ModifiedStat {
 
     private int _curValue;
     
     public Vital(){
         
         _curValue = 0;        
         ExpToLevel = 50;        
         LevelModifier = 1.1f;
     }
     
     public int CurValue{
         
         get{
             if(_curValue > AdjustedBaseValue){
                 
                 _curValue = AdjustedBaseValue;
             }
             
             return _curValue;
             
         }
         set{ _curValue = value;}
     }
 }
 
 public enum VitalName{
     
     Health,
     Stamina,
     Mana
 }


Skill.cs:

 public class Skill : ModifiedStat {
 
     private bool _known;
     
     public Skill(){
         
         _known = false;
         ExpToLevel = 25;
         LevelModifier = 1.1f;
     }
     
     public bool Known {
         
         get{ return _known;}
         set{ _known = value; }
     }
 }
 
 public enum SkillName{
     
     Melee_Offence,
     Melee_Defense,
     Ranged_Offence,
     Ranged_Defense,
     Magic_Offence,
     Magic_Defense
 }


ModifiedStat.cs:

 using System.Collections.Generic;
 
 public class ModifiedStat : BaseStat {
 
     private List<ModifyingAttribute> _mods;        //A list of attributes that modify this stat
     private int _modValue;                        //The amount added to the baseValue from the modifiers
 
     public ModifiedStat(){
     
     _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 new int AdjustedBaseValue {
         
         get{return BaseValue + BuffValue + _modValue; }
     }
     
     public void Update(){
         
         CalculateModValue();
         
     }
 }
 
 public struct ModifyingAttribute {
     
     public Attribute attribute;
     public float ratio;
     
     public ModifyingAttribute(Attribute att, float rat){
         
         attribute = att;
         ratio = rat;
     }
     
 }


BaseCharacter.cs

 using UnityEngine;
 using System.Collections;
 using System;                //For access to 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 void AddExp(uint exp) {        
         
         _freeExp += exp;
         CalculateLevel();
     }
     
     public void CalculateLevel(){
         //add more to this.
         //Take avg of all skills and assign as player lvl
         
     }
     
 #region Setters and Getters
     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;}
     }
 #endregion
     
 #region Setup values    
     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();
             
             SetupVitalModifiers();
         }
         
     }
     
     private 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];
     }
 #endregion
     
 #region Modifiers for Vitals & Skills
     private void SetupVitalModifiers(){
         //health
         GetVital((int)VitalName.Health).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constitution), 2.0f));
         //stamina
 //        GetVital((int)VitalName.Stamina).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Agility), 0.7f));
 //        GetVital((int)VitalName.Stamina).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), 0.3f));
         //mana
 //        GetVital((int)VitalName.Mana).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), 10.0f));
     }
     
     private void SetupSkillModifiers(){
 //        GetSkill((int)SkillName.Magic_Defense).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Intelligence), 0.5f));        
 //        GetSkill((int)SkillName.Magic_Defense).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), 0.5f));        
         
 //        GetSkill((int)SkillName.Magic_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), 0.5f));
 //        GetSkill((int)SkillName.Magic_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Charisma), 0.5f));
         
 //        GetSkill((int)SkillName.Melee_Defense).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Strength), 0.5f));
 //        GetSkill((int)SkillName.Melee_Defense).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constitution), 0.5f));
         
         GetSkill((int)SkillName.Melee_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Strength), 0.5f));
         GetSkill((int)SkillName.Melee_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), 0.5f));
         
 //        GetSkill((int)SkillName.Ranged_Defense).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Agility), 0.5f));
 //        GetSkill((int)SkillName.Ranged_Defense).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Intelligence), 0.5f));
         
 //        GetSkill((int)SkillName.Ranged_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Agility), 0.5f));
 //        GetSkill((int)SkillName.Ranged_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), 0.5f));
         
     }
     
     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();
     }
     #endregion
 }


Thanks for your time. If you need anything more please just ask.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by DecipherOne · Nov 25, 2012 at 09:58 PM

It's hard to really say looking at the classes without seeing them in use. I would however stand to guess that based on what I see, it is possible that you are never initializing the variables in the arrays that hold the values for your skills. The classes the skills are based on don't seem to inherit from MonoBehavior so there is no default Update method being called for each game loop. As such, there is also no auto execution of the constructors that the skills class seems to have. Hard to say without looking more into it, but I would start there.

All things I've seen suggest using an Init() function instead of a default constructor because the execution of the constructor isn't guaranteed in it's order of execution, or that it is being invoked at all.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

11 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How would i use a enum? 1 Answer

Problem displaying an int 1 Answer

How come my character is moving so fast? 3 Answers

Enum change visible in editor? 1 Answer

Classes and type casting? 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges