Как добавить разную гравитацию на нерестовые объекты? - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю над проектом, в котором я хочу создать эффект включения при каждом нажатии кнопки «Q», у меня работает анимация и персонаж, у меня также есть порождающие объекты вокруг моего плеера, которые я хочу вызвать (См. Рисунок ниже) enter image description here Мой вопрос заключается в том, как добавить разную гравитацию на каждую скалу (нерестовый объект).

Вот сценарий, который я сейчас использую.

/* Public Variables Declaration */
public Transform spawn_LocationForSmall;
public Transform spawn_LocationForMedium;
public Transform spawn_LocationForLarge;
public GameObject smallRock_Prefab;
public GameObject mediumRock_Prefab;
public GameObject largeRock_Prefab;

/* Private Variables Declaration */
private GameObject[] smallRocks_List;
private float posX, posY, posZ;

private bool smallCount = false;
private bool mediumCount = false;
private bool largeCount = false;

private bool small_CheckPos = false;
private bool medium_CheckPos = false;
private bool large_CheckPos = false;




void Start() {

    //smallRocks_List = GameObject.FindGameObjectsWithTag("smallRock");

    Create_Small_Rocks();

    Create_Medium_Rocks();

    Create_Large_Rocks();


}

 private void Create_Small_Rocks(){

    for(int i=0; i<=20; i++){

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

        if(posX > 3f && posY > 3f){

            small_CheckPos = true;
        }

        if (small_CheckPos == true) {

            Vector3 newPos = new Vector3(posX, posY, posZ);

            GameObject createdObject = GameObject.Instantiate(smallRock_Prefab, 
                newPos, spawn_LocationForSmall.rotation) as GameObject;

            createdObject.transform.parent = spawn_LocationForSmall.transform;
        }

    }
    smallCount = true;
}
 /* the other two functions are similar to this */

Ответы [ 2 ]

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

Поиск систем частиц:

1) https://docs.unity3d.com/ScriptReference/ParticleSystem.html

2) https://www.youtube.com/watch?v=FEA1wTMJAR0&t=536s

3) https://www.youtube.com/watch?v=xenW67bXTgM

  • Это позволяет загружать классные эффекты или даже префабы в качестве объектов-клонов (в данном случае это камни / астероиды).Его также можно контролировать скорость нереста / количество / скорость / (случайный) размер / физика (гравитация)

enter image description here

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

Я действительно не знаю, можете ли вы изменить гравитацию для каждого человека, но вы можете изменить эти вещи:

Масса:
В компоненте Rigidbody есть«Массовые» компоненты наверху.Как сказано в документации Unity: «Объекты с более высокой массой толкают объекты с более низкой массой при столкновении. Подумайте о большом грузовике, сбивающем маленький автомобиль».Тем не менее, это не меняет скорость падения объекта.

Физический материал:
В компонентах коллайдера вы должны увидеть нечто, называемое "Материал".Вы можете создавать новые физические материалы и редактировать их случайным образом, увеличивая или уменьшая трение между камнем и поверхностью, и таким образом изменять упругость камней.

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

Пожалуйста, дайте мне знать, помог ли какой-либо из них.

...