test mesh
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user