将数据从放置在字典中的一个类转换为第二类(在另一个字典中)时,我没什么问题。
if(GUI.Button(new Rect(Screen.width * 0.40f, Screen.height * 0.1f,Screen.width * 0.1f,Screen.height *0.1f), "Pistol")){
ChangeWeapon (ChangedWeapon, 01);
}
按钮的示例,触发该功能。
void ChangeWeapon(int ChangedWeapon, int ID){
string WeaponSlotList[ChangedWeapon].weaponName = WeaponList[ID].weaponName;
}
继承人的功能。更改的武器是数字,表示应更改哪个插槽信息。 ID是应该使用哪种武器信息的ID。
public class Weapon{
public string weaponName;
public int maxClip;
public int spread;
public float speed;
public int ID;
public Weapon(string weaponName, int maxClip, int spread, float speed, int ID){
}
}
public Weapon Pistol = new Weapon("Pistol",15,1,0.5f,01);
public Weapon Smg = new Weapon("Smg",30,1,0.1f,01);
public Weapon AssalutRifle = new Weapon("AssalutRifle",30,1,0.2f,01);
public Weapon Shotgun = new Weapon("Shotgun",8,1,0.5f,01);
public Weapon SniperRifle = new Weapon("SniperRifle",2,1,1.0f,01);
这里的武器类构造函数。
public class WeaponSlot{
public string weaponName;
public int maxClip;
public int spread;
public float speed;
public int ammo;
public WeaponSlot(string weaponName, int maxClip, int spread, float speed, int ammo)
{
}
}
public WeaponSlot WeaponSlot1 = new WeaponSlot("",0,0,0.0f,0);
public WeaponSlot WeaponSlot2 = new WeaponSlot("",0,0,0.0f,0);
public WeaponSlot WeaponSlot3 = new WeaponSlot("",0,0,0.0f,0);
public WeaponSlot WeaponSlot4 = new WeaponSlot("",0,0,0.0f,0);
public WeaponSlot WeaponSlot5 = new WeaponSlot("",0,0,0.0f,0);
这里是插槽构造函数。 任何人都知道应该如何编写函数? 也很抱歉英语不好,我是外国人。
答案 0 :(得分:0)
首先,为什么当它们看起来大部分相同时,你使用两个不同的类?你的WeaponsList和WeaponsSlotList都可以拥有相同的Weapon对象,而WeaponsList中的武器可以将弹药设置为0
。
如果您按照本课程学习,您有几种选择。一种是直接将值分配给WeaponSlotList
,如下所示:
void ChangeWeapon(int ChangedWeapon, int ID)
{
string WeaponSlotList[ChangedWeapon] = WeaponList[ID];
}
问题在于WeaponSlotList
中对武器的任何更改也将发送到WeaponList
中的武器,因为它们指向同一个对象。处理弹药时这会有问题!
或者,您可以根据WeaponList
对象属性创建新的Weapon对象,并将其分配给WeaponSlotList
:
void ChangeWeapon(int ChangedWeapon, int ID)
{
WeaponSlotList[ChangedWeapon] =
new Weapon(WeaponList[ID].weaponName, WeaponList[ID].maxClip,
WeaponList[ID].spread, WeaponList[ID].speed, WeaponList[ID].ID);
}
或者只是将WeaponList
武器中的所有属性值复制到WeaponSlotList
:
void ChangeWeapon(int ChangedWeapon, int ID)
{
WeaponSlotList[ChangedWeapon].weaponName = WeaponList[ID].weaponName;
WeaponSlotList[ChangedWeapon].maxClip = WeaponList[ID].maxClip;
WeaponSlotList[ChangedWeapon].spread = WeaponList[ID].spread;
WeaponSlotList[ChangedWeapon].speed = WeaponList[ID].speed;
WeaponSlotList[ChangedWeapon].ID = WeaponList[ID].ID;
}
另一种选择是在你的武器类上实现一个ShallowCopy方法,这使得客户端更容易获得现有武器的副本。像这样:
public class Weapon
{
public string weaponName;
public int maxClip;
public int spread;
public float speed;
public int ID;
public Weapon(string weaponName, int maxClip, int spread, float speed, int ID)
{
}
public Weapon GetShallowCopy()
{
return (Weapon) this.MemberwiseClone();
}
}
// Calling code:
void ChangeWeapon(int ChangedWeapon, int ID)
{
WeaponSlotList[ChangedWeapon] = WeaponList[ID].GetShallowCopy();
}
另一种选择,如果你想为WeaponSlot创建一个单独的类,那就是使用Weapon属性和任何其他属性来创建它。
public class WeaponSlot
{
public Weapon weapon;
public int ammo;
public WeaponSlot(Weapon weapon, int ammo)
{
}
}
或者你可以使用继承,并使WeaponSlot派生自武器。很多选择!!!
顺便说一下,将'List'作为Dictionary对象名称的一部分有点令人困惑!您可以考虑使用WeaponInventory
和SelectedWeapons
之类的东西。但那只是我的个人意见。 : - )