Цитата beril (
)
Посмотри это, может поможет
Да видел эту тему, но тогда не уделил ей должного внимания. Вот этот скрипт работает на ура, только его нужно переписать под компоненты.
Спасибо огромное, с меня причитается плюс.
Код
using UnityEngine;
using System.Collections.Generic;
namespace de.softfun.drawntogether {
public class EnhancedBehavior : MonoBehaviour {
private List<GameObject> linkedObjects = new List<GameObject>();
protected void destroy(params GameObject[] objects) {
foreach (GameObject o in objects) {
try {
Destroy(o);
} catch {
continue;
}
}
}
public void LinkObjects(params GameObject[] objects) {
foreach (GameObject o in objects) {
linkedObjects.Add(o);
}
}
void OnDestroy() {
foreach (GameObject o in linkedObjects) {
destroy(o);
}
}
protected T instantiate<T>(T prefab, bool addLink = true) where T : Object {
T o = (T)Instantiate(prefab);
if (addLink && (o is GameObject)) {
linkedObjects.add(o);
}
return o;
}
}
}
Добавлено (28 сентября 2015, 17:13)
---------------------------------------------
А нет, поспешил с выводами, ошибка не исчезла. Она возникает при нажатии кнопки play.
Подскажите boolean переменную которая показывает воспроизведена игра или нет, думаю это исправит проблему.
Добавлено (28 сентября 2015, 17:26)
---------------------------------------------
Попробовал Application.isPlaying не помогает. Насколько я понимаю когда в инспекторе нажимается Remove Component то вызывается метод OnDestroy(), и мне нужно как то при нажатии Remove Component делать DestroyImmediate, но в OnDestroy() не получается, потому что при запуске игры и её остановки вылазят ошибки. Подскажите решение.
Добавлено (28 сентября 2015, 18:12)
---------------------------------------------
Нашел решение:
Код
using UnityEngine;
using System.Collections;
using UnityEditor;
[ExecuteInEditMode]
public class Test : MonoBehaviourEnhanced {
void Awake ()
{
if(!GetComponent<SpriteRenderer>())gameObject.AddComponent <SpriteRenderer> ();
}
void OnDestroy()
{
if(Application.isPlaying || Application.isLoadingLevel || EditorApplication.isPlayingOrWillChangePlaymode) return;
else DestroyImmediate (GetComponent<SpriteRenderer>());
}
}