刚刚看完视频整个人都不好了,讲视频的小姐姐可能做这个游戏不熟练,一直在颠三倒四的说话,我看的很辛苦,还有一些动画制作,虽然是小动画,只更改alpha值或者只更改锚点位置,但由于这节课的button太多了就有点繁琐,可这节课还是很有意思的,比如
1.我知道了怎么重新加载游戏
2.怎么暂停游戏
3.怎么由暂停界面恢复到游戏界面
虽然不懂得原理,但也可以应用到其他场景中去,很是开心~
首先呢,要先设置输赢界面的鼠标点击事件,比如home键和retry键,这里的代码我们就在GameManager里面写,首先引入一个新的using UnityEngine.SceneManagement;
public void Retry()
{
SceneManager.LoadScene(2);
}
这里为什么是2的原因就在于我们一开始不是设了三个场景00 01 02,打开file——buildsetting里面将三个场景按顺序拖过去,Scene像数组一样是从0开始计数的,因此游戏场景我们设的game是02最后一个,这样我们代码写完了就可以给鼠标注册点击事件,记得给image添加button组件
后来运行游戏的时候发现,分数有时候会被小猪遮挡住,这时候我们给分数新增一个图层叫UI层,每次新的的图层下面一层都会比上面一层的等级高
最后也是最繁琐的一步,视频里面整整讲了20分钟颠三倒四的。。。
我们要为pausepanel新增一个脚本,而不是写在Gamemanager中了,这是因为如果我们点击暂停按钮,但是动画还没有播完就很影响游戏体验,我们想摁了暂停按钮之后我们让动画播完然后再使游戏画面暂停
新建一个PausePanel脚本
依旧是Retry Home 和pause但这个pause是一开始一直在游戏界面的pause我们的意思是摁了pause界面就弹出background界面和在background界面的image界面
我们首先选中pausepanel的动画状态机,
将默认界面改成NewState,然后使newstate连pause,使pause连resume,然后resume连newstate
为了使连线有条件,我们设置一个bool类型变量isPause,然后不勾选,默认为false,将1的condition改成isPause=true,2的条件改成isPause=false,然后3不设置条件,但是我们运行之后发现resume动画不执行了,我突然记起来好像视频里面瞎改了一个地方也说试试但后来没有取消,就是3虽然不设置条件,但是要勾选has exit time,我去网上查了查,是这么解释的:
还有一种情况时,当我当前的动画播放完毕后就自动转换到箭头所指的下一个状态(没有其他跳转条件),此时必须勾选该选项,否则动画播放完毕后就会卡在最后一帧,如果是循环动画就会一直循环播放。
改了之后在动画状态机上就可以正确运行了
但是在game上没有显示正确的动画,摁下ctrl+6打开PausePanel的动画面板,发现前面添加的resume和pause动画都显示missing了,我觉得可能是因为要把PausePanel面板一直显示在场景中,所以更改了他的alpha值=0,将里面的image面板挪到画布外面去使动画乱了,当然也没有道理我也不知道为什么,但是又重新改了一遍
将pause动画改成alpha值从0到0.5,position从-474到-352,resume动画相反,随后就可以了,记得将所有动画的loop都取消,所有有条件的动画的has exit time去掉。
至于怎么样才能在动画播完之后暂停游戏界面呢?就是在pause动画的最后一帧新建一个事件,直接调用Pause方法(错误不是调用pause方法),resume是同样的方式
在PausePanel脚本中我们写了四个主要方法
Pause()
Resume()
PauseAnimatorEnd()
ResumeAnimatorEnd()
一开始教学视频是教在Pause()方法里写Time.timescale=0;可以将游戏暂停下来,但这里其实逻辑错了,因为我们一开始确定的是Pause()方法是我们点击pause按钮的时候触发的方法,也就是说我们点击了pause按钮之后,使pause动画会执行,pause动画执行的条件是isPause=true;(使isPause=true的代码是先在变量声明获取动画组件然后在pause方法里写anim.SetBool(“isPause”,true))
然后在动画结束的最后一帧,调用PauseAnimatorEnd()方法,在这个方法里面写游戏暂停代码也就是Time.timescale=0;
但是在resume方法里有些例外,因为我们如果把游戏开始代码Time.timescale=1;写在ResumeAnimatorEnd()方法里的话,当我们点击resume按钮的时候是不能播放动画的,因此我们必须在resume方法里就恢复游戏开始,这里就涉及了一个问题,因为我一开始把暂停界面的button关联了GameManager里面的replay()方法,结果发现点击了暂停出现暂停页面之后点击retry按钮页面回到了初始页面但是点击了pause按钮之后没有出现暂停页面,我一开始以为是因为没有点击resume按钮所以出问题了,所以就把retry按钮的button组件取消了,等着后续的教学
但是后来视频中讲把retry方法写成和gameManager里面replay一样的代码然后加一条使游戏继续的Time.timescale=1的方法我就有点疑惑,这样的话能行么?后来发现是可行的,我一开始使用gameManager里面replay方法,点击了pause按钮没有出来暂停面板是因为动画停止了,所以没有动画但是Time.timescale=1不能暂停ui组件,因此我点击pause按钮他还是会消失
angrybird鼠标点击事件
最新推荐文章于 2020-09-25 10:16:58 发布