Lob*_*ite 0 c# unity-game-engine
我正在构建一个方法,在GameObjects数组中返回一个"Type".每个GameObject都附加了一个组件,所以我在尝试这个没有结果.
private Type GetComponentOfType(string name)
{
var component; // Error here
for (int i = 0; i < sceneObjectsLength; i++)
{
component = sceneObjects[i].GetComponent(Type.GetType(name));
}
return component;
}
Run Code Online (Sandbox Code Playgroud)
举例说明了这个想法:
private Start()
{
Circle circle:
circle = GetComponentOfType("Circle");
Debug.Log(circle.Radius());
Square square;
square = GetComponentOfType("Square");
Debug.Log(square.Sides());
}
Run Code Online (Sandbox Code Playgroud)
甲Type对象包含有关类型的信息.它不是类型本身.你想使用泛型
private T GetComponent<T>()
where T : Component
{
T component;
for (int i = 0; i < sceneObjectsLength; i++)
{
component = (T)sceneObjects[i].GetComponent(typeof(T));
}
return component;
}
Run Code Online (Sandbox Code Playgroud)
你可以用以下方式调用它:
Circle circle = GetComponent<Circle>();
Run Code Online (Sandbox Code Playgroud)
但是,您有一个局部问题.return只返回一个组件,但是你试图在循环中获得几个组件.如果你打算返回这种类型的第一个组件,那么你应该写
private T GetComponent<T>()
where T : Component
{
return sceneObjects
.Select(obj => obj.GetComponent(typeof(T)))
.Where(obj => obj != null)
.FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
您可以从所有游戏对象中获取所有类型的对象
private IEnumerable<T> GetComponents<T>()
where T : Component
{
return sceneObjects
.SelectMany(obj => obj.GetComponents<T>());
}
Run Code Online (Sandbox Code Playgroud)
您收到错误,var component;因为var只有在编译器可以推断类型时才能使用var component = new Circle();.这里var推断是Circle.var不像Variant可以接受任何类型值的Basic 类型.它只是阻止你两次写入类型名称Circle component = new Circle();
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |