根据技能冷却的时间 求出每个三角形所需要的时间
2014-05-20 14:41
260 查看
转自:
基本思路 根据技能冷却的时间 求出每个三角形所需要的时间
根据流逝时间 获取当前操作的三角形索引
最终根据三角形索引进行 三角形顶点位移
代码如下,请根据注释来进行每一步的理解
基本思路 根据技能冷却的时间 求出每个三角形所需要的时间
根据流逝时间 获取当前操作的三角形索引
最终根据三角形索引进行 三角形顶点位移
代码如下,请根据注释来进行每一步的理解
[code]001 | using UnityEngine; |
002 | using System.Collections; |
003 |
004 |
005 | [ExecuteInEditMode] |
006 | [AddComponentMenu( "Ace/Skill/Mask" )] |
007 | public class MyMask : MonoBehaviour { |
008 |
009 | private MeshFilter meshFilter; |
010 |
011 | private Vector3[] verts = new Vector3[10]; |
012 | private float halfWidth = 0.5f; |
013 | private float halfHeight = 0.5f; |
014 | private float start; //开始时间 |
015 | private float total; //技能冷却时间 |
016 | private float once; |
017 | public Color color; |
018 |
019 | private bool play = false; |
020 |
021 | void Start () { |
022 | meshFilter=GetComponent<MeshFilter>(); |
023 | meshFilter.sharedMesh = new Mesh(); |
024 | ResetVertices(); |
025 | SetMeshVertices(meshFilter.sharedMesh); |
026 |
027 | setTriangles(meshFilter.sharedMesh); |
028 | setColor(meshFilter.sharedMesh); |
029 | startMovice(30); |
030 | } |
031 |
032 | void OnMouseUp() { |
033 | startMovice(60); |
034 | } |
035 |
036 | public void startMovice(float time) { |
037 | if (play) return ; |
038 | total = time; |
039 | once = total / 8; //这里用8个三角形 总时间算出每个三角形需要耗时 |
040 | renderer.enabled = true; //每次开始让描绘对象可见 |
041 | ResetVertices(); //每次开始重置顶点数据 |
042 | play = true; |
043 | } |
044 |
045 | private void ResetVertices() |
046 | { |
047 | verts[0] = new Vector3(0.0f, 0.0f, 0.0f); |
048 | verts[1] = new Vector3(0.0f, halfHeight, 0.0f); |
049 | verts[2] = new Vector3(halfWidth, halfHeight, 0.0f); |
050 | verts[3] = new Vector3(halfWidth, 0.0f, 0.0f); |
051 | verts[4] = new Vector3(halfWidth, -halfHeight, 0.0f); |
052 | verts[5] = new Vector3(0.0f, -halfHeight, 0.0f); |
053 | verts[6] = new Vector3(-halfWidth, -halfHeight, 0.0f); |
054 | verts[7] = new Vector3(-halfWidth, 0.0f, 0.0f); |
055 | verts[8] = new Vector3(-halfWidth, halfHeight, 0.0f); |
056 | verts[9] = new Vector3(0.0f, halfHeight, 0.0f); |
057 | } |
058 |
059 | // 设置Mesh顶点数据 |
060 | private void SetMeshVertices(Mesh mesh) |
061 | { |
062 | Vector3[] vertices = new Vector3[verts.Length]; |
063 | for (int i = 0; i < verts.Length; ++i) |
064 | { |
065 | vertices[i] = verts[i]; |
066 | } |
067 | mesh.vertices = vertices; |
068 | } |
069 |
070 | private void setColor(Mesh mesh) |
071 | { |
072 | Color[] colors = new Color[mesh.vertices.Length]; |
073 | for (int i = 0; i < colors.Length; ++i) |
074 | { |
075 | colors[i] = color; |
076 | } |
077 |
078 | mesh.colors = colors; |
079 | } |
080 |
081 | private void setTriangles(Mesh mesh) |
082 | { |
083 | mesh.triangles = new int[]{ |
084 | 0,1,2, |
085 | 0,2,3, |
086 | 0,3,4, |
087 | 0,4,5, |
088 | 0,5,6, |
089 | 0,6,7, |
090 | 0,7,8, |
091 | 0,8,9 |
092 | }; |
093 | } |
094 |
095 | // Update is called once per frame |
096 | void FixedUpdate() |
097 | { |
098 | if (!play) return ; |
099 | UpdateEffect(meshFilter.sharedMesh); |
100 | } |
101 |
102 | public void UpdateEffect(Mesh mesh) |
103 | { |
104 | float now = Time.time - start; |
105 | if (now >=total) { renderer.enabled = false; return ; } |
106 | // 更新顶点数据 |
107 | Vector3[] vertices = mesh.vertices; |
108 | float percent = (now % once) / once; // 每个三角面遮罩的百分比 |
109 | int index = (int)(now / once) + 1; // 当前修改的顶点索引 |
110 | for (int i = index; i >0; --i) |
111 | { |
112 | switch (index) |
113 | { |
114 | case 1: |
115 | vertices[i].x = halfWidth * percent; |
116 | break ; |
117 |
118 | case 2: |
119 | vertices[i].y = halfHeight - halfHeight * percent; |
120 | break ; |
121 |
122 | case 3: |
123 | vertices[i].y = -halfHeight * percent; |
124 | break ; |
125 |
126 | case 4: |
127 | vertices[i].x = halfWidth * (1 - percent); |
128 | break ; |
129 |
130 | case 5: |
131 | vertices[i].x = -halfWidth * percent; |
132 | break ; |
133 |
134 | case 6: |
135 | vertices[i].y = -halfHeight * (1 - percent); |
136 | break ; |
137 |
138 | case 7: |
139 | vertices[i].y = halfHeight * percent; |
140 | break ; |
141 |
142 | case 8: |
143 | vertices[i].x = -halfWidth + halfWidth * percent; |
144 | break ; |
145 | } |
146 | } |
147 |
148 | mesh.vertices = vertices; |
149 | } |
150 | } |
相关文章推荐
- 游戏技能冷却时间的图标绘制(转)
- Unity3D UGUI实现冷却时间的技能图标
- 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。
- 技能冷却时间的实现
- 仿IOS时间选择,五级联动,可以根据自己爱好进行修改(公司需要这样的,效果好)
- 每个Web开发者都需要具备的9个软技能
- 扇形技能冷却时间
- 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。
- 每个人都需要一些时间和自己在一起
- NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间
- <笔记><算法导论> 假设求解问题的算法需要f(n)毫秒,对下表中的每个函数f(n)和时间t,确定可以在时间t内求解的问题的最大规模n。
- 编程是一项需要时间来掌握的技能(Anders的经验)
- 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。
- <笔记><算法导论> 假设求解问题的算法需要f(n)毫秒,对下表中的每个函数f(n)和时间t,确定可以在时间t内求解的问题的最大规模n。
- bootstrap-datepicker限定可选时间范围 一、应用场景 实际应用中可能会根据日期字段查询某个日期范围内的数据,则需要对日期选择器可选时间进行限制, 如:开始时间不能大于结束时间,
- NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间
- c++ 根据文件的最后修改时间判断是否需要覆盖更新文件
- 根据日志统计出每个用户在站点所呆时间最长的前2个的信息
- 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类
- <仅是自己做笔记。。。系列-5>给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数,要求下排每个数都是先前上排那十个数在下排出现的次数。