Как добавить разную гравитацию на нерестовые объекты?

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

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

/* 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 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам