3D游戏编程——与游戏世界交互

本文介绍了如何使用Unity 3D开发一个名为Hit UFO的鼠标打飞碟游戏。游戏包含多个round,每个round的飞碟具有随机属性。采用了单例模式和MVC结构设计,包括飞碟预设、导演类、控制器、UFO动作、飞碟工厂等组件。此外,还展示了如何利用Raycast检测鼠标点击并计算得分,以及创建自定义组件以实现不同飞碟的行为。
摘要由CSDN通过智能技术生成

HW5

1. 编写一个简单的鼠标打飞碟(Hit UFO)游戏

游戏内容要求:

  1. 游戏有 n 个 round,每个 round 都包括10 次 trial;
  2. 每个 trial 的飞碟的色彩、大小、发射位置、速度、角度、同时出现的个数都可能不同。它们由该 round 的 ruler 控制;
  3. 每个 trial 的飞碟有随机性,总体难度随 round 上升;
  4. 鼠标点中得分,得分规则按色彩、大小、速度不同计算,规则可自由设定。

游戏的要求:

  1. 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场景单实例的!具体实现见参考资源 Singleton 模板类
  2. 近可能使用前面 MVC 结构实现人机交互与游戏模型分离

游戏设计:

本次设计使用了单例模式和MVC模式,下面将按照实际设计的顺序来展示本次 Hit UFO 游戏的设计。

  1. 设计飞碟预设

由于U3D没有给我们提供飞碟的形状,所以我们只好自己设计。

我选择的方式是将一个圆球外面再套上一个圆盘,这样就做成了我们小时候印象中最经典飞碟的样子。由于我们需要给飞碟添上颜色,所以还需要给飞碟添上material组件。这就是我们的飞碟预设了。

在这里插入图片描述

在这里插入图片描述

  1. 设计Director

Director 的设计十分简单,使用单例模式。设置一个 Director类 的private static成员变量,并设置一个与之配套的 getInstance() 的成员函数。再设置一个 currentController 的成员变量就可以了。

public class Director : System.Object
{
    private static Director _instance;
    public Controller currentController { get; set; }
    public static Director getInstance()
    {
        if (_instance == null)
        {
            _instance = new Director();
        }
        return _instance;
    }
}
  1. 设计Controller

Controller 的设计也比较简单,它负责统筹各个组件之间的关系,所以在其中我们需要设置一下几个成员变量:_UFOfactory、__director、my_diskfactory ,并对其进行初始化、实例化。需要注意的是, _UFOfactory 采用的是单例模式。

public class Controller : MonoBehaviour
{
    public UFOFactory _UFOfactory;
    public Director _director;
    private GameObject my_diskfactory;
    void Awake()
    {
        Random.InitState((int)System.DateTime.Now.Ticks);
        my_diskfactory = new GameObject("Disk_Factory");
        my_diskfactory.AddComponent<UFOFactory>();
        _director = Director.getInstance();
        _UFOfactory = Singleton<UFOFactory>.Instance;
        _director.currentController = this;
    }
}

  1. 设计UFOaction

UFOaction 定义了UFO的飞行动作,以下是其详细介绍。

  • 成员变量:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值