Как удалить GameObject и при этом удалить Missing Collider?
Добавлено: 28 июн 2017, 16:51
Доброго времени суток! На своём проекте я сделал скрипты BuildingSystem.cs (Систему строительства) и PreviewObject.cs (Предварительный просмотр объекта), проблема заключается с PreviewObject.cs... Существовал список коллайдеров игровых объектов, когда Объект с превязанным скриптом заходил на Trigger, к примеру Коллайдер Воды, то он менял "Материал" Объекта на текстуру красного цвета и построить объект нельзя было потому что он выключал bool isBuildable который в скрипте BuildingSystem.cs проверяется оператором if, а если на Коллайдер Суши направить Объект, то он менял текстуру на зеленый цвет и объект можно было построить... Коллайдер Воды имеет слой 9. Buildable а в скрипте PreviewObject.cs указанно что при заходе на этот слой он добавлял Коллайдер данного Объекта (Воды) в свой список а при выходе из этого Коллайдера он его удалял... Если коллайдеров в списке 0 то bool IsBuildable был включен. Здесь всё нормально, но дело в том, что мне надо было добавить ещё один слой Buildings т.е. если я построил и опять на постройку направил Объект, то он горел бы красным и построить объект нельзя было ведь его Коллайдер в списке, но в скрипте есть ещё функция удаления с помощью правой кнопки мыши... И когда я наводил на объект и удалял его Коллайдер в списке оставался (Missing) и построить ничего нельзя... Пытался заменить системой Bool но тоже самое... Я пытался вместе с этим действием Remove из списка но не помогло... Мда... Я дофигу написал но надеюсь разберётесь, но если короче суть проблемы если я правильно понял в том, что когда я удаляю здание из какого-то другого скрипта, у меня не срабатывает
void OnTriggerExit(Collider other)... Заранее Спасибо!
Вот Скрипт:
void OnTriggerExit(Collider other)... Заранее Спасибо!
Вот Скрипт:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PreviewObject : MonoBehaviour
{
public List<Collider> col = new List<Collider>();
public objectsorts sort;
public Material green;
public Material red;
public bool IsBuildable;
public bool IsDetail;
public bool second;
public PreviewObject childcol;
public Transform graphics;
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.layer == 9)
col.Add(other);
if (other.gameObject.layer == 10)
col.Add(other);
}
public void OnTriggerExit(Collider other)
{
if (other.gameObject.layer == 9)
col.Remove(other);
if (other.gameObject.layer == 10)
col.Remove(other);
}
void Update()
{
if (!second)
changecolor();
}
public void changecolor()
{
if (sort == objectsorts.foundation)
{
if (col.Count == 0)
{
IsDetail = true;
IsBuildable = true;
}
else
{
IsDetail = false;
IsBuildable = false;
}
}
else
{
if (col.Count == 0 && childcol.col.Count > 0)
{
IsDetail = true;
IsBuildable = true;
}
else
{
IsDetail = false;
IsBuildable = false;
}
}
if (IsBuildable)
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = green;
}
}
else
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = red;
}
}
if (IsDetail)
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = green;
}
}
else
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = red;
}
}
}
}
public enum objectsorts
{
normal,
foundation,
floor
}
using System.Collections.Generic;
using UnityEngine;
public class PreviewObject : MonoBehaviour
{
public List<Collider> col = new List<Collider>();
public objectsorts sort;
public Material green;
public Material red;
public bool IsBuildable;
public bool IsDetail;
public bool second;
public PreviewObject childcol;
public Transform graphics;
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.layer == 9)
col.Add(other);
if (other.gameObject.layer == 10)
col.Add(other);
}
public void OnTriggerExit(Collider other)
{
if (other.gameObject.layer == 9)
col.Remove(other);
if (other.gameObject.layer == 10)
col.Remove(other);
}
void Update()
{
if (!second)
changecolor();
}
public void changecolor()
{
if (sort == objectsorts.foundation)
{
if (col.Count == 0)
{
IsDetail = true;
IsBuildable = true;
}
else
{
IsDetail = false;
IsBuildable = false;
}
}
else
{
if (col.Count == 0 && childcol.col.Count > 0)
{
IsDetail = true;
IsBuildable = true;
}
else
{
IsDetail = false;
IsBuildable = false;
}
}
if (IsBuildable)
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = green;
}
}
else
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = red;
}
}
if (IsDetail)
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = green;
}
}
else
{
foreach (Transform child in graphics)
{
child.GetComponent<Renderer>().material = red;
}
}
}
}
public enum objectsorts
{
normal,
foundation,
floor
}