Unity3D 与游戏世界交互 | 打飞碟

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

  • 游戏规则:
    1. 游戏至少有三个 round(其实到round3就很容易死了。)
    2. 每个round内难度一样,但是不同round难度递增。
    3. 每个round中飞碟出现的位置是随机的。
    4. 鼠标点中得分,紫飞碟1分,绿飞碟3分,红飞碟5分。
    5. 每次游戏有6条命,少点一个掉一条命,没有命游戏结束。
  • 游戏的要求:
    • 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场景单实例的!具体实现见参考资源 Singleton 模板类
    • 近可能使用前面 MVC 结构实现人机交互与游戏模型分离
  • 扩展:
    • 用自定义组件定义几种飞碟,编辑并赋予飞碟一些属性,做成预制

UML类图:

因为我参考了前辈的代码,UML类图几乎一样,所以直接借用了(末尾有前辈的链接)。

在这里插入图片描述

其中SSAction、SequenceAction、ActionCallBack、ActionManager与上次的牧师与魔鬼几乎相同,所以这次不多加说明,主要关注新增的类。

UFOFlyAction

这个类是SSAction的实现,写了UFO做的动作,包括飞的速度、射出位置、射出角度的方法,以及动作结束的条件。当动作结束,飞碟会等待回收。

public static UFOFlyAction GetSSAction(Vector3 direction, float angle, float power){
        //初始化物体将要运动的初速度向量
    UFOFlyAction action = CreateInstance<UFOFlyAction>();
    if (direction.x == -1) {
    		action.start_vector = Quaternion.Euler(new Vector3(0, 0, -angle)) * Vector3.left * power;
    }else{
        action.start_vector = Quaternion.Euler(new Vector3(0, 0, angle)) * Vector3.right * power;
    }
    return action;
}
public override void Update(){
        //计算物体的向下的速度,v=at
		time += Time.fixedDeltaTime;
    gravity_vector.y = gravity * time;

        //位移模拟
    transform.position += (start_vector + gravity_vector) * Time.fixedDeltaTime;
    current_angle.z = Mathf.Atan((start_vector.y + gravity_vector.y) / start_vector.x) * Mathf.Rad2Deg;
    transform.eulerAngles = current_angle;

        //如果物体y坐标小于-5,动作就做完了
    if (this.transform.position.y < -5){
        this.destroy = true;
        this.whoToNotify.SSActionEvent(this);      
    }
}
FlyAtionManager

当场景控制器需要飞碟飞出来时,它会调用上面动作管理类的方法,来控制飞碟飞行。它们的关系可以理解为,飞碟能做的动作在动作管理类,但是飞碟要做什么是由这个控制器控制的,场景控制器决定飞碟在什么情况下动作。

public UFOFlyAction fly;                            //飞碟飞行的动作
public FirstController scene_controller; 					//场景管理类

protected void Start() {
    scene_controller = (FirstController)SSDirector.GetInstance().CurrentScen
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity3D是一种强大的跨平台游戏引擎,被广泛应用于游戏开发和虚拟现实领域。其产品交互指的是通过Unity3D开发的游戏或应用程序与用户之间的交互方式和设计。 首先,Unity3D提供了多种用户输入方式的支持,包括键盘、鼠标、触摸屏等。通过监听并响应用户的输入,开发者可以为用户提供丰富的交互体验,例如通过点击屏幕实现游戏角色的跳跃或攻击等。 其次,Unity3D提供了强大的物理系统和碰撞检测功能,使得开发者能够实现更真实的物理交互效果。比如,游戏中的角色可以与环境中的物体进行碰撞,并在碰撞后根据物体的质量和力量发生相应的反应。 此外,Unity3D还支持粒子系统和特效的制作,使得开发者可以创建各种各样的视觉效果。通过制作华丽的粒子特效,可以增强游戏或应用程序的交互性,吸引用户的注意力,提升用户体验。 除了基本的输入、物理和视觉交互外,Unity3D还提供了高级的用户界面(UI)设计支持,使开发者能够创造出更友好、易用的界面。通过使用Unity3D的UI系统,开发者可以设计出菜单、按钮、滑动条等各种交互元素,以便用户进行游戏设置、选项选择或数据输入。 综上所述,Unity3D产品交互包括用户输入方式的支持、物理和碰撞检测、粒子特效的制作以及用户界面设计。这些功能的综合应用能够为用户创造出丰富多样、真实逼真的交互体验,使得游戏或应用程序更加吸引人,让用户更加沉浸其中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值