Unity3D项目:牧师与魔鬼

基本介绍

  • 玩家动作表(游戏规则表):
动作条件结果
在船上点击角色游戏未结束角色上到最近的岸上
在岸上点击角色游戏未结束,角色与船在同一个岸边角色上船
点击船游戏未结束,船上至少有一个角色船从一个岸边移动到另一个岸边
点击restart游戏初始化
  • 游戏的预制体有(有些是从官网下载的模型):

  • 使用MVC结构程序        
  • 除了主摄像机和一个Empty对象,其它对象必须通过代码动态生成

项目资源

  • 视频

Priests-and-devils演示_哔哩哔哩bilibili

项目演示 

 

完成过程

  • UML图辅助表达对象设计

  • 代码实现

        BaseCode:包含导演类以及牧师、魔鬼、船等游戏对象的Controller和通信

        ClickGUI:鼠标点击事件的对象判断与动作结果,并显示游戏信息

        FirstController:游戏对象在Unity3D当中的初始化、移动事件的设置、游戏restart

        UserGUI:游戏状态的判断事件

  •  具体实现

        (SSD)irector:使用单例模式创建,继承于System.Object,不受Unity内存管理,负责控制当前场景的运行、切换、游戏对象通信、游戏的暂停恢复和退出等等。

    // BaseCode
    public class Director : System.Object {
		private static Director _instance;
		public SceneController currentSceneController { get; set; }

		public static Director getInstance() {
			if (_instance == null) {
				_instance = new Director ();
			}
			return _instance;
		}
	}

        SceneControllor:场景控制器的接口,导演使用这个接口与场景控制器沟通和加载资源。

    // BaseCode
    public interface SceneController {
		void loadResources ();
	}

        IUserAction:用户操作的接口,对应上文的动作表(规则表),是View与Controllor之间的桥梁。

    // BaseCode
    public interface UserAction {
		void moveBoat(); // 移动船
		void characterIsClicked(MyCharacterController characterCtrl); // 移动角色,在鼠标click后调用
		void restart(); // 游戏初始化
	}

        Moveable(BaseCode.cs中):控制移动,通过标志(1和2)来区分源地点和目的地并控制移动方向。使用Update来实现对象的运动。在使用控制器创建对象时会将该脚本挂载到需要运动的对象上。

        MyCharacterController(BaseCode.cs中):角色控制器,有用于区分牧师或恶魔的标志,使用了Moveable用于定位和移动。

        CoastController(BaseCode.cs中):陆地控制器,首先陆地有两块,所以需要标志是开始岸还是目的岸;而且陆地可以看作一个‘容器’,上面装了牧师和魔鬼(或许还可以装船),所以它有一系列空位置,用来放置角色。

        BoatController(BaseCode.cs中):船控制器,有区分两岸的标志,和陆地相似,但是多了一个移动的动作。

        ClickGUI(ClickGUI.cs中):响应鼠标点击事件。

        UserGUI(UserGUI.cs中):建立restart按钮和识别游戏当前状态并进行游戏初始化。

        FirstControllor:场景控制器,是该场景中所有游戏对象“动起来”的核心,使用底层控制器控制各个对象,实现上文中的所有接口供GUI和导演使用。

void Awake() //游戏初始化
public void loadResources() //场景加载
private void loadCharacter() //场景加载中角色的加载
public void moveBoat() //船的移动事件
public void characterIsClicked(MyCharacterController characterCtrl) //角色点击事件
check_game_over() //游戏状态检测
public void restart() //游戏初始化按钮

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值