как порождать объекты в единстве, используя две оси, но не в определенном разделе - PullRequest
0 голосов
/ 10 декабря 2018

Привет, я работаю над анимацией персонажа / взаимодействием с окружающей средой.Я пытаюсь породить камни разных размеров, идущие от земли туда, где применяется гравитационное направление.

Я использую c # для обоих моих скриптов (character_movements_animation.cs & powerUp.cs)

MyВопрос в том, как создавать объекты вокруг моего персонажа, а не через него.Я использую код ниже:

/* Variables Declaration */
public GameObject rock_Small;
public GameObject rock_Medium;
public GameObject rock_Large;

private float posX, posY, posZ;
private bool checkPos = false;
//Use this for initialization
void Start() {
    //Empty for now
}

// Update is called once per frame
void Update() {

    if (Random.Range(0, 100) < 10) {

        checkPos = false;
        posX = this.transform.position.x + Random.Range(-5.0f, 5.0f);
        posY = this.transform.position.y;
        posZ = this.transform.position.z + Random.Range(-5.0f, 5.0f);

        if(posX > 3f && posY > 3f){
            checkPos = true;
        }

        if (checkPos == true) {

            Vector3 newPos = new Vector3(posX, posY, posZ);
            Instantiate(rock_Small, newPos, rock_Small.transform.rotation);
        }

    }
}

Также см. Пример на рисунке.UNITY

1 Ответ

0 голосов
/ 10 декабря 2018

Похоже, что вы хотите порождать объекты вокруг вашего персонажа, но избегайте собственного объема персонажа .

Я бы предложил что-то вроде этого:

var pos = this.transform.position = Random.insideUnitCircle.normlaized * _distance; //how far away from your character. 1, based on your original code

Это создаст кольцо вокруг вашего персонажа.Если вы хотите еще более рандомизировать вещи, вы можете применить меньшие случайные смещения к этому значению, например:

var pos = this.transform.position = Random.insideUnitCircle.normlaized * _distance;
pos += Random.insideUnitCircle * _offset; //how wide the ring should be. 0.1 is probably sufficient.
...