跟着刘国柱老师的视频学了几课,收获还是很多的,决定开个坑来记录一下。
一.游戏的策划部分
主要功能:
1.一个主人公,在地图上快速奔跑,躲避障碍物。(碰到障碍物即结束或受到惩罚)
2.道路上有金币,宝石等奖励或加成道具,在游戏结束后会有统计
3.开始和结束界面(难度选择,计分系统)
4.特殊道具反映在角色身上(加速,短时间无敌,吸收金币等)
拓展,增强需求:
1.增加竞争对手,或设计排名系统
2.动态(随机)生成道具
3.Android移植,加入重力感应
4.添加其他动作…
要点:
开发不能头铁直接开项目想到哪写到哪里,要先分析需求记录下来,初步想好有哪些功能以及相应的实现方法。
二.游戏制作部分
(一)构建好资源框架
1.首先要分类建立好相应的文件夹,一个游戏一般都需要resource,_scenes,_scripts,prefabs(带有“”下划线的文件夹一般代表里面的东西是自己写或制作的)等文件夹来装一些类型,目的相似的资源,使导入的或自己创建的资源看起来不乱,条理清晰,达到事半功倍的效果。
2.对于每一个可能与游戏,主人公产生交互的物体(包括摄像机,场景等)最好都先各建一个相应的manager脚本,放在自己创建的_scripts文件夹里面。
3.导入资源。把场景,人物,物品,材质,GUI等资源分别放到对应的文件夹里。
4.改变图形类型:某些用于GUI的图片类型是default,且是经过了压缩的,需把type改成legacy GUI类型的,背景会自动被处理掉,且会还原到原图的分辨率。
(二)本日内容:开始界面的动画
目标:制作一个场景,使主人公一直在道路上走,等待开始游戏的命令。
1.把相应的道路,人物模型加入到场景里。
(需要调整比例尺,道路大小为1,1,1,以此来调整人物的大小,可以建一个3D Cube来比对一下,使人物,场景的大小合适)
2.道路模型一般只有一段,需要加长,把几个道路模型接在一起,加到一个空的GameObject里,再把这个GameObject编为一个预制体prefab,便于使用。
3.设置人物动画
(只需要人物走动的动画,在Animation里找到相应的动画片段截取下来,命名为Walking)
4.调整摄像机
(先把摄像机reset,然后调整到合适的位置,与道路平齐,视角可以与xoz面成一个小角度)
5.实现人物在路上一直走的方法
这里的想法是:人不动,路动。把人物固定,编写脚本使道路在一个范围内平移
于是创建一个StartSceneManager脚本放在_Scripts里,分析可知:需要一个Vector3来记录路的初始位置,两个GameObject来放人物和道路,一个float变量来控制移动的速度。(由于我的Unity是2017的,教程上的动画控制方法在新版本已经弃用,所以还需要一个animation对象,获取到人物的animation组件来控制动画的播放)
于是有定义:
public GameObject GoHugeBridge;
public GameObject GoHero;
public Animation HeroAnime;
public float FloBridgeMoveSpeed=1f;
private Vector3 VecHugeBridgeOriginal;
public string HeroWalkingAnimeName = "walking";//这是用变量来存动画的名称,方便进行动画的改变
初始化:把桥的初始位置付给vector3,并得到animation组件
VecHugeBridgeOriginal = GoHugeBridge.transform.position;
HeroAnime = GoHero.GetComponent<Animation>();
然后写桥移动的代码:
GoHugeBridge.transform.Translate(Vector3.back * FloBridgeMoveSpeed, Space.World);
动画播放的代码:
HeroAnime.Play(HeroWalkingAnimeName);
这几段基本上算是核心代码了,但运行就会知道摄像机画面里,桥还不够长,因此要想办法让桥是无限延伸的(至少看起来是无限延伸的),于是要将桥在合适的位置复位,可以用Debug来显示桥的位置,再播放观察,不断调整:
Debug.Log("z=" + GoHugeBridge.transform.position.z);
找到合适的位置后记录下来,并在达到这个位置的时候使桥恢复原位就行了。(之前记录过道路的原位置)
附上整个脚本的内容:
以上。明天继续