Доброго времени суток, Тостер! Давно не заходил и не задавал вопросов, думаю пора задать вопрос))) На своём проекте я сделал скрипты BuildingSystem.cs (Систему строительства) и PreviewObject.cs (Предварительный просмотр объекта), проблема заключается с PreviewObject.cs... Существовал список коллайдеров игровых объектов, когда Объект с превязанным скриптом заходил на Trigger, к примеру Коллайдер Воды, то он менял "Материал" Объекта на текстуру красного цвета и построить объект нельзя было потому что он выключал bool isBuildable который в скрипте BuildingSystem.cs проверяется оператором if, а если на Коллайдер Суши направить Объект, то он менял текстуру на зеленый цвет и объект можно было построить... Коллайдер Воды имеет слой 9. Buildable а в скрипте PreviewObject.cs указанно что при заходе на этот слой он добавлял Коллайдер данного Объекта (Воды) в свой список а при выходе из этого Коллайдера он его удалял... Если коллайдеров в списке 0 то bool IsBuildable был включен. Здесь всё нормально, но дело в том, что мне надо было добавить ещё один слой Buildings т.е. если я построил и опять на постройку направил Объект, то он горел бы красным и построить объект нельзя было ведь его Коллайдер в списке, но в скрипте есть ещё функция удаления с помощью правой кнопки мыши... И когда я наводил на объект и удалял его Коллайдер в списке оставался (Missing) и построить ничего нельзя... Пытался заменить системой Bool но тоже самое... Я пытался вместе с этим действием Remove из списка но не помогло... Мда... Я дофигу написал но надеюсь разберётесь))) Заранее Спасибо!
Вот скрипт PreviewObject.cs:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PreviewObject : MonoBehaviour
{
public objectsorta sort;
public Material green;
public Material red;
public bool IsBuildable;
public bool IsDetail;
public LayerMask Detail;
public bool second;
public bool OnTriggerBuildable;
public bool OnTriggerDetail;
public PreviewObject childCol;
public Transform graphics;
void OnTriggerEnter(Collider other)
{
if (other.gameObject.layer == 9)
OnTriggerBuildable = true;
if (other.gameObject.layer == 10)
{
OnTriggerDetail = true;
if (Input.GetMouseButtonDown(1))
{
Destroy(other);
OnTriggerDetail = false;
}
}
}
void OnTriggerExit(Collider other)
{
if (other.gameObject.layer == 9)
OnTriggerBuildable = false;
if (other.gameObject.layer == 10)
{
OnTriggerDetail = false;
}
}
void Update()
{
if (!second)
changecolor();
}
public void changecolor()
{
if (sort == objectsorta.foundation)
{
if (!OnTriggerBuildable)
{
IsBuildable = true;
}
else
{
IsBuildable = false;
}
if (!OnTriggerDetail)
{
IsDetail = true;
}
else
{
IsDetail = false;
}
if (!OnTriggerBuildable && !OnTriggerDetail)
{
IsBuildable = true;
IsDetail = true;
}
else
{
IsBuildable = false;
IsDetail = 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 objectsorta
{
normal,
foundation,
floor,
}
EDIT: Если что, этот скрипт на основе bool а не на основе списка массивов...