1、unity编辑器扩展chapter2Unity 编辑器扩展 Chapter2 请选中您要保存的内容,粘贴到此文本框 二. 使用Gizoms绘制网格及矩阵转换使用1. 创建Leve类,作为场景控制类: 1 using UnityEngine; 2 /使用namespace方便脚本管理 3 namespace RunAndJump 4 /使用部分类partial将类依据不同的功能分布到各个文件中,便于功能区分个管理 5 public partial class Level : MonoBehaviour 6 SerializeField 7 public int _totalTime = 60;
2、8 SerializeField 9 private float _gravity = -30; 10 SerializeField 11 private AudioClip _bgm; 12 SerializeField 13 private Sprite _background; 14 15 SerializeField 16 private int _totalColumns = 25; 17 18 SerializeField 19 private int _totalRows = 10; 20 21 public const float GridSize = 1.28f; 22 23
3、 private readonly Color _normalColor = Color.grey; 24 private readonly Color _selectedColor = Color.yellow; 25 public int TotalTime 26 get return _totalTime; 27 set _totalTime = value; 28 29 30 public float Gravity 31 get return _gravity; 32 set _gravity = value; 33 34 35 public AudioClip Bgm 36 get
4、 return _bgm; 37 set _bgm = value; 38 39 40 public Sprite Background 41 get return _background; 42 set _background = value; 43 44 45 public int TotalColumns 46 47 get 48 49 return _totalColumns; 50 51 52 set 53 54 _totalColumns = value; 55 56 57 58 public int TotalRows 59 60 get 61 62 return _totalR
5、ows; 63 64 65 set 66 67 _totalRows = value; 68 69 70 71 /绘制边界 72 private void GridFrameGizmo(int cols, int rows) 73 74 Gizmos.DrawLine(new Vector3(0,0,0),new Vector3(0,rows*GridSize,0) ); 75 Gizmos.DrawLine(new Vector3(0, 0, 0), new Vector3(cols*GridSize,0, 0); 76 Gizmos.DrawLine(new Vector3(cols*Gr
6、idSize, 0, 0), new Vector3(cols*GridSize, rows * GridSize, 0); 77 Gizmos.DrawLine(new Vector3(0, rows*GridSize, 0), new Vector3(cols*GridSize, rows * GridSize, 0); 78 79 80 /绘制内部线条 81 private void GridGizmos(int cols, int rows) 82 83 for (int i = 0; i < cols; i+) 84 85 Gizmos.DrawLine(new Vector3
7、(i*GridSize,0,0),new Vector3(i*GridSize,rows*GridSize,0) ); 86 87 88 for (int j = 0; j < rows; j+) 89 90 Gizmos.DrawLine(new Vector3(0,j * GridSize, 0), new Vector3(cols * GridSize, j * GridSize, 0); 91 92 93 94 /D使用unity默认的OnDrawGizmos方法来绘制Gzimos 95 private void OnDrawGizmos() 96 97 Color oldCol
8、or = Gizmos.color;/修改的这些属性都是静态属性,所以要在修改前保存其值,修改后再复原,防止后续使用该静态属性是修改后的 98 Matrix4x4 oldMatrix = Gizmos.matrix;/修改的这些属性都是静态属性,所以要在修改前保存其值,修改后再复原,防止后续使用该静态属性是修改后的 99 Gizmos.matrix = transform.localToWorldMatrix;/该语句可以为gizmos提供该transform位移,旋转,缩放等特性100 101 Gizmos.color = _normalColor;102 GridGizmos(_total
9、Columns,_totalRows);103 GridFrameGizmo(_totalColumns,_totalRows);104 105 Gizmos.color = oldColor;/恢复修改后的静态属性106 Gizmos.matrix = oldMatrix;/恢复修改后的静态属性107 108 109 private void OnDrawGizmosSelected()110 111 Color oldColor = Gizmos.color;112 Matrix4x4 oldMatrix = Gizmos.matrix;113 Gizmos.matrix = transf
10、orm.localToWorldMatrix;114 115 116 Gizmos.color = _selectedColor;117 GridFrameGizmo(_totalColumns, _totalRows);118 119 Gizmos.color = oldColor;120 Gizmos.matrix = oldMatrix;121 122 123 124 / <summary>125 / 将世界坐标转换为grid网格中的点坐标126 / </summary>127 / <param name=point>世界坐标</param>
11、;128 / <returns></returns>129 public Vector3 WordToGridCoordinates(Vector3 point)130 131 Vector3 gridPoint=new Vector3(int)(point.x-transform.position.x)/GridSize),(int)(point.y-transform.position.y)/GridSize),0.0f);132 return gridPoint;133 134 135 / <summary>136 / Grid网格中的位置转换为世界坐
12、标坐标137 / </summary>138 / <param name=col>行值</param>139 / <param name=row>列值</param>140 / <returns></returns>141 public Vector3 GridToWordCoordinates(int col,int row)142 143 Vector3 wordPoint=new Vector3(transform.position.x+(col*GridSize/2.0f),transform.posi
13、tion.y+(row*GridSize/2.0f),0.0f);144 return wordPoint;145 146 / <summary>147 / 坐标位置是否在网格边界内148 / </summary>149 / <param name=point></param>150 / <returns></returns>151 public bool IsInsideGridBounds(Vector3 point)152 153 float minX = transform.position.x;154 float
14、 maxX = minX + _totalColumns*GridSize;155 float minY = transform.position.y;156 float maxY = minY + _totalRows*GridSize;157 return (point.x >= minX && point.x <= maxX && point.y >= minY && point.y <= maxY);158 159 160 / <summary>161 / 坐标位置是否在网格边界内162 / </summary>163 / <param name=point></param>164 / <returns></returns>165 166 public bool IsInsideGridBounds(int col,int row)167 168 return (col>=0&&col<_totalColumns&&row>=0&&row<=_totalRows);16
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1