我对C#很新,所以请原谅我,如果我问的是愚蠢的问题,或者我的问题不正确。
这是我的代码:
using UnityEngine;
using System;
namespace DuloGames.UI
{
[Serializable]
public class UISpellInfo
{
public int ID;
public string Name;
public Sprite Icon;
public string Description;
public float Range;
public float Cooldown;
public float CastTime;
public float PowerCost;
public float test;
[BitMask(typeof(UISpellInfo_Flags))]
public UISpellInfo_Flags Flags;
}
}
这是我的UIspellDatabase
课程:
using UnityEngine;
namespace DuloGames.UI
{
public class UISpellDatabase : ScriptableObject {
#region singleton
private static UISpellDatabase m_Instance;
public static UISpellDatabase Instance
{
get
{
if (m_Instance == null)
m_Instance = Resources.Load("Databases/SpellDatabase") as UISpellDatabase;
return m_Instance;
}
}
#endregion
public UISpellInfo[] spells;
/// <summary>
/// Get the specified SpellInfo by index.
/// </summary>
/// <param name="index">Index.</param>
public UISpellInfo Get(int index)
{
return (spells[index]);
}
/// <summary>
/// Gets the specified SpellInfo by ID.
/// </summary>
/// <returns>The SpellInfo or NULL if not found.</returns>
/// <param name="ID">The spell ID.</param>
public UISpellInfo GetByID(int ID)
{
for (int i = 0; i < this.spells.Length; i++)
{
if (this.spells[i].ID == ID)
return this.spells[i];
}
return null;
}
}
}
以下是我如何预览UISpellInfo
的现有实例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WorldServer;
using Spells;
using DuloGames.UI;
public class Character : MonoBehaviour
{
private void SeeAllInstances()
{
foreach (var item in UISpellDatabase.Instance.spells)
{
Debug.Log("ID->" + item.ID + " name: " + item.Name);
}
}
我可以清楚地看到我对这个班级UISpellInfo
的所有实例。
我想要实现的只是向数组UISpellInfo[] spells;
添加更多实例。
据我所知,类UISpellInfo
的所有实例都在这里加载UISpellInfo[] spells;
然后在SeeAllInstances()
的foreach上我可以看到所有实例和数据保持为每个例子。
我的问题是,我是否正确询问如何在UISpellInfo[] spells;
中添加更多实例?
有人可以帮我吗?
答案 0 :(得分:4)
我认为你需要在你的场景中使用List<T>
,因为Array
是用大小声明的,我们必须在添加删除元素时保持跟踪,以了解其中有多少元素以及插槽具有或不具有值,以便我们可以在最后一个可用索引处添加新项目。
对于我们事先不知道的情况,List<T>
中的元素数量是更好的选择,如果您正在使用它,那么您只需要调用{{1}在您的实例上添加新项目的方法。
在这种情况下,您的代码就像:
Add()
这将保存public List<UISpellInfo> spells;
类型的所有项目,现在可以在代码中的某个位置执行以下操作:
UISpellInfo
答案 1 :(得分:2)
要向数组添加对象,您需要使用新元素重建数组,并将其分配给UISpellInfo[] spells;
这是一个可用于实现此目的的方法:
public void AddUISpellInfo(UISpellInfo infoToAdd) {
Array.Resize(ref this.spellInfoArray, this.spellInfoArray.Length + 1);
this.spellInfoArray[this.spellInfoArray.Length - 1] = infoToAdd;
}
该方法将您希望添加的任何项目作为显式参数,以及通过隐含参数this对现有数组的引用。您可以在Array.Resize()
here上看到更多信息。