我有这个代码为几个游戏对象设置随机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会在完全相同的位置结束。我已经知道这与使用的时间有关,但是如何确保所有物体都处于不同的位置?是否有解决方法在不同时间生成随机数,或者代码是否应该移动/更改?
答案 0 :(得分:1)
var rndPoint = (Random.insideUnitCircle * 9);
transform.position = new Vector3(rndPoint.x, transform.position.y, rndPoint.y);
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是我用于所有拾取对象的预制件。