Жесткое тело для нескольких объектов

#c# #unity3d

#c# #unity3d

Вопрос:

Я новичок в Unity… Я пытаюсь решить одну логику… Три куба в плоскости, если я нажму пробел, первый куб прыгнет, при втором нажатии кнопки пробела второй куб прыгнет, а при третьем нажатии третий куб прыгнет, при четвертом нажатии первый куб прыгнет.. Я выполнил скрипт для перехода к кубу, я не знаю, как циклически использовать эти кубы, помогите мне решить эту проблему

 [RequireComponent(typeof(Rigidbody))]
public class Control : MonoBehaviour
{
    public bool isGrounded;
    private static int count = 0;
    Rigidbody rb;
    GameObject cube1, cube2, cube3;
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) amp;amp; isGrounded)
        {
            rb.velocity = new Vector3(0f, 10f, 0f);
            cube1 = GameObject.FindGameObjectWithTag("Player1");
            cube2 = GameObject.FindGameObjectWithTag("Player2");
            cube3 = GameObject.FindGameObjectWithTag("Player3");
            isGrounded = false;

        }
    }
    void OnCollisionEnter(Collision col)
    {
        if (col.gameObject.tag == ("Ground") amp;amp; isGrounded == false)
        {
            isGrounded = true;
        }
    }
}
  

Комментарии:

1. подводя итог, вы хотите, чтобы один куб переходил за раз, и вы хотите повторить цикл, верно?

2. 1-й щелчок пробела, 1-й куб прыгнет, 2-й щелчок пробела, 2-й куб прыгнет, 3-й щелчок пробела, 3-й куб прыгнет, 4-й щелчок, 1-й куб прыгнет

Ответ №1:

В этом случае я бы сохранил List несколько игровых объектов внутри Control скрипта, а затем использовал объекты rigidbodies для установки их скорости.

 public class Control : MonoBehaviour
{
    private static int count = 0;
    public List<GameObject> cubes;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            cubes[count].GetComponent<Rigidbody>().velocity = new Vector3(0f, 10f, 0f);
            count = (  count) % cubes.Count;
        }
    }
}

  

Этот скрипт нужно будет добавить в пустой GameObject; затем вы можете заполнить cubes список из редактора, перетащив в него кубики. Другим кубам не нужен Control скрипт.
Ваш график сцены будет содержать эти элементы:

— Управление (GameObject со сценарием управления)

— Cube1

— Cube2

— Cube3

Комментарии:

1. cube1 = GameObject. Найдите Gameobjectwithtag(«Player1»); эта строка также добавляется в этот скрипт для правильной идентификации куба???

2. Нет. Я не понимаю, что вы имеете в виду. Можете ли вы объяснить?

3. Этот код просто прекрасен… @Annisha если вы не хотите назначать GameObjects в инспекторе, вам придется использовать GameObject. Найдите gameobjectwithtag(«Player1») код

4. Переменные с public областью видимости или отмеченные атрибутом [SerializeField] могут быть установлены в окне инспектора. Перетащите ваши кубические игровые объекты из иерархии сцены в cubes переменную в инспекторе. У вас будет доступ к этим игровым объектам в скрипте через этот список.