如何使用C#将多个游戏对象的位置设置为不同的随机位置? (Unity5.5)

时间:2017-02-25 16:37:22

标签: c# random unity5

我有这个代码为几个游戏对象设置随机x和z坐标:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class SetPositions : MonoBehaviour 
{
    // Use this for initialization
    void Start () 
    {
        System.Random rnd = new System.Random();
        int a = rnd.Next (-9,9);
        int b = rnd.Next(-9,9);
        transform.position = new Vector3(a, transform.position.y, b);
    }
}

当我将此脚本与多个游戏对象一起使用时,它们的mot会在完全相同的位置结束。我已经知道这与使用的时间有关,但是如何确保所有物体都处于不同的位置?是否有解决方法在不同时间生成随机数,或者代码是否应该移动/更改?

2 个答案:

答案 0 :(得分:1)

您可能需要Random.insideUnitCircle

var rndPoint = (Random.insideUnitCircle * 9);
transform.position = new Vector3(rndPoint.x, transform.position.y, rndPoint.y);

Random.insideUnitSphere

var rndPoint = (Random.insideUnitSphere * 9);
rndPoint.y = transform.position.y;
transform.position = rndPoint;

答案 1 :(得分:0)

感谢Scott Chamberlain的评论,我能够找到随机数的Unity Documentation并解决我的问题。 UnityEngine.Random显然不使用时间,因此随机位置彼此不同。这是正确的脚本:

using UnityEngine;
using System.Collections;

public class SetPositions : MonoBehaviour 
{
    public GameObject PickUp;

    void Start() 
    {
        transform.position = new Vector3(Random.Range(-9.5f, 9.5f), 0.5f, Random.Range(-9.5f, 9.5f));
    }
}

PickUp是我用于所有拾取对象的预制件。