test mesh

This commit is contained in:
jze9
2026-04-17 02:14:56 +05:00
parent 087db550f1
commit 64293937a7
50 changed files with 2570 additions and 963 deletions

View File

@@ -17,11 +17,12 @@ public class BlockPlacer : MonoBehaviour
public Texture2D crackTexture; // текстура трещин (grayscale)
// ── Приватное ─────────────────────────────────────────────────────────────
Camera _cam;
float _breakProgress;
Vector3Int _breakingBlock = Vector3Int.one * int.MinValue; // "никакой"
GameObject _breakOverlay;
MeshRenderer _overlayRenderer;
Camera _cam;
float _breakProgress;
Vector3Int _breakingBlock = Vector3Int.one * int.MinValue;
GameObject _breakOverlay;
MeshRenderer _overlayRenderer;
MaterialPropertyBlock _mpb;
static readonly int PropProgress = Shader.PropertyToID("_Progress");
@@ -49,7 +50,7 @@ public class BlockPlacer : MonoBehaviour
void HandleBreak()
{
if (!Input.GetMouseButton(0))
if (PlayerInput.Instance == null || !PlayerInput.Instance.BreakHeld)
{
CancelBreak();
return;
@@ -61,6 +62,7 @@ public class BlockPlacer : MonoBehaviour
return;
}
// Сменился ли целевой блок?
if (blockPos != _breakingBlock)
{
@@ -106,7 +108,7 @@ public class BlockPlacer : MonoBehaviour
void HandlePlace()
{
if (!Input.GetMouseButtonDown(1)) return;
if (PlayerInput.Instance == null || !PlayerInput.Instance.PlacePressed) return;
if (!Raycast(out RaycastHit hit, out Vector3Int blockPos)) return;
// Ячейка, куда ставим = сосед грани которую мы смотрим
@@ -120,11 +122,7 @@ public class BlockPlacer : MonoBehaviour
if (selectedItem == null) return;
var def = BlockRegistry.Instance?.GetByItemId(selectedItem.id);
if (def == null)
{
Debug.Log($"[BlockPlacer] {selectedItem.itemName} не является блоком.");
return;
}
if (def == null) return;
WorldManager.Instance.PlaceBlock(placePos, def.blockId);
@@ -154,11 +152,10 @@ public class BlockPlacer : MonoBehaviour
void UpdateOverlay(float progress)
{
if (_overlayRenderer == null) return;
// MaterialPropertyBlock — не создаём новый экземпляр материала
var mpb = new MaterialPropertyBlock();
_overlayRenderer.GetPropertyBlock(mpb);
mpb.SetFloat(PropProgress, progress);
_overlayRenderer.SetPropertyBlock(mpb);
_mpb ??= new MaterialPropertyBlock();
_overlayRenderer.GetPropertyBlock(_mpb);
_mpb.SetFloat(PropProgress, progress);
_overlayRenderer.SetPropertyBlock(_mpb);
}
// ── Утилиты ───────────────────────────────────────────────────────────────
@@ -166,9 +163,13 @@ public class BlockPlacer : MonoBehaviour
bool Raycast(out RaycastHit hit, out Vector3Int blockPos)
{
blockPos = default;
Ray ray = new Ray(_cam.transform.position, _cam.transform.forward);
Ray ray = new Ray(_cam.transform.position, _cam.transform.forward);
if (Physics.Raycast(ray, out hit, reach, blockLayer))
// blockLayer == 0 означает "Nothing" в Unity LayerMask — рейкаст ни по чему не попадёт.
// Если слой не назначен в Inspector, бьём по всем слоям (-1 = Everything).
int mask = blockLayer.value == 0 ? ~0 : blockLayer.value;
if (Physics.Raycast(ray, out hit, reach, mask))
{
// hit.point лежит на грани — смещаемся чуть внутрь блока
Vector3 inner = hit.point - hit.normal * 0.01f;