Как настроить параметры компонента Rigidbody перед добавлением компонента ко всем объектам? - PullRequest
0 голосов
/ 17 ноября 2018
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GenerateStairs : MonoBehaviour
{
    public GameObject stairsPrefab;
    public float delay = 3;
    public int stairsNumber = 5;
    public Vector3 stairsStartPosition;
    public Vector3 stairSize;
    public Vector3 stairsSize;
    public float stepWidthFactor = 1f;
    public MoveObjects moveobjects;
    public bool addRigidbody = false;

    private Vector3 stairsPosition;
    private GameObject stairsParent;

    // Use this for initialization
    void Start()
    {
        stairsParent = GameObject.Find("Stairs");
        StartCoroutine(BuildStairs());
    }

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

    }

    private IEnumerator BuildStairs()
    {
        for (int i = 1; i <= stairsNumber; i++)
        {

            stairsPosition = new Vector3(
                    stairsStartPosition.x,
                    stairsStartPosition.y + (i * stairsSize.y),
                    stairsStartPosition.z + (i * stairsSize.y) * stepWidthFactor);

            GameObject stairs = Instantiate(
                    stairsPrefab,
                    stairsPosition,
                    Quaternion.identity);

            if(addRigidbody)
            {
                stairs.AddComponent<Rigidbody>();
            }
            stairs.tag = "Stair";
            stairs.transform.parent = stairsParent.transform;
            stairs.transform.localScale = stairSize;

            yield return new WaitForSeconds(delay);
        }

        moveobjects.Init();
    }
}

Перед добавлением твердого тела к каждой лестнице здесь:

stairs.AddComponent<Rigidbody>();

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

Нет, если я добавлю жесткое тело к каждому объекту, это будет с настройками жесткого тела по умолчанию. Я хочу контролировать эти настройки перед добавлением жесткого тела.

1 Ответ

0 голосов
/ 18 ноября 2018

Я хочу управлять этими настройками до добавления жесткого тела.

Вы не можете, потому что вы не можете, потому что вы не можете добавить существующий компонент в GameObject. Функция AddComponent добавляет новый экземпляр Компонента в GameObject.

Обратите внимание, что функция AddComponent добавляет компонент, а затем возвращает только что добавленный экземпляр в GameObject. Вы можете изменить тот компонент экземпляра, который он возвратил, и это то, что вы должны сделать.

Rigidbody с настройками по умолчанию:

public Rigidbody deafultSettings;

Добавьте компонент Rigidbody к вашей лестнице GameObject и верните добавленный компонент:

Rigidbody stairRb = stairs.AddComponent<Rigidbody>();

Теперь вы можете изменить возвращенный компонент или сделать функцию, чтобы упростить это для вас:

CopyRigidBodySettings(deafultSettings, stairRb);

Функция CopyRigidBodySettings:

void CopyRigidBodySettings(Rigidbody destination, Rigidbody source)
{
    destination.useGravity = source.useGravity;
    destination.mass = source.mass;
    destination.drag = source.drag;
    destination.angularDrag = source.angularDrag;
}

Компоненты модифицируются после их добавления, а не перед их добавлением. Это не должно быть проблемой, но если вам это не нравится, используйте префаб. Фактически, это то, для чего созданы префабы, так что вы можете создать GameObject с настройками по умолчанию, а затем использовать их повторно. Создайте сборную из ваших лестниц с Rigidbody, уже прикрепленными к ним, затем используйте функцию Instantiate, чтобы создать сборную. Вы можете изменить префаб в редакторе или скрипте перед его созданием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...