Priests and Devils ——动作分离版

完整工程文件在github(https://github.com/JennySRH/3DGame/tree/master/PriestsAndDevils2)

游戏视频https://www.bilibili.com/video/av68091576

在之前的牧师与恶魔的游戏制作中,我们使用FirstController来控制游戏中人物的动作,这样写出了的代码低内聚高耦合。在这里,我们对上一版的牧师与恶魔进行更新迭代,将动作从FirstController中分离出来,减少程序的耦合提高内聚性。

我们首先创建一个类Action用来管理所有游戏事物的动作,然后在FirstController中创建这个类的实例,用来管理游戏事物的运动。

    public Action actionManager;   //动作管理

在这个版本中,游戏事物的所有动作都由Action来管理,而游戏事物的信息、状态等都由RoleBoat来管理。比如游戏角色(牧师和恶魔)上下船的动作,由FristcontrollerAction进行通信,让Action来管理动作的改变,同时告知Role进行状态的改变。

FirstController的代码如下所示:

if(obj.position == 0 && obj.position == boat.position && boat.num < 2)
{boat.num++;if(boat.BoatState[0] == 0){// 更改modelobj.getBoat(1);// 更改动作actionManager.getBoat(obj, 1);boat.BoatState[0] = MapName(name);}else{obj.getBoat(2);actionManager.getBoat(obj, 2);boat.BoatState[1] = MapName(name);}
}

Action中的相关代码如下所示:

    public void getBoat(Role role, int i){if (i == 1){role.character.transform.position = new Vector3(0, -3, 4);}else if (i == 2){role.character.transform.position = new Vector3(0, -3, 6);}else if (i == 3){role.character.transform.position = new Vector3(0, -3, -4);}else{role.character.transform.position = new Vector3(0, -3, -6);}}

Role中的相关代码如下所示:

    public void getBoat(int i){position = 2;if (i == 1){boatPos = 0;}else if(i == 2){boatPos = 1;}else if(i == 3){boatPos = 1;}else{boatPos = 0;}}

其余的更改基本跟上下船相同,Action类代码如下所示。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Action
{public void GetBoat(Role role, int i){if (i == 1){role.character.transform.position = new Vector3(0, -3, 4);}else if (i == 2){role.character.transform.position = new Vector3(0, -3, 6);}else if (i == 3){role.character.transform.position = new Vector3(0, -3, -4);}else{role.character.transform.position = new Vector3(0, -3, -6);}}public void MoveToOrigin(Role role){role.character.transform.position = role.origin;}public void MoveToDest(Role role){role.character.transform.position = role.dest;}Role MapNumToRole(int num, Role []Priests, Role []Devils){Role tmp = null;if (num < 4 && num > 0){tmp = Priests[num - 1];}else if (num >= 4 && num <= 6){tmp = Devils[num - 4];}return tmp;}public void MoveBoat(Boat boat, Role[] Priests, Role[] Devils){// 船移动Vector3 Current = boat.thisboat.transform.position;Vector3[] Target = { new Vector3(0, -3, -5), new Vector3(0, -3, 4) };Vector3 tar = Target[boat.movestate - 1];int a = boat.movestate - 1;if (Current == tar){boat.movestate = 0;}boat.thisboat.transform.position = Vector3.MoveTowards(Current, tar, 8f * Time.deltaTime);Vector3[,] targets = {{ new Vector3(0, -3, -5), new Vector3(0, -3, -6) },{ new Vector3(0, -3, 5), new Vector3(0, -3, 6) }};for (int i = 0; i < 2; i++){int b = i;Role r = MapNumToRole(boat.BoatState[i], Priests, Devils);if (r != null){Vector3 cur = r.character.transform.position;r.character.transform.position = Vector3.MoveTowards(cur, targets[a, b], 8f * Time.deltaTime);}}}
}

牧师与恶魔——动作分离版相关推荐

  1. Unity3D游戏编程-牧师与恶魔 动作分离版

    Unity3D游戏编程-牧师与恶魔 动作分离版 文章目录 Unity3D游戏编程-牧师与恶魔 动作分离版 作业要求 项目配置 项目演示 视频演示 项目下载 文字说明 项目截图 实现过程和方法(算法) ...

  2. 用Unity3D实现简单的牧师与魔鬼游戏(动作分离版)

    用Unity3D实现简单的牧师与魔鬼游戏(动作分离版) 项目地址 牧师与魔鬼游戏(动作分离版) 完成效果图 上次博客链接 牧师与魔鬼游戏 实现心得 这次作业是在上次作业的基础上完成的,具体做出的改变是 ...

  3. 牧师与魔鬼——动作分离版

    牧师与魔鬼--动作分离版 在上周的作业中,牧师与魔鬼游戏中的各个事件,都是写在Director中,并且都是继承Monobehavior的.在这周动作分离的设计中,我将上船.下船以及船的移动都分离出来. ...

  4. unity编程实践-牧师与魔鬼动作分离版

    作业要求 牧师与魔鬼 动作分离版 [2019开始的新要求]:设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束 目标:建立动作管理器,使动作抽象出来,可以应用到任何游戏对象上,以此提高代码复 ...

  5. 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版

    [3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...

  6. 牧师与魔鬼 动作分离版

    1.基本操作演练 下载 Fantasy Skybox FREE 在unityAssetStore中下载Fantasy Skybox FREE 构建游戏场景: GameObject->3D Obj ...

  7. Unity实现牧师与魔鬼动作分离版

    牧师与魔鬼动作分离版 项目地址 动作管理器的设计 程序设计框架: 为了用一组简单的动作组合成复杂的动作,我们采用 cocos2d 的方案,建立与 CCAtion 类似的类. 通过门面模式(控制器模式) ...

  8. 基于Unity开发的牧师与魔鬼动作分离版游戏设计

    1 作业要求 牧师与魔鬼 动作分离版 设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束 2 实现细节 在原来代码的基础上,修改如下: 将UserGUI的sign成员变量和Controlle ...

  9. unity3d 牧师与恶魔动作分离

    贴一个github地址 https://github.com/ddghost/unity3d/tree/master/unity%20hw3 实现牧师与魔鬼的动作分离 按照老师给的层次进行改进 刚开始 ...

最新文章

  1. 不是我吹,这个idea插件你真没用过!
  2. dotnet调用node.js写的socket服务(websocket/socket/socket.io)
  3. Python使用matplotlib可视化时间序列季节图、使用季节图可以比较不同年份相同月份的数据差异、或者相同(年/月/周等)的时间序列在同一天的数据差异(Seasonal Plot)
  4. 什么是分布式计算系统?—Vecloud微云
  5. 水壶问题 算法导论8.4
  6. 140个Google面试问题
  7. S3C6410 时钟初始化
  8. Java多线程学习四十二:有哪些解决死锁问题的策略和哲学家就餐问题
  9. Wolfram Mathematic流程控制
  10. CacheCloud安装配置
  11. python在excel中的应用:freeze_panes冻结不是第一行的问题,其实可能是一个小细节。
  12. 蛙蛙推荐:蛙蛙教你发明一种新语言之二--代码生成
  13. IT行业岗位以及发展方向
  14. 黑马程序员 jQuery
  15. android导入ssl证书,Android和SSL证书加载
  16. 读书笔记-人月神话19
  17. Vector CANoe 更改帧的调度表的顺序
  18. Flex Builder3调试运行提示没有安装Flash Player
  19. java dwr_【Java】dwr的使用方法
  20. RV系列蜗轮蜗杆减速机使用与保养

热门文章

  1. WorldRemit确定2020年20项重大移民成就
  2. 4.24随笔(美蜜代码漏洞以及Java9)
  3. 顶级物理引擎商HavokCEO将来华演讲CGDC
  4. (完全详解)JavaScript 添加、复制、移除、移动、创建和查找节点
  5. 这个Github宝藏仓库竟然收藏了这么多好东西?
  6. 25条提高SQL运行效率的方式
  7. java 可变参数传值
  8. 原生JavaScript实现树的深度遍历
  9. Android使用被动刷新SurfaceView
  10. 《剑指Java面试-Offer直通车》--计算机网络