果图
具体细节,我会在后续补上我的工程文件,方便你的仔细研究,并且方便大家给我提提意见,本菜鸟当然是感激不尽!
和
脚本就不讲解了,欢迎大家留言,我尽量让希望从中获取自己想要的效果的同学理解以及大牛们指出的不足之处我都会尽量回复。
一、简单介绍一下我做的玩意的功能。
如上图,是一个操作的界面。首先,字当然不能一下就出来了,那样太生硬了点。我这边是让字一个接一个的出现的,类似一个字幕一样的!然后,随便点击上面的黑字,按下之后就会变成黄色的,之后就保持这个这个黄色的状态,并且,这个字就不能再按。按下一个字后,字就会自动从相应的字的位置,动画效果移动并且填充到下面的框里面。下面的框会随着点击的字自动依次填充,知道最后一个框被填充。这个时候会有一个判断,是否这四个框的字是我预先设下的。
二、内容
首先当然要有一个NGUI的插,我使用的是NGUI3.4.9版本的,然后就是简单的制作我们的逻辑界面,如图,创建一个UI-Root2D,在里面创建一个panelMyscreen面板容器,下面分别有四个分面板PanelColumn,PanelFailure,PanelPoem,PanelSucceed。其中,PanelFailure和PanelSucceed两个面板逻辑上
最后是PanelPoem,这个面板里面是一个20个字的一首诗。
三、脚本
这里主要用到的脚本出了NGUI自带的脚本之外,还额外使用了一个iTween的脚本,这个脚本主要是实现填充字会有一个从点击的字位置移动到框里面的动画效果。
自己写的脚本就两个,
[code]csharpcode:
01 | using UnityEngine; |
02 | using System.Collections; |
03 |
04 | public class Poem : MonoBehaviour { |
05 | public GameObject last; |
06 | bool isFirst; |
07 | Vector3 startSize= new Vector3(); |
08 | float timeCount; |
09 | // Use this for initialization |
10 | void Awake() |
11 | { |
12 | startSize= this .gameObject.transform.localScale; |
13 | } |
14 | void Start () { |
15 | TweenAlpha.Begin ( this .gameObject,0,0); |
16 | TweenScale.Begin ( this .gameObject,0, new Vector3(0,0,0)); |
17 | isFirst= true ; |
18 | } |
19 | |
20 | // Update is called once per frame |
21 | void Update () { |
22 |
23 | if (isFirst&&last.transform.localScale.x>0|| this .gameObject.name.Equals ( "imgBtn11" )) |
24 | { |
25 | timeCount+=Time.deltaTime; |
26 | if (timeCount>0.3f) |
27 | { |
28 | TweenAlpha.Begin ( this .gameObject,0.2f,1); |
29 | TweenScale.Begin ( this .gameObject,0.2f,startSize); |
30 | isFirst= false ; |
31 | } |
32 | } |
33 | } |
34 | } |
[code]csharpcode:
001 | using UnityEngine; |
002 | using System.Collections; |
003 |
004 | public class Level02_2NGUIControl : MonoBehaviour { |
005 | public UIAtlas poem; |
006 | public UISprite SpriteFour; |
007 | public UISprite SpriteOne; |
008 | public UISprite SpriteThree; |
009 | public UISprite SpriteTwo; |
010 | public GameObject PanelFailure; |
011 | public GameObject PanelSucceed; |
012 | public AudioSource failureSound; |
013 | public AudioSource succeedSound; |
014 | Vector3 panelFailureScale= new Vector3(); |
015 | Vector3 paneSucceedScale= new Vector3(); |
016 | void Start() |
017 | { |
018 | panelFailureScale=PanelFailure.gameObject.transform.localScale; |
019 | PanelFailure.gameObject.transform.localScale= new Vector3(0,0,0); |
020 | paneSucceedScale=PanelSucceed.gameObject.transform.localScale; |
021 | PanelSucceed.gameObject.transform.localScale= new Vector3(0,0,0); |
022 | } |
023 | void Update() |
024 | { |
025 |
026 | } |
027 | void SetPanelColumnSprite( string spriteName,Vector3 pos) |
028 | { |
029 | if (SpriteOne.atlas== null ) |
030 | { |
031 | SpriteOne.atlas=poem; |
032 | SpriteOne.spriteName=spriteName; |
033 | iTween.MoveFrom (SpriteOne.gameObject,pos,0.3f); |
034 | //iTween.MoveFrom (SpriteOne.gameObject,iTween.Hash ("x",pos.x,"time",0.3f,"delay",0)); |
035 | return ; |
036 | } |
037 | else if (SpriteTwo.atlas== null ) |
038 | { |
039 | SpriteTwo.atlas=poem; |
040 | SpriteTwo.spriteName=spriteName; |
041 | iTween.MoveFrom (SpriteTwo.gameObject,pos,0.3f); |
042 | return ; |
043 | } |
044 | else if (SpriteThree.atlas== null ) |
045 | { |
046 | SpriteThree.atlas=poem; |
047 | SpriteThree.spriteName=spriteName; |
048 | iTween.MoveFrom (SpriteThree.gameObject,pos,0.3f); |
049 | return ; |
050 | } |
051 | else if (SpriteFour.atlas== null ) |
052 | { |
053 | SpriteFour.atlas=poem; |
054 | SpriteFour.spriteName=spriteName; |
055 | iTween.MoveFrom (SpriteFour.gameObject,pos,0.3f); |
056 | if (SpriteOne.spriteName.Equals ( "c1_000001" )&&SpriteTwo.spriteName.Equals ( "c2_000101" ) |
057 | &&SpriteThree.spriteName.Equals ( "c3_000201" )&&SpriteFour.spriteName.Equals ( "c4_000301" )) |
058 | { |
059 | TweenScale.Begin (PanelSucceed,0.3f,paneSucceedScale); |
060 | succeedSound.Play (); |
061 | } |
062 | else |
063 | { |
064 | TweenScale.Begin (PanelFailure,0.3f,panelFailureScale); |
065 | failureSound.Play (); |
066 | } |
067 | } |
068 |
069 | } |
070 | void Clear() |
071 | { |
072 | SpriteOne.atlas= null ; |
073 | SpriteOne.spriteName= null ; |
074 | SpriteTwo.atlas= null ; |
075 | SpriteTwo.spriteName= null ; |
076 | SpriteThree.atlas= null ; |
077 | SpriteThree.spriteName= null ; |
078 | SpriteFour.atlas= null ; |
079 | SpriteFour.spriteName= null ; |
080 | for ( int i=0;i<imgBtn.Length;i++) |
081 | { |
082 | if (imgBtn[i]!= null ) |
083 | imgBtn[i].spriteName=imgBtnSpriteName[i]; |
084 | if (imgBtnBoxCollider[i]!= null ) |
085 | imgBtnBoxCollider[i].enabled= true ; |
086 | } |
087 | } |
088 | string [] imgBtnSpriteName= new string [20]; |
089 | UISprite[] imgBtn= new UISprite[20]; |
090 | BoxCollider[] imgBtnBoxCollider= new BoxCollider[20]; |
091 | void btnEventLister( int index, string btnName) |
092 | { |
093 | Vector3 pos= new Vector3(); |
094 | pos=GameObject.Find (btnName).transform.position; |
095 | /*动态加载脚本到对象中*/ |
096 | /*TweenAlpha s=GameObject.Find (btnName).AddComponent<TweenAlpha>(); |
097 | s.from=0.7f; |
098 | s.to=1.0f; |
099 | s.style=TweenAlpha.Style.PingPong;*/ |
100 | if (imgBtn[index]== null ) |
101 | { |
102 | imgBtn[index]=GameObject.Find (btnName).GetComponentInChildren<UISprite>(); |
103 | imgBtnSpriteName[index]=imgBtn[index].spriteName.Remove (imgBtn[index].spriteName.Length-1); |
104 | } |
105 | string temp=imgBtnSpriteName[index]+ "1" ; |
106 | SetPanelColumnSprite (temp,pos); |
107 | if (imgBtnBoxCollider[index]== null ) |
108 | { |
109 | imgBtnBoxCollider[index]=GameObject.Find (btnName).GetComponent<BoxCollider>(); |
110 | } |
111 | imgBtnBoxCollider[index].enabled= false ; |
112 | } |
113 | void imgBtn11nOnClik() |
114 | { |
115 | btnEventLister (0, "imgBtn11" ); |
116 | |
117 | } |
118 | void imgBtn12Onclik() |
119 | { |
120 | btnEventLister (1, "imgBtn12" ); |
121 | } |
122 | void imgBtn13Onclik() |
123 | { |
124 | btnEventLister (2, "imgBtn13" ); |
125 | } |
126 | void imgBtn14Onclik() |
127 | { |
128 | btnEventLister (3, "imgBtn14" ); |
129 | } |
130 | void imgBtn15Onclik() |
131 | { |
132 | btnEventLister (4, "imgBtn15" ); |
133 | } |
134 | void imgBtn21Onclik() |
135 | { |
136 | btnEventLister (5, "imgBtn21" ); |
137 | } |
138 | void imgBtn22Onclik() |
139 | { |
140 | btnEventLister (6, "imgBtn22" ); |
141 | } |
142 | void imgBtn23Onclik() |
143 | { |
144 | btnEventLister (7, "imgBtn23" ); |
145 | } |
146 | void imgBtn24Onclik() |
147 | { |
148 | btnEventLister (8, "imgBtn24" ); |
149 | } |
150 | void imgBtn25Onclik() |
151 | { |
152 | btnEventLister (9, "imgBtn25" ); |
153 | } |
154 | void imgBtn31Onclik() |
155 | { |
156 | btnEventLister (10, "imgBtn31" ); |
157 | } |
158 | void imgBtn32Onclik() |
159 | { |
160 | btnEventLister (11, "imgBtn32" ); |
161 | } |
162 | void imgBtn33Onclik() |
163 | { |
164 | btnEventLister (12, "imgBtn33" ); |
165 | } |
166 | void imgBtn34Onclik() |
167 | { |
168 | btnEventLister (13, "imgBtn34" ); |
169 | } |
170 | void imgBtn35Onclik() |
171 | { |
172 | btnEventLister (14, "imgBtn35" ); |
173 | } |
174 | void imgBtn41Onclik() |
175 | { |
176 | btnEventLister (15, "imgBtn41" ); |
177 | } |
178 | void imgBtn42Onclik() |
179 | { |
180 | btnEventLister (16, "imgBtn42" ); |
181 | } |
182 | void imgBtn44Onclik() |
183 | { |
184 | btnEventLister (17, "imgBtn44" ); |
185 | } |
186 | void imgBtn43Onclik() |
187 | { |
188 | btnEventLister (18, "imgBtn43" ); |
189 | } |
190 | void imgBtn45Onclik() |
191 | { |
192 | btnEventLister (19, "imgBtn45" ); |
193 | } |
194 | void imgBtnFailureOnclik() |
195 | { |
196 | Clear (); |
197 | TweenScale.Begin(PanelFailure,0.3f, new Vector3(0,0,0)); |
198 | } |
199 | void imgBtnSucceedOnclik() |
200 | { |
201 |
202 | } |
203 | void returnMainScreen() |
204 | { |
205 |
206 |
207 | } |
208 |
209 | } |
工程下载网址 http://pan.baidu.com/s/1hqHt6ks
时间有限,先写到这把,最后给这个网站一个建议,博客没有看到有保持到草稿这个功能,不知是我没有看到还是本来就没有,觉得非常蛋疼就是写到一半,然后不小心关掉了网页,就可能要重新写。
转载自 http://www.unitymanual.com/blog-3579-586.html 博客