Только один игровой объект перемещается в Unity, когда у меня есть 3 одинаковых объекта

#c# #unity3d #variables #rigid-bodies

#c# #unity3d #переменные #твердые тела

Вопрос:

Это раздражает меня некоторое время, и я не могу найти решение. ground3 Перемещается только, пока остальные 2 остаются на месте. Я использую Unity и делаю 2d-проект.

Код:

 using System.Collections.Generic;
using UnityEngine;

public class GroundMovement : MonoBehaviour
{
    public float globalspeed;

    public GameObject Ground1;
    public float Ground1Speed;
    Rigidbody2D rb1;

    public GameObject Ground2;
    public float Ground2Speed;
    Rigidbody2D rb2;

    public GameObject Ground3;
    public float Ground3Speed;
    Rigidbody2D rb3;


    // Start is called before the first frame update
    void Start()
    {
        rb1 = Ground1.GetComponent<Rigidbody2D>();
        rb2 = Ground1.GetComponent<Rigidbody2D>();
        rb3 = Ground1.GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        rb1.velocity = new Vector2(globalspeed   Ground1Speed, 0);
        rb2.velocity = new Vector2(globalspeed   Ground2Speed, 0);
        rb3.velocity = new Vector2(globalspeed   Ground3Speed, 0);
    }
}
  

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

1. Вы уверены, что все назначено в вашем инспекторе и что все ваши объекты имеют компонент твердого тела?

2. Да, 100%, я проверял 10 раз

3. Почему rb3 = Ground1.GetComponent<Rigidbody2D>(); и нет rb3 = Ground3.GetComponent<Rigidbody2D>(); ?

4. Потому что я глупый, и это решение

5. Вы получали rb от ground1 каждый раз, поэтому был получен только 1

Ответ №1:

Проблема в Start() методе, когда вы назначили жесткие тела, вы назначили их все жесткому телу в Ground1 GameObject, метод должен быть таким:

 void Start()
{
    rb1 = Ground1.GetComponent<Rigidbody2D>();
    rb2 = Ground2.GetComponent<Rigidbody2D>();
    rb3 = Ground3.GetComponent<Rigidbody2D>();
}
  

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

1.кроме того, я предлагаю вам использовать соглашения об именовании C # (верблюжий корпус для переменных), например: ground1 ground1Speed globalSpeed