这就是我想要做的:
1)我有一个名为bloby的预制件,只是一个包含Bloby类脚本的简单球体(稍后将说明)。
2)我需要在屏幕上实例化10个blob,但是每个bloby具有不同的速度,因此我创建了一个名为Bloby的类:
代码(CSharp):
public class Bloby : MonoBehaviour
{
public float speed;
public GameObject body;
public Bloby(float s, GameObject ga)
{
this.speed = s;
this.body = ga;
}
public void Instant(float xPos, float zPos)
{
GameObject instance = Instantiate(this.body) as GameObject;
instance.transform.position = new Vector3(xPos, 1, zPos);
}
}
3)由于我正在实例化游戏对象,因此在创建Bloby对象时,我将预制件作为参数传递并实例化。
4)这很好,当我调用Bloby bloby = new Bloby(10,character)时,我的Bloby在屏幕上实例化; (角色是游戏对象)
5)奇怪的是,当实例化我的对象时,即使我在创建对象时将其设置为10,Bloby脚本(附加到预制件上)仍保持速度= 0的变量值。身体变量= null。如果将Debug.Log(speed)放在Bloby类上,则显示10,但脚本本身的变量值不变。
*这里是创建Blobies的地方:
代码(CSharp):
public GameObject character;
Bloby bloby = new Bloby(10, character);
bloby.Instant(xPos, zPos);
我将尝试添加一些图片,以使其更容易理解我的意思。 谢谢
答案 0 :(得分:0)
请勿尝试使用new
关键字初始化从MonoBehavior派生的类。将您的Bloby更改为此,并将bloby连接到您的预制件:
public class Bloby : MonoBehaviour{
public float speed;
}
然后在外部(即在另一个脚本中)如下创建您的实例:
GameObject instance = Instantiate(bloby, new Vector3(xPos, 1, zPos), Quaternion.identity) as GameObject; //bloby is your prefab that you already created
instance.GetComponent<Bloby>().speed = 10;