Задать вопрос
  • Почему я не могу привязать к врагу родителя?

    @Dafeds
    Согласен с freeExec. Создай на сцене пустышку и повешай туда скрипт. И если тебе надо сохранить расположение врагов при переходе на другой уровень(сцену), лучше используй MoveGameObjectToScene().
    Этот скрипт на пустышку.
    [SerializeField] private int m_maxEnemies;
        [SerializeField] private GameObject m_Enemy;
    
        private void Start()
        {
            SpawnEnemies(m_maxEnemies);    
        }
        private void SpawnEnemies(int max)
        {
            for (int enemy = 0; enemy < max; enemy++)
            {
                float x = Random.Range(-8, 8);
                float y = Random.Range(-5, 5);
                float z = 1f;
                GameObject childObject = Instantiate(m_Enemy, new Vector3(x,y,z),Quaternion.identity);
                childObject.transform.SetParent(gameObject.transform);
            }
        }


    Этот можешь на камеру закинуть. И метод SwapScenes() вызывать по какому-либо триггеру/событию.
    [SerializeField] private GameObject m_Spawner;
    [SerializeField] private string m_sceneName;
    
    public void SwapScenes()
        {
            StartCoroutine(LoadYourAsyncScene());
        }
        IEnumerator LoadYourAsyncScene()
        {
            Scene currentScene = SceneManager.GetActiveScene();
            AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(m_sceneName, LoadSceneMode.Additive);
            while (!asyncLoad.isDone)
            {
                yield return null;
            }
            SceneManager.MoveGameObjectToScene(m_Spawner, SceneManager.GetSceneByName(m_sceneName));
            SceneManager.UnloadSceneAsync(currentScene);
        }

    P.S. Лучше имя сцены прописать в скрипте, чтобы в инспекторе не допустить ошибки.
    Ответ написан
    Комментировать
  • Как сделать чтобы действие выполнялось пока удерживается кнопка на Canvas?

    @Dafeds
    Ну, как вариант, может, и имеет место быть:
    using System.Collections;
    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class Test : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
    {
        private bool m_IsPressed;
        public void OnPointerDown(PointerEventData eventData)
        {
            m_IsPressed = true;
            StartCoroutine(Execute());
        }
        public void OnPointerUp(PointerEventData eventData)
        {
            m_IsPressed = false;
        }
        private IEnumerator Execute()
        {
            while (m_IsPressed == true)
            {
                yield return new WaitForSeconds(0.5f);
                // что-либо делать
            }
        }
    }

    P.S. Время можешь выставить своё
    Ответ написан
    Комментировать