Unity3D Snap to grid

SnapToGrid — привязка объекта к сетке

Скипт автоматической привязки объектов(точнее префабов) в Unity сцене к определённой сетке. Очень удобно таким образом расставлять игровые штуки.
Unity3D Snap to grid

Unity3D Snap to grid

 

//************************************************//
//********** Author:  Dimusikus@mail.ru **********//
//********** Site:    http://midadev.ru **********//
//************************************************//
using UnityEngine;
using System.Collections;

//Привязка объекта к сетке в окне редактора
[ExecuteInEditMode]
public class SnapToGrid : MonoBehaviour 
{
  #if UNITY_EDITOR

  [Header("Привязка объекта к сетке")]
  public bool snapToGrid = true;
  [Header("Размер сетки")]
  public float snapValue = 0.32f;

  [Header("Брать размер сетки из SpriteRenderer")]
  public bool snapValueAuto = true;
  //**********************************************************************************************

  //**********************************************************************************************
  void Update ()
  {
    
    if (snapToGrid)
    {
      if(snapValueAuto==true)
      {
        snapValue =gameObject.GetComponent<SpriteRenderer>().bounds.size.x;
      }

      Vector3 offset = Vector3.zero;

      transform.position = RoundTransform (transform.position , snapValue) + offset ;
    }
  }
  //**********************************************************************************************

  //**********************************************************************************************
  private Vector3 RoundTransform (Vector3 v, float snapValue)
  {
    return new Vector3
      (
        snapValue * Mathf.Round(v.x / snapValue - snapValue/2) + snapValue/2,
        snapValue * Mathf.Round(v.y / snapValue - snapValue/2) + snapValue/2,
        v.z
      );
  }
  //**********************************************************************************************

  //**********************************************************************************************
  void OnDrawGizmosSelected()
  {			
    Vector3 start = new Vector3(transform.position.x - snapValue/2,transform.position.y + snapValue/2,transform.position.z);
    Gizmos.color = Color.yellow;
    //Gizmos.DrawSphere(start, 0.1f);

    float len = snapValue * 2;

    Gizmos.color = Color.gray;

    for (float i = len; i >= -(len); i -= snapValue) 
    {
      Gizmos.DrawLine (new Vector3 (start.x - len , start.y-i, start.z), new Vector3 (start.x + len, start.y-i, start.z));

      Gizmos.DrawLine (new Vector3 (start.x-i, start.y-len, start.z), new Vector3 (start.x - i , start.y + len, start.z));
    }
  }

  #endif
}

Скрипт вешается на префаб и с тех пор он начинает привязываться по заданой сетке.

 

Теги: ,

Трекбэк с Вашего сайта.

Дмитирй

This information box about the author.

Оставить комментарий

Вы должны войти чтобы оставить комментарий.

Offcanvas

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.