Unity 组件的排序问题

好久不写博客,今天来一篇。
记得NGUI里的UIGrid和UITable用起来很不错,但是不用插件时就要这两个脚本,由于NGUI的耦合型比较高,不怎么容易提取出这两个脚本。

所以就自己琢磨写了一个简单的。刚好应用了以下最近学的编辑器。


首先排序的核心就是计算transform的位置,另外要使它可以实时排序。


主要写了两个脚本:

首先是排序方法脚本GridTransform.cs

using UnityEngine;
using System.Collections;

public class GridTransform : MonoBehaviour {

	//排序的列数
	public int column=1;

	//间距的宽和高
	public float space_w;
	public float space_h;

	//组件对象的宽和高
	public float width;
	public float Height;

	//排序对象的数目
	public int itemNumber;

	//字段封装实时排序
	public bool repositionNow
	{
		set
		{
			_repositionNow=value;
			if(value)
			{
				Sort();
				_repositionNow=false;
			}
		}

		get
		{
			return _repositionNow;
		}
	}
	[HideInInspector]public bool _repositionNow;

	//排序方法
	void Sort()
	{
		itemNumber = transform.childCount;;
		for(int i=0;i


 然后是编辑器的封装: 
  

using UnityEngine;
using System.Collections;
using UnityEditor;

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

		GridTransform g=target as GridTransform;

		g.repositionNow=EditorGUILayout.BeginToggleGroup("resert",g.repositionNow);
		EditorGUILayout.EndToggleGroup();
	}
}

最终的属性面板如图所示:

Unity 组件的排序问题_第1张图片

每点击一次resert就排序一次,点击完自动为false


下面我们举个列子,在场景中建一个空物体和几个立方体子物体,空物体挂上Grid Transform脚本,如下图所示:

Unity 组件的排序问题_第2张图片

Unity 组件的排序问题_第3张图片

这样就可以排序了,组件可以是任意形式的对象,虽然Unity自带了GridLayoutGroup但是只适用于自带的ui层,自己写的组件或者三维层都不适用。

你可能感兴趣的:(Unity3d)