сделал код для размещения выбора цветов но пока не добавил в игру

This commit is contained in:
vladislove 2026-08-11 20:38:39 +03:00
parent eff9613938
commit 0606f8ab37
4 changed files with 82 additions and 3 deletions

View File

@ -34,7 +34,8 @@ public class FurnitureController : MonoBehaviour
private bool _isInteracting = false;
private Vector3 _lastInputPos;
private Vector3 _dragOffset;
[Header("Связь с UI Цветов")]
public FurniturePaletteUI paletteUI; // Ссылка на новый скрипт
private float _lastClickTime = 0f;
private void Start()
@ -203,6 +204,9 @@ public class FurnitureController : MonoBehaviour
_currentTool = EditTool.Move;
if (rotate90Button != null) rotate90Button.SetActive(false);
// Показываем панель цветов при выборе предмета
if (paletteUI != null) paletteUI.ShowColors(_activeFurnitureScript);
_isInteracting = false;
LockCamera(false);
UpdateUIPosition();
@ -273,12 +277,17 @@ public class FurnitureController : MonoBehaviour
_activeFurnitureScript = _activeFurniture.GetComponent<FurnitureObject>();
// --- МАГИЯ АРХИТЕКТУРЫ ---
// Находим скрипт визуала и применяем базовый цвет (Preset 0)
// Инъекция карточки товара в объект на сцене!
_activeFurnitureScript.runtimeItemData = currentItemData;
FurnitureVisuals visuals = _activeFurniture.GetComponent<FurnitureVisuals>();
if (visuals != null && currentItemData.availablePresets != null && currentItemData.availablePresets.Count > 0)
{
visuals.ApplyPreset(currentItemData.availablePresets[0]);
}
// Показываем панель цветов для только что заспавненного объекта
if (paletteUI != null) paletteUI.ShowColors(_activeFurnitureScript);
// -------------------------
_activeFurnitureScript.SetEditMode(true);
@ -328,6 +337,7 @@ public class FurnitureController : MonoBehaviour
_activeFurniture = null;
_activeFurnitureScript = null;
editPanel.SetActive(false);
if (paletteUI != null) paletteUI.HideColors();
LockCamera(false);
}
}
@ -342,6 +352,7 @@ public class FurnitureController : MonoBehaviour
_activeFurniture = null;
_activeFurnitureScript = null;
editPanel.SetActive(false);
if (paletteUI != null) paletteUI.HideColors();
LockCamera(false);
}
}

View File

@ -7,7 +7,7 @@ public class FurnitureObject : MonoBehaviour
public bool isWallObject;
private int _obstaclesCount = 0;
public bool IsPlacementValid => _obstaclesCount == 0;
[HideInInspector] public FurnitureItemSO runtimeItemData;
private GameObject _highlightBox;
private Material _highlightMaterial;

View File

@ -0,0 +1,65 @@
using UnityEngine;
using UnityEngine.UI;
public class FurniturePaletteUI : MonoBehaviour
{
[Header("UI Элементы")]
public GameObject palettePanel; // Панель, которая выезжает с цветами
public Transform contentContainer; // Объект с Horizontal/Grid Layout Group
public GameObject colorBtnTemplate; // Префаб кнопки цвета
private FurnitureVisuals _currentVisuals;
public void ShowColors(FurnitureObject furniture)
{
// Проверяем, есть ли карточка и скрипт визуала
if (furniture == null || furniture.runtimeItemData == null) return;
_currentVisuals = furniture.GetComponent<FurnitureVisuals>();
if (_currentVisuals == null || furniture.runtimeItemData.availablePresets.Count <= 1)
{
// Если цвет всего один или нет визуала - не показываем панель
palettePanel.SetActive(false);
return;
}
palettePanel.SetActive(true);
// 1. Очищаем старые кнопки
foreach (Transform child in contentContainer)
{
Destroy(child.gameObject);
}
// 2. Создаем новые кнопки цветов
foreach (FurniturePreset preset in furniture.runtimeItemData.availablePresets)
{
GameObject btnObj = Instantiate(colorBtnTemplate, contentContainer);
// Ставим иконку цвета (которую вы настраивали в SO)
Image img = btnObj.GetComponent<Image>();
if (img != null && preset.presetIcon != null)
{
img.sprite = preset.presetIcon;
}
// Настраиваем клик по кнопке
Button btn = btnObj.GetComponent<Button>();
FurniturePreset presetToApply = preset; // Замыкание для кнопки
btn.onClick.AddListener(() =>
{
if (_currentVisuals != null)
{
_currentVisuals.ApplyPreset(presetToApply);
}
});
}
}
public void HideColors()
{
palettePanel.SetActive(false);
_currentVisuals = null;
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a4a4b4004bcb4480a035e8fa992fbb6b
timeCreated: 1786469625