C# 如何引用游戏对象';在不事先知道脚本名称的情况下创建objectscript?
我觉得我一次看的方向太多了。基本上,我有一个驯兽师对象/脚本,她可以与她目前正在处理的任何动物对抗敌人。因此,动物对象可能是许多对象中的一个。我可以很容易地指定动物对象本身,但是如果我事先不知道她将要处理什么动物,我就不知道如何引用该动物对象的脚本。例如,Lion对象会有一个包含Lion统计信息的Lion脚本,dog对象会有dog脚本,等等。可以通过inspector面板直接分配对象,或者给对象一个标记,但我不知道如何引用您不知道名称的脚本:C# 如何引用游戏对象';在不事先知道脚本名称的情况下创建objectscript?,c#,unity3d,C#,Unity3d,我觉得我一次看的方向太多了。基本上,我有一个驯兽师对象/脚本,她可以与她目前正在处理的任何动物对抗敌人。因此,动物对象可能是许多对象中的一个。我可以很容易地指定动物对象本身,但是如果我事先不知道她将要处理什么动物,我就不知道如何引用该动物对象的脚本。例如,Lion对象会有一个包含Lion统计信息的Lion脚本,dog对象会有dog脚本,等等。可以通过inspector面板直接分配对象,或者给对象一个标记,但我不知道如何引用您不知道名称的脚本: public class Player : Mono
public class Player : MonoBehaviour {
public GameObject Animal;
int hpMax;
int attack;
int defense;
int speed;
int hpCurrent;
string animalName;
void Start ()
{
var animalObject = Animal.GetComponent<"AnimalScript">();
//none of the following works
hpMax = animalObject.hpMax;
hpCurrent = hpMax;
attack = animalObject.attack;
defense = animalObject.defense;
speed = animalObject.speed;
animalName = animalObject.animalName;
}
公共类玩家:单行为{
公共猎物动物;
int-hpMax;
智力攻击;
智力防御;
整数速度;
int-hpCurrent;
字符串animalName;
无效开始()
{
var animalObject=Animal.GetComponent();
//下面的作品都没有
hpMax=animalObject.hpMax;
hpCurrent=hpMax;
攻击=animalObject.attack;
防御=动物对象防御;
速度=animalObject.speed;
animalName=animalObject.animalName;
}
让所有动物从基类继承
动物科学
Cat.cs
然后,当从Player
引用这些类时,只需使用基本类型Animal
public class Player : MonoBehaviour {
public Animal myAnimal;
void Start() {
myAnimal.doSomething(); //meows
}
}
在本例中,我希望通过inspector分配myAnimal
。要通过代码分配,请执行以下操作:
myAnimal = someGameobject.GetComponent<Animal>();
myAnimal=someGameobject.GetComponent();
当然,需要注意的是,所有的动物都应该有相同的接口。你需要将每个动物的实现细节隐藏在你定义的基础接口中。关于如何做到这一点以及为什么这样做很好,有很多资源。这是非常重要的面向对象的东西,所以很值得学习
为了解决您在评论中的顾虑,Unity没有做任何奇怪的事情,这应该可以编译(除非我的一些语法不好)。您应该在假设它们不起作用之前进行测试:)让您的所有动物从基类继承 动物科学 Cat.cs 然后,当从
Player
引用这些类时,只需使用基本类型Animal
public class Player : MonoBehaviour {
public Animal myAnimal;
void Start() {
myAnimal.doSomething(); //meows
}
}
在本例中,我希望通过inspector分配myAnimal
。要通过代码分配,请执行以下操作:
myAnimal = someGameobject.GetComponent<Animal>();
myAnimal=someGameobject.GetComponent();
当然,需要注意的是,所有的动物都应该有相同的接口。你需要将每个动物的实现细节隐藏在你定义的基础接口中。关于如何做到这一点以及为什么这样做很好,有很多资源。这是非常重要的面向对象的东西,所以很值得学习
为了解决您在评论中的顾虑,Unity没有做任何奇怪的事情,这应该可以编译(除非我的一些语法不好)。您应该在假设它们不起作用之前进行测试:)让您的所有动物从基类继承 动物科学 Cat.cs 然后,当从
Player
引用这些类时,只需使用基本类型Animal
public class Player : MonoBehaviour {
public Animal myAnimal;
void Start() {
myAnimal.doSomething(); //meows
}
}
在本例中,我希望通过inspector分配myAnimal
。要通过代码分配,请执行以下操作:
myAnimal = someGameobject.GetComponent<Animal>();
myAnimal=someGameobject.GetComponent();
当然,需要注意的是,所有的动物都应该有相同的接口。你需要将每个动物的实现细节隐藏在你定义的基础接口中。关于如何做到这一点以及为什么这样做很好,有很多资源。这是非常重要的面向对象的东西,所以很值得学习
为了解决您在评论中的顾虑,Unity没有做任何奇怪的事情,这应该可以编译(除非我的一些语法不好)。您应该在假设它们不起作用之前进行测试:)让您的所有动物从基类继承 动物科学 Cat.cs 然后,当从
Player
引用这些类时,只需使用基本类型Animal
public class Player : MonoBehaviour {
public Animal myAnimal;
void Start() {
myAnimal.doSomething(); //meows
}
}
在本例中,我希望通过inspector分配myAnimal
。要通过代码分配,请执行以下操作:
myAnimal = someGameobject.GetComponent<Animal>();
myAnimal=someGameobject.GetComponent();
当然,需要注意的是,所有的动物都应该有相同的接口。你需要将每个动物的实现细节隐藏在你定义的基础接口中。关于如何做到这一点以及为什么这样做很好,有很多资源。这是非常重要的面向对象的东西,所以很值得学习
为了解决您在评论中的顾虑,Unity不会做任何奇怪的事情,它应该可以编译(除非我的一些语法不好)。您应该在假设它们不起作用之前进行测试:)“参考那个动物对象的脚本”-这是什么意思?什么“脚本”你在说什么?你很可能想要一个父类或接口,不同的动物从中继承,例如:
接口HostileAnimal{void Attack();}公共类Lion{public void Attack(){“do work”}公共类Bear{public void Attack(){“do work”}
这样一来,你就可以从同一个成员调用,同一个方法可以产生不同的效果;不同的伤害、速度等等。这有意义吗?@GrawCube每个动物对象都有一个脚本,它引用了该动物的统计数据。动物对象本身只是一个空对象,所以脚本确实是我唯一需要的东西,但你不能只是重复就我所知,请直接使用脚本。@calebB我知道如何在C#中实现这一点,但我无法在unity中找到它。父类是否需要附加到堆栈中的对象,或者在预设上?这样,在获取游戏对象时,animalObject可能会作为通用对象或其他类型的对象返回,即使它确实是一个对象