Unity官方案例进阶--Roll a ball

本文介绍了如何改进Unity的Roll a Ball游戏,包括设置输赢条件、随机刷新PickUp、倒计时器、游戏控制和失败时的小球爆炸效果。通过创建和修改GameController脚本,实现了游戏的完整功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

诶呀,图片加载出了点问题!

简介

经过上一次的学习,我又想改进一下这款 Roll a ball 游戏,首先这款游戏只有胜利没有失败,所以我想定义一个条件来控制它的输赢,因此我想到了如下的方案:

使我们的玩家控制 Player 在规定时间内达到一定的分数就胜利,反之则失败

任务目标

这里只是大概的目标内容,还有一些细节会在后面完成的时候体现出来。

  1. 完成 PickUp 的随机刷新出现,每隔3秒刷新一个
  2. 做一个倒计时器用于显示游戏剩余时间
  3. 控制分数和时间,若玩家在规定时间内达到分数则显示 You Win!字样,Player 禁止移动;若失败,则小球爆炸并显示 Game Over! 字样。

环境搭建

主体还是 Roll a ball 的内容,其中有一些小改动,我们在此完成一下。

删除场景中的所有 PickUp

因为我们要完成的是随机刷新 PickUp 物体,所以我们不需要在场景中添加 PickUp 物体,到时候会用到一个新的知识来完成我们的随机显示 PickUp 物体的操作。

添加倒计时文本

因为我们需要让玩家知道游戏的剩余时间,所以我们需要添加一个用来显示时间的文本,位置我选择在了中间顶部的位置,其他设置随意。

细节修改

因为最终我们显示的文本不再是只有胜利,所以将我们之前创建的 WinText 改名为 ResultText。

遗漏补充

在官方的案例中,PickUp 是有一个黄色的材质,而我在之前做的项目中忘记添加了,所以我现在添加了一个黄色材质球给我们的 PickUp。

诶呀,图片加载出了点问题!

以上就是我们的环境搭建相关的操作,下面就要开始我们的脚本编写,来实现游戏的运行了。

游戏运行

修改以及准备

我将 PlayerController 中除了将 Player 运动的脚本其余的都删除了。

脚本文件名:PlayerController

代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class PlayerController : MonoBehaviour {
   
    public float speed;

    private float moveHorizontal;
    private float moveVertical;
    private Vector3 movement;
    private void FixedUpdate()
    {
   
        moveHorizontal = Input.GetAxis("Horizontal");
        moveVertical = Input.GetAxis("Vertical");
        movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        GetComponent<Rigidbody>().AddForce(movement * speed * Time.deltaTime);
    }
    }

我将剩下的代码贴在上方了,有不清楚的或者项目删除了的可以直接复制过去。

创建 GameController 脚本

还是在我们的 Player 物体上添加脚本取名为 GameController ,我定义它用来控制整个游戏的运行脚本,其实我们游戏的改变主要就是体现在此脚本的编写,所以当我们完成此脚本的编写也就意味着我们游戏的完成,废话不多说了下面我们就来完成它。

删除补回

因为我们将原来 PlayerController 脚本中除了控制小球运动的代码都删除了,所以需要先补充一下 Planyer 与 PickUp 的碰撞以及分数控制的相关代码,此时只是补回后面还会有更改。

脚本文件名:GameController

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameController : MonoBehaviour {
   

    public Text countText;

    private int count;

    private void Awake()
    {
   
        count = 0;
    }

    private void Start()
    {
   
        SetCount();
    }

    private void OnTriggerEnter(Collider other)
    {
   
        if (other.gameObject.tag == "PickUp")
        {
   
            Destroy(other.gameObject);
            count++;
            SetCount();
        }
    }

    void SetCount()
    {
   
        countText.text = "Count:" + count;
    }
}

目标一:刷新 PickUp 物体

在此我们要完成的是让我们的 PickUp 物体在地面上的随机位置每3秒刷新一个

这其中我们会用到几个新的知识,有需要的话最好还是去网上找找资料了解一下或者翻阅官网的API。

  1. Clone 克隆物体
  2. Randam 随机类

脚本文件名:GameController

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameController : MonoBehaviour {
   

    public Text countText;
    //用于添加 PickUp 物体,之后克隆要用
    public GameObject pickUp;

    private int count;
    //定义一个三维向量的值用于存储克隆物体的位置
    private Vector3 newPickUpPt;
    //定义一个需要等待克隆物体的时间,根据目标应该赋值为3
    private float fireRate;
    //定义一个下一次克隆物体的时间
    private float nextFire;

    private void Awake()
    {
   
        count = 0;
        //给 fireRate 赋值,控制克隆物体的间隔时间
        fireRate = 3f;
    }

    private void Start()
    {
   
        SetCount();
    }

    private void Update()
    {
   
        //判断游戏时间是否大于我们需要的它克隆的时间
        if (Time.time > nextFire)
        {
   
            //计算下一次克隆时的时间
            nextFire = Time.time + fireRate;
            //给我们的 PickUp 随机一个位置
            newPickUpPt = new Ve
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值