Unity——空间与运动

    科技2022-08-23  98

    空间与运动

    项目地址

    游戏事物

    主要的三个事物为:

    牧师魔鬼船

    次要的三个事物为:

    岸水流天空

    游戏规则表

    动作发生条件牧师或魔鬼上船船上人数少于两人船的移动船上人数不为零游戏胜利所有牧师与魔鬼到达对岸游戏失败某一时刻某侧魔鬼数量比牧师多牧师或魔鬼上岸只要游戏尚未结束均可进行

    代码中的新知识

    由于初次接触3D编程,遇到的困难很多,因此参考了以往师兄师姐的代码,通过先大概理解代码意思和相关接口然后再自己修改里面参数和结构的方式,完成了本次编程实践。

    导演Director

    利用静态变量的控制,保证导演是唯一的,负责场景初始化时控制对应场景的场记。

    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; } }

    MVC规则

    题目要求使用MVC结构编程, MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。因此使用一个命名空间管理这些接口。

    public interface SceneController { void loadResources (); } public interface UserAction { void moveBoat(); void characterIsClicked(MyCharacterController characterCtrl); void restart(); }

    上述两个接口都储存在同一命名空间下。

    资源的动态加载

    将做成预制的资源加载到游戏中,使用第二节提到的Instantiate加载预制对象即可。

    public void loadResources() { GameObject water = Instantiate (Resources.Load ("Perfabs/Water", typeof(GameObject)), water_pos, Quaternion.identity, null) as GameObject; water.name = "water"; fromCoast = new CoastController ("from"); toCoast = new CoastController ("to"); boat = new BoatController (); loadCharacter (); }

    鼠标点击事件的响应

    这是本次编程实践的一个新知识点,这是利用C#的OnMouseDown() 方法,使得鼠标左键点击下去的时候对应物品的事件会被触发,例如下方代码的意思就是如果点击的是船,那么会调用moveBoat方法,检验船是否能被移动,在满足条件的情况下移动船。如果点击的物品是牧师或者魔鬼,那么将会检测船上是否有空位或者是否是要把物品移到岸上还是船上,并在满足条件时执行对应的操作。

    void OnMouseDown() { if (gameObject.name == "boat") { action.moveBoat (); } else { action.characterIsClicked (characterController); } }

    船的移动动画

    这里可以调用Vector3的自带函数MoveTowards (float current, float target, float maxDelta)) ,即将值 current 向 target 靠近,速度为maxDelta。

    运行结果

    Processed: 0.008, SQL: 10