#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