#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
переменную в инспекторе. У вас будет доступ к этим игровым объектам в скрипте через этот список.