Я и мой друг пытаемся изучить Unity и C #, чтобы мы могли попробовать сделать игру. У моего друга проблемы с логическими операторами, поэтому я пытаюсь сделать простую программу, которая заставляет блоки падать, когда вы нажимаете определенные комбинации клавиш. (Он очень зацикливается на вещах без наглядного пособия) Мне удалось что-то собрать но это очень круто, и я чувствую, что есть намного лучшие способы сделать это. Вот то, что мне удалось написать методом проб и ошибок.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Falling : MonoBehaviour {
public float fallspeed = 8.0f;
bool a;
bool b;
private GameObject box_0;
private GameObject box_2;
private GameObject box_3;
private GameObject box_4;
private GameObject box_5;
private GameObject box_6;
private GameObject clone;
private GameObject clone1;
private GameObject clone2;
private GameObject clone3;
private GameObject clone4;
private GameObject clone5;
// Use this for initialization
void Start () {
a = false;
b = false;
box_0 = GameObject.Find("box_0");
box_2 = GameObject.Find("box_2");
box_3 = GameObject.Find("box_3");
box_4 = GameObject.Find("box_4");
box_5 = GameObject.Find("box_5");
box_6 = GameObject.Find("box_6");
}
// Update is called once per frame
void Update () {
// makes box_0 fall if a key is pressed
if (Input.GetKeyDown (KeyCode.A)) {
a = true;
if (a) {
clone = Instantiate (box_0, transform.position, Quaternion.identity);
a = false;
}
}
if (Input.GetKeyDown (KeyCode.B) || Input.GetKeyDown (KeyCode.C)) {
a = true;
if (a) {
clone1 = Instantiate (box_2, transform.position, Quaternion.identity);
a = false;
}
}
if (Input.GetKeyDown (KeyCode.Q) && Input.GetKeyDown (KeyCode.E)) {
a = true;
if (a) {
clone2 = Instantiate (box_3, transform.position, Quaternion.identity);
a = false;
}
}
if (Input.GetKeyDown (KeyCode.R) || (Input.GetKey (KeyCode.LeftShift) && Input.GetKeyDown (KeyCode.S)) ) {
a = true;
if (a) {
clone3 = Instantiate (box_4, transform.position, Quaternion.identity);
a = false;
}
}
if (Input.GetKeyDown (KeyCode.U)) {
a = true;
if (a) {
clone4 = Instantiate (box_5, transform.position, Quaternion.identity);
a = false;
}
}
if (Input.GetKeyDown (KeyCode.I)) {
a = true;
if (a) {
clone5 = Instantiate (box_6, transform.position, Quaternion.identity);
a = false;
}
}
//makes clones fall if they exist
if (clone != null) {
clone.transform.Translate (Vector3.down * fallspeed * Time.deltaTime, Space.World);
} else if (clone1 != null) {
clone1.transform.Translate (Vector3.down * fallspeed * Time.deltaTime, Space.World);
} else if (clone2 != null) {
clone2.transform.Translate (Vector3.down * fallspeed * Time.deltaTime, Space.World);
} else if (clone3 != null) {
clone3.transform.Translate (Vector3.down * fallspeed * Time.deltaTime, Space.World);
} else if (clone4 != null) {
clone4.transform.Translate (Vector3.down * fallspeed * Time.deltaTime, Space.World);
} else {
if (clone5 != null) {
clone5.transform.Translate (Vector3.down * fallspeed * Time.deltaTime, Space.World);
}
}
}
}
код работает, но есть проблемы. например, если я создаю более одного клона одного и того же клона, они застревают, и я не думаю, что вообще очень хорошо справился с нулевым игровым объектом. может ли кто-нибудь дать мне совет, как это сделать лучше?
(также в случае, если это уместно, есть шесть цветных блоков, выстроенных в линию в верхней части экрана, при нажатии определенных клавиш создается клон блока, на который ссылается, и заставляется упасть. Блок имеет коллайдер, и когда он ударяется внизу экрана он попадает в другой коллайдер и разрушается.)