使用具有不同变量值的对象类实例化预制件-Unity

时间:2019-05-05 12:27:20

标签: c# oop unity3d

这就是我想要做的:

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);

我将尝试添加一些图片,以使其更容易理解我的意思。 谢谢

1 个答案:

答案 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;