She*_*lie 0 c# unity-game-engine
脚本A
public class ScriptA: MonoBehaviour{
public List<LootItemsList> _lootItemsListToUse;
[System.Serializable]
public class LootItemsList
{
public GameObject _lootItem;
public Vector3 _lootItemOrigin;
public float _lootColliderActivationTime = 0.5f;
}}
Run Code Online (Sandbox Code Playgroud)
脚本B
public class ScriptB: MonoBehaviour{
public List<LootItemsList> _lootItemsListToUse;
[System.Serializable]
public class LootItemsList
{
public GameObject _lootItem;
public Vector3 _lootItemOrigin;
public float _lootColliderActivationTime = 0.5f;
}
void Start(){
ScriptA scriptA = ObjA.GetComponent<ScriptA>();
_lootItemsListToUse = scriptA._lootItemsListToUse;
}}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:错误 CS0029 无法将类型“System.Collections.Generic.List<ScriptB.LootItemsList>”隐式转换为“System.Collections.Generic.List<ScriptA.LootItemsList>”
我也尝试过这个
_lootItemsListToUse = new List<ScriptA.LootItemsList>((IEnumerable<ScriptA.LootItemsList>)script._lootItemsList);
Run Code Online (Sandbox Code Playgroud)
MS studio 中没有错误,但我在播放时遇到此错误:InvalidCastException:指定的演员无效。(包装类型转换)System.Object.__castclass_with_cache(object,intptr,intptr)
请有人帮我找到复制此列表的正确方法吗?谢谢
您的两种类型 - 只是因为它们碰巧具有相同的名称和字段名称 - 没有任何关系。他们是完全不同的类型。
最明显的答案是:不要实施两次。而是相应地参考它
ScriptA.cs
public class ScriptA: MonoBehaviour
{
public List<LootItemsList> _lootItemsListToUse;
[System.Serializable]
public class LootItemsList
{
public GameObject _lootItem;
public Vector3 _lootItemOrigin;
public float _lootColliderActivationTime = 0.5f;
}
}
Run Code Online (Sandbox Code Playgroud)
ScriptB.cs
public class ScriptB: MonoBehaviour
{
public List<ScriptA.LootItemsList> _lootItemsListToUse;
void Start()
{
ScriptA scriptA = ObjA.GetComponent<ScriptA>();
_lootItemsListToUse = scriptA._lootItemsListToUse;
}
}
Run Code Online (Sandbox Code Playgroud)
甚至:根本不要将该类嵌套在另一个类下,但在外部作用域中有第三个脚本
LootItemList.cs
[System.Serializable]
public class LootItemsList
{
public GameObject _lootItem;
public Vector3 _lootItemOrigin;
public float _lootColliderActivationTime = 0.5f;
}
Run Code Online (Sandbox Code Playgroud)
ScriptA.cs
public class ScriptA: MonoBehaviour
{
public List<LootItemsList> _lootItemsListToUse;
}
Run Code Online (Sandbox Code Playgroud)
ScriptB.cs
public class ScriptB: MonoBehaviour
{
public List<LootItemsList> _lootItemsListToUse;
void Start()
{
ScriptA scriptA = ObjA.GetComponent<ScriptA>();
_lootItemsListToUse = scriptA._lootItemsListToUse;
}
}
Run Code Online (Sandbox Code Playgroud)