Как установить префаб по сетке?

Обычно, мы рисуем по тайлмепу/сетке используя палитру. Но, иногда, нам нужно не нарисовать, а разместить отдельный объект/префаб, строго по сетке.

Например, у нас есть уровень, где одна плита должна проваливаться. Мы рисуем по сетке плиты и оставляем промежуток для проваливающийся плиты. Чтобы игрок не заметил ловушку, надо разместить эту плиту идеально, желательно по сетке.
Как это сделать? Как установить префаб по сетке?

Вот тут я пытаюсь это сделать. Рисунок при переносе встает ровно по сетке. А вот префаб нет (
https://youtu.be/mc1yCFX_HuY
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
1. Зная размерность сетки, можно руками поправить координаты в Transform
2. Можно перетащить префаб во вкладку Hierarchy, а затем перетащить на нужное место через Move Tool с зажатой Ctrl
3. Можно поместить сразу как надо, и, держа открытой вкладку "Edit >> Grid and Snap Settings...", нажать кнопку "All Axes", и если оно неправильно округлило, то используя способ 2, дотянуть немного.
4. Можно самому написать скрипт, типа такого:

скрипт

using UnityEngine;
using UnityEditor;

public class SnapPrefab : MonoBehaviour {
    public float cellSize = 0.5f;

#if UNITY_EDITOR
    private void OnValidate() {
        Snap();
    }
#endif

    public void Snap() {
        Vector3 position = transform.position;
        position.x = Mathf.Round(position.x / cellSize) * cellSize;
        position.y = Mathf.Round(position.y / cellSize) * cellSize;
        position.z = Mathf.Round(position.z / cellSize) * cellSize;
        transform.position = position;
    }
}

#if UNITY_EDITOR

[CustomEditor(typeof(SnapPrefab))]
public class SnapPrefabEditor : Editor {
    public override void OnInspectorGUI() {
        base.OnInspectorGUI();

        if (GUILayout.Button("Snap")) {
            SnapPrefab script = (SnapPrefab) target;
            script.Snap();
        }
    }
}

#endif

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы