Как создавать объект по нажатию кнопки

222
28 мая 2018, 09:10

Как заставить прописанный мной объект для игры, создаваться только после нажатие игроком на кнопку 'Играть'. Я не смог разобраться в instance, а opacity не хочет работать в Unity, тоже самое и с GetActive. Возможно я не получил от программы какого-нибудь разрешения. Не знаю. Вот персонаж:

public class player : MonoBehaviour {
    Rigidbody2D rb = null;
    Fish fish = null;
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        fish = GetComponent<Fish>();
    }
    void Update()
    {
        Vector2 force = new Vector2();
        float speed = fish.Speed * 2f * Time.deltaTime;
        if (Input.GetKey(KeyCode.W)) force.y = speed;
        else if (Input.GetKey(KeyCode.S)) force.y = -speed;
        if (Input.GetKey(KeyCode.D))
        {
            force.x = speed;
            fish.Direction = 1;
        }
        else if (Input.GetKey(KeyCode.A))
        {
            force.x = -speed;
            fish.Direction = -1;
        }
        force = Vector2.ClampMagnitude(force, speed);
        rb.AddForce(force);
    }

Я хотел сделать это в отдельном скрипте.

Answer 1

На обработчик нажатия кнопки накидуете скрипт:

public GameObject go;
void Start() {
    Instantiate(go);
    //или так Instantiate(go, new Vector3(0, 0, 0), Quaternion.identity);
}

go - и есть ваш объект, который нужно создавать

Answer 2

За создание дубликата объекта отвечает метод Instantiate. Этому методу требуется ссылка на создаваемый объект (либо на префаб, либо на объект на сцене).

Для обработки нажатия на кнопку вам нужна ссылка на обрабатываемую кнопку (например, в виде сериализуемого поля, куда вы её перетащите на сцене). Нужный вам код будет выглядеть примерно так:

using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField]
    GameObject _prefab; //Ссылка на ваш префаб
    [SerializeField]
    Button _button;
    void Start()
    {
        _button.onClick.AddListener(Spawn); //здесь мы добавляем к событию onClick нашей кнопки слушателя Spawn
    }
    void Spawn()
    {
        // _button.onClick.RemoveListener(Spawn); если вам нужно лишь единоразовое создание, то раскомментируйте эту строку. Сразу после вызова произойдёт отписка от события клика кнопки.
        Instantiate(_prefab);
    }
}
READ ALSO
почему у меня выходит stackoverflow exception

почему у меня выходит stackoverflow exception

почему у меня выходит Stackoverflow exception, при попытке применения метода RotateLeft() для экземпляра класса BinarySearchTree А? Проблема именно в этом методе,...

196
Запись List&lt;string&gt; в List&lt;List&lt;string&gt;&gt;

Запись List<string> в List<List<string>>

Всем приветЕсть текст, как сделать так, чтобы он записался в List<List<string>>,где List<List<string>> - Предложение, а List<string> - Слова?

164
Актуальность WPF

Актуальность WPF

Подскажите, актуален ли сейчас WPF, как фреймворк для написания настольных приложений или есть что-то более стильное, модное и молодежное?

260
Разбить текст на предложения C#

Разбить текст на предложения C#

Имеется срочная необходимость разбить русский текст из файла на предложенияПростое деление (split) по

244