【问题标题】:how to randomly spawn/instantiate an object everywhere in game? c#如何在游戏中随处生成/实例化对象? C#
【发布时间】:2017-05-21 04:45:01
【问题描述】:

所以我想练习在 2D c# 中制作一个接住物体的游戏,我想用我的玩家对象接住掉落的物体。所以我所做的是创建了一个 Empty GameObject 并向其添加一个脚本,该脚本可以生成一个坠落的对象,问题是我不知道如何在每 2 - 3 秒左右的随机位置生成它。

这是我的代码和游戏视图。

public class spawnball : MonoBehaviour {

public GameObject ballprefab;
GameObject ballclone;




// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    if (Input.GetMouseButtonDown(0)) {

        spawn ();
        Destroy (ballclone,3);

    }
}

void spawn()
{
    ballclone = Instantiate (ballprefab,transform.position,Quaternion.identity)as GameObject;
}


}

在我希望它随机生成的行上方

【问题讨论】:

    标签: c# unity3d unity5


    【解决方案1】:

    到目前为止,您已经掌握了基本概念。

    第一步是开始使用Time.deltaTime,这样您就可以算出距离我们上次生成球已经过去了多久。

    一个例子是:

    private timeSinceLastDrop: float;
    private dropInterval: float = 3f;
    
    void Update(){
        // have we surpassed our interval?
        if(timeSinceLastDrop >= dropInterval){
           this.spawn();
           timeSinceLastDrop = 0;
        }
        else
           timeSinceLastDrop += Time.deltaTime;
    }
    

    为了满足第二个drop在哪里的问题,可以使用Random.Range(min, max),然后使用min和max作为最外层可以drop的参数。

    例如:

    void spawn(){
        ballclone = Instantiate(ballprefab,transform.position,Quaternion.identity)as GameObject;
        ballclone.transform.position.x +=  Random.Range(-10f, 10f);
    }
    



    我在没有 IDE 的情况下编写了此代码,因此某处可能存在语法错误。

    【讨论】:

    • 唯一需要注意的是这里的代码使用UnityScript而不是C#,需要进行一些小的转换(变量声明)。否则它看起来会编译。
    • @Draco18s 我 100% 同意你的观点,老实说,我只是假设当人们将 C# 标记为统一时,他们的意思是统一脚本。
    • Unity 为两者编译(和 Boo,但老实说,没有人使用 Boo),所以这个假设可能不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多