「Unity入门」Step by Step的太空清理垃圾游戏Part 2: 太空场景建设

配合视频教程食用效果更佳哦~ 

这游戏怎么做来着?Step by Step的太空清理游戏教程-Part 2

围绕一点旋转 – RotateAround、变量

用类似的方法创造一个小一点的球(Scale:(1,1,1)),给它加上新的卫星纹理。放置在星球一旁、行星带上方。

让小卫星自转和围着星球公转

  • 新建一个新的代码文件,命名为”Moon”,双击打开

  • 在update中,用Rotate方法完成自转

  • 在update中,用RotateAround方法完成公转

transform.RotateAround(center.transform.position, Vector3.up, speed * Time.deltaTime);

  • 简单说一下RotateAround。它的参数分别是:旋转中心点的位置,中心轴方向,速度

  • 变量:这里的“center”和“speed”都是我们建立的变量。因为卫星需要围绕着星球公转,所以需要星球的位置。那为什么不直接把星球的坐标用作第一个变量呢?毕竟我们知道星球的坐标(0,0,0)嘛。因为这样方便了我们改变中心星球的位置时,不需要在代码中修改成相应的位置。而在更复杂的情况下,比如中心星球的位置会在运行中改变时,一个固定不变的坐标更无法代表公转中心的位置

所以,在应用变量之前,我们需要在这个class内建立变量

public GameObject center;

public float speed;

变量有public,private,serialized。public顾名思义,就是这个class之外的也可以获取信息。

  • 保存代码。回到编辑器,选中卫星,将“Moon”代码文件拖拽到右侧卫星的属性栏中。

  • 代码文件那一栏中,会出现两个空的变量,分别是”center”和”speed”。因为这两个变量是public,所以我们可以在编辑器中改变这些变量。把左侧星球拖拽到center,就相当于”星球”这个物体赋予到center变量中。

批量生产物体 – Prefab

当我们需要多个卫星的时候,一次又一次的创建球体、加上纹理、代码等等将是极大的工作量。简便方法则是将已完成的物体变成一个prefab – 预设。这个预设就包含了我们已完成的所有部分。再将这个预设加入到场景中,只需要将卫星们放到不同的位置,就省去了很多麻烦

  • 在Asset资源栏中新建一个“Prefabs”文件夹

  • 将场景中的Moon拖拽到Prefabs中,Moon的图标会变成一个蓝色的实心正方体。

  • 再将Prefabs文件中的Moon拖拽到场景中,就会新增一个与第一个Moon一模一样的物体。

(Prefab的标志:蓝色实心小正方体

  • Prefab的修改:当场景中的预设物体被单击选中时,它发生的任何改变(比如颜色,speed,center…)不会改变初始的预设本身。改变预设则需要点击上图中末端的小箭头,进入预设修改模式

预设修改模式。点击小箭头退出并返回场景

  • 用预设放置3-4个新的卫星在场景里

同样道理,我们可以用红色正方体(卫星垃圾)和棕色圆柱(太空垃圾)两种预设来作为简化版的太空垃圾

首先是太空垃圾(棕):创建圆柱体,加上棕色纹理,新建名为”SpaceTrash”的代码文件,利用之前的RotateAround实现围绕星球公转

对用卫星垃圾(红):围绕各自的卫星公转,而不是星球。如果我们故技重施,使用RotateAround并把center设定为相应的卫星,会发现,虽然卫星垃圾会如愿公转,但与卫星的距离会越来越远。这是因为RotateAround并不保证恒定的距离,它的第三个参数决定了固定的角度。因此,在中心物体的位置不断变化的情况下,为了赶上角度,它会越来越远。为了保证卫星与卫星垃圾之间的距离恒定,我们需要改变后者的位置

  • 创建正方体,红色纹理,新建“MoonTrash”的代码文件。

  • 在类中创建变量:中心、旋转速度、固定距离

public Transform center;

private float OrbitSpeed = 10f;

private float Radius;
  • 在Start中,给Radius定义:

Radius = Vector3.Distance(center.position, transform.position);
  • 在Update中,改变开始运行后卫星垃圾的位置:

float currentMoonDistance = Vector3.Distance(center.position, transform.position);
Vector3 towardsTarget = transform.position - center.position;
transform.position += (Radius - currentMoonDistance) * towardsTarget.normalized;


transform.RotateAround(center.position, Vector3.up, OrbitSpeed * Time.deltaTime);
  • 保存,将“MoonTrash”拖拽到卫星垃圾上。

同样的道理,把两种垃圾做成Prefab,复制任意多个到场景中吧

贫穷或富有,你的好伙伴 – Unity Asset Store

最后,我们可以在小行星带上空放置两个人造卫星

前文提到,如果想要搜寻可用的3D模型,Unity Asset Store是一个非常不错的选择。它不仅有3D模型,还有2D、纹理、音效、字体、插件、工具等等可能用到的东西。当然没有免费的午餐,大多都是需要付费购买的。虽然但是,免费专区也有好东西!比如人造卫星和后面要用到的飞船

  • 打开链接,点击Open in Unity。如果未登录的话,网站会要求你登录。注意,登录的账号和你的Unity账号必须是相同的。

  • 打开Unity编辑器后,会有一个package manager出现,里面是所有你购买过的内容,选中人造卫星,先download下载,然后import导入。一个文件夹就会出现在你的asset栏中了。

  • 选中文件夹,里面除了obj的模型还有实例场景、纹理之类的,不要做任何改动,只将模型拖拽到场景中。

  • 最后,创建“Satellite”的代码文件,同样用RotateAround来完成围绕星球的公转。

我们的场景就基本构建完成啦。当然,也可以在此基础上尽情发挥你的想象,进一步丰富你的宇宙!如果有任何疑问或者建议,也欢迎在下方留言评论哟~

  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值