* Переключилось на serailization.C# Задайте переменную, используя строку с переменным именем внутри
Реферат: У меня есть все переменные, предварительно определенные как null/0. Я хочу установить их с помощью данных и XML-документа. Документ содержит те же имена, что и переменные. Я не хочу использовать кучу else ifs, поэтому я пытаюсь сделать это на основе имен, которые я извлекаю из документа XML.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using System.Xml;
using System.IO;
public class ShipAttributes
{
// Model Information
string name;
string modelName;
string firingPosition;
string cameraPosition;
string cargoPosition;
Vector3 cameraDistance;
// Rotation
float yawSpeed;
float pitchSpeed;
float rollSpeed;
// Speed
float maxSpeed;
float cruiseSpeed;
float drag;
float maxAcceleration;
float maxDeceleration;
// Physics Properties
float mass;
// Collection Capacity
float cargoSpace;
// Combat [Defense]
float structureHealth;
float armorHealth;
float shieldHealth;
float shieldRadius;
// Combat [Assault]
float missileRechargeTime;
float fireRate;
// Currency Related
float cost;
float repairMultiplier;
void PopulateShipList()
{
if (shipList != null)
return;
string filepath = Application.dataPath + "/Resources/shipsdata.xml";
XmlRootAttribute xml_Root = new XmlRootAttribute();
xml_Root.ElementName = "SHIPS";
xml_Root.IsNullable = true;
//using (var stream = new FileStream(filepath, FileMode.Open, FileAccess.Read))
//{
StringReader stringReader = new StringReader(filepath);
stringReader.Read();
XmlReader xRdr = XmlReader.Create(stringReader);
XmlSerializer xml_s = new XmlSerializer(typeof(List<ShipAttributes>), xml_Root);
shipList= (List<ShipAttributes>)xml_s.Deserialize(xRdr);
//}
}
public ShipAttributes LoadShip(string inName)
{
PopulateShipList();
foreach (ShipAttributes att in shipList)
{
if (att.name == inName)
{
att.shipList = shipList;
return att;
}
}
return null;
}
* Примечание. Переменные в файлах XML имеют тот же формат и имя, что и переменные в классе. maxSpeed в классе maxSpeed в XML-файле.
Мой XML выглядит следующим образом -
<?xml version="1.0" encoding="UTF-8 without BOM" ?>
<SHIPS>
<SHIP>
<name>Default</name>
<id>0</id>
<modelName>Feisar_Ship</modelName>
<firingPosition>null</firingPosition>
<cameraPosition>null</cameraPosition>
<cargoPosition>null</cargoPosition>
<cameraDistance>null</cameraDistance>
<yawSpeed>2000.0</yawSpeed>
<pitchSpeed>3000.0</pitchSpeed>
<rollSpeed>10000.15</rollSpeed>
<maxSpeed>200000.0</maxSpeed>
<cruiseSpeed>100000.0</cruiseSpeed>
<drag>0.0</drag>
<maxAcceleration>null</maxAcceleration>
<maxDeceleration>null</maxDeceleration>
<mass>5000.0</mass>
<cargoSpace>150.0</cargoSpace>
<structureHealth>100.0</structureHealth>
<armorHealth>25.0</armorHealth>
<shieldHealth>25.0</shieldHealth>
<shieldRadius>30.0</shieldRadius>
<missileRechargeTime>2.0</missileRechargeTime>
<fireRate>0.5f</fireRate>
<cost>0</cost>
<repairMultiplier>1.0</repairMultiplier>
</SHIP>
</SHIPS
>
Да я знаю ... Feisar! Просто разместите держатели сейчас от турбоакустических.
Я не понимаю ваши 3-й и 4-й шаги ...? Являются ли эти переменные вашей частью класса? И может ли этот класс просто десериализоваться из XML-документа напрямую? Наконец: на самом деле не уверен, что вы просите :) – baldric
Пример вашего класса был бы полезен (предполагая, что «переменная» означает свойство/поле класса, а не локальную переменную какого-либо метода). –
Обновлен с кодом от того, что я делаю. Я пытаюсь установить переменные, не сказав speed = attribute.innertext. Я хочу сказать [Psuedo] attribute.name.thisIsNowTheVariable = attribute.InnerText; Атрибут является узлом XML. –