Luc*_*ise 5 c# oop unity-game-engine
所以这就是我想做的:
1)我有一个名为 bloby 的预制件,只是一个包含 Bloby 类脚本的简单球体(稍后会解释)。
2)我需要在屏幕中实例化10个bloby,但是每个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);
}
}
Run Code Online (Sandbox Code Playgroud)
3)由于我正在实例化一个游戏对象,因此当我创建一个 Bloby 对象时,我将预制件作为参数传递并实例化。
4)这工作正常,当我调用 Bloby bloby = new Bloby(10, character); 时,我的 Bloby 会在屏幕中实例化。(角色是游戏对象)
5) 奇怪的是,当我的对象被实例化时,Bloby 脚本(附加到预制件)的变量值保持为 speed = 0,即使我在创建它时将其设置为 10 并且主体变量 =无效的。如果我在 Bloby 类上放置 Debug.Log(speed),它会显示 10,但脚本本身的变量值不会改变。
*这是我创建 Blobies 的地方:
代码(CSharp):
public GameObject character;
Bloby bloby = new Bloby(10, character);
bloby.Instant(xPos, zPos);
Run Code Online (Sandbox Code Playgroud)
我会尝试添加一些图片,以便更容易理解我的意思。谢谢
小智 6
不要尝试使用关键字初始化从 MonoBehavior 派生的类new。将您的 Bloby 更改为此并将 bloby 附加到您的预制件:
public class Bloby : MonoBehaviour{
public float speed;
}
Run Code Online (Sandbox Code Playgroud)
然后在外部创建如下实例(即在另一个脚本中):
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;
Run Code Online (Sandbox Code Playgroud)