拾荒者Unity2D游戏开发流程笔记

来源:互联网 发布:mac 恢复分区没了 编辑:程序博客网 时间:2024/04/28 04:01

1 拖入素材
动画和状态机分别整理进Animation和animatorcontroller文件夹
将敌人攻击动画,主角攻击、受伤动画拖入状态机
为各动画之间设置Trigger.

2 地图管理器,随机地图的生成(mapManager脚本控制)

    private Transform mapHolder;    mapHolder = new GameObject("Map"(父物体名称)).transform    .transform.SetParent(mapHolder);

生成父物体,管理随机生成的物体

墙,地板的生成
用数组存放随机生成选用的图片//public GameObject[] name;在视图面板里拖拽
rows,cols=10,行数,列数
for循环遍历

    for(int x = 0;x<cols;x++){for(int y = 0;y<rows;y++)}

用if判断墙生成的位置,生成墙数组中的一个随机索引,else生成墙壁

障碍物的生成

    private List<Vector2> positionList = new List<Vector2>();    positionList.Clear();    for(int x= 2;x<cols-2;x++){for(int y = 2;y<rows-2;y++)}{positionList.Add(new Vector2(x,y);)}

for循环遍历,然后再将遍历的坐标存进List中
障碍物个数,随机一个最小值到最大值(自己设置)
positionList.Count List中的个数
随机一个列表的索引赋值给一个位置,再.RemoveAt()删除该索引
随机获取一个障碍物的图片
为地板设置Layer放在障碍物的下面

食物生成 2-5
for 循环遍历食物数量,为其随机设置位置,随机从贴图数组获取贴图

创建敌人 level/3
for 循环遍历敌人数量,为其随机设置位置,随机从贴图数组获取贴图

创建出口

创建主角

3 封装一下代码

4 完善动画状态机
HasExitTime(动画播放完毕后才进行切换)
Durationtime 0 (切换的时长)

5 主角移动的控制 (playerController脚本控制)
通过刚体控制
添加碰撞器
Input.GetAxisRaw(“Horizontal”) 该方法返回一个横向的向量

rigidbody2d.Moveposition(rigidbody2d.position+targetpos*speed*Time.deltaTime)

6 主角对墙体的攻击
为外墙和障碍物设定碰撞器

RaycastHit2D name = Physics2D.Linecast(startposition,startposition+vector2(h,v)//目标方向)
name.transform 为null,则没有碰撞到//禁用主角自己身的collider(监测碰撞时)//`collider.enable = false;`
    switch(hit.collider.tag){    case"tag1":break;    case"tag2":break;    }

单独用一个bar脚本控制墙体的收到攻击,为墙体设置血量,
hit.collider.SendMessage(方法名)
收到攻击时Sprite设置图片
播放主角攻击的动画

    animator.SetTrigger("name")

7 主角吃食物
为食物设置触发器(主角可以吃,僵尸不能吃)
GameManager脚本里添加增加食物和减少食物的方法

8 控制敌人的移动
通过刚体控制
offset.magnitude > 1时两物体相邻
Mathf.Abs()取绝对值
判断敌人与主角的偏移决定敌人的移 动
敌人每次要么攻击要么移动
在GameManager里写敌人移动的方法用if判断每过1秒敌人走一步

9 控制敌人的攻击
得到敌人动画组件
animator.SetTrigger(“name”)

10 食物数量UI显示
初始化UI内容

11 控制游戏的失败
食物小于0,主角死亡,if语句判断不进行移动操作。
UI显示进行修改

12 胜利判断
监测主角是否到达终点,每次移动监测 主角坐标是否等于终点坐标
到达终点,以及食物吃完,主角都不应该再移动

13 关卡的加载

    SecneManager.LoadScene(SceneManager.GetActiveScene().name//重新加载本关卡    OnLevelWasLoaded(int scenelevel){    level++    }
DontDestroyOnLoad()//关卡加载时不销毁GAMEMANAGER,并且不创建新的GAMEMANAGER
在摄像机上添加LOADER脚本,实例化GAMEMANAGER(当INSTANCE等于空时)每次加载关卡都初始化

14 天数的UI
Invoke(方法,int(经过几秒调用)

15 给游戏添加音乐

原创粉丝点击