牧师与恶魔——动作分离版
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
来管理,而游戏事物的信息、状态等都由Role
和Boat
来管理。比如游戏角色(牧师和恶魔)上下船的动作,由Fristcontroller
与Action
进行通信,让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);}}}
}
牧师与恶魔——动作分离版相关推荐
- Unity3D游戏编程-牧师与恶魔 动作分离版
Unity3D游戏编程-牧师与恶魔 动作分离版 文章目录 Unity3D游戏编程-牧师与恶魔 动作分离版 作业要求 项目配置 项目演示 视频演示 项目下载 文字说明 项目截图 实现过程和方法(算法) ...
- 用Unity3D实现简单的牧师与魔鬼游戏(动作分离版)
用Unity3D实现简单的牧师与魔鬼游戏(动作分离版) 项目地址 牧师与魔鬼游戏(动作分离版) 完成效果图 上次博客链接 牧师与魔鬼游戏 实现心得 这次作业是在上次作业的基础上完成的,具体做出的改变是 ...
- 牧师与魔鬼——动作分离版
牧师与魔鬼--动作分离版 在上周的作业中,牧师与魔鬼游戏中的各个事件,都是写在Director中,并且都是继承Monobehavior的.在这周动作分离的设计中,我将上船.下船以及船的移动都分离出来. ...
- unity编程实践-牧师与魔鬼动作分离版
作业要求 牧师与魔鬼 动作分离版 [2019开始的新要求]:设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束 目标:建立动作管理器,使动作抽象出来,可以应用到任何游戏对象上,以此提高代码复 ...
- 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版
[3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...
- 牧师与魔鬼 动作分离版
1.基本操作演练 下载 Fantasy Skybox FREE 在unityAssetStore中下载Fantasy Skybox FREE 构建游戏场景: GameObject->3D Obj ...
- Unity实现牧师与魔鬼动作分离版
牧师与魔鬼动作分离版 项目地址 动作管理器的设计 程序设计框架: 为了用一组简单的动作组合成复杂的动作,我们采用 cocos2d 的方案,建立与 CCAtion 类似的类. 通过门面模式(控制器模式) ...
- 基于Unity开发的牧师与魔鬼动作分离版游戏设计
1 作业要求 牧师与魔鬼 动作分离版 设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束 2 实现细节 在原来代码的基础上,修改如下: 将UserGUI的sign成员变量和Controlle ...
- unity3d 牧师与恶魔动作分离
贴一个github地址 https://github.com/ddghost/unity3d/tree/master/unity%20hw3 实现牧师与魔鬼的动作分离 按照老师给的层次进行改进 刚开始 ...
最新文章
- 不是我吹,这个idea插件你真没用过!
- dotnet调用node.js写的socket服务(websocket/socket/socket.io)
- Python使用matplotlib可视化时间序列季节图、使用季节图可以比较不同年份相同月份的数据差异、或者相同(年/月/周等)的时间序列在同一天的数据差异(Seasonal Plot)
- 什么是分布式计算系统?—Vecloud微云
- 水壶问题 算法导论8.4
- 140个Google面试问题
- S3C6410 时钟初始化
- Java多线程学习四十二:有哪些解决死锁问题的策略和哲学家就餐问题
- Wolfram Mathematic流程控制
- CacheCloud安装配置
- python在excel中的应用:freeze_panes冻结不是第一行的问题,其实可能是一个小细节。
- 蛙蛙推荐:蛙蛙教你发明一种新语言之二--代码生成
- IT行业岗位以及发展方向
- 黑马程序员 jQuery
- android导入ssl证书,Android和SSL证书加载
- 读书笔记-人月神话19
- Vector CANoe 更改帧的调度表的顺序
- Flex Builder3调试运行提示没有安装Flash Player
- java dwr_【Java】dwr的使用方法
- RV系列蜗轮蜗杆减速机使用与保养