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

Unity官方案例——Roll a ball 现在的我还是一名 Unity3d 游戏开发初学者,所以现在都在围绕 Unity3d 的官方案例来做练习,为此写下一些文章作为笔记,文章中难免会有一些疏漏,有些不当之处还望指正。 项目简介 首先玩家可以控制一个小球,去吃那些悬浮在平面上的小方块,全部吃玩就游戏结束了,是一个很简单的小游戏。 创建工程 首先我们创建一个空的工程 环境搭建 创建地面 在 Hierarchy ... 阅读详情

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

简介

经过上一次的学习,我又想改进一下这款 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 Vector3(Random.
Unity 3D 官方教程—— Roll A Ball 学习记录 unity 官方教程 roll a ball 学习笔记。   1. 新创建一个项目   2. 养成良好的习惯,第一步就是保存场景。   先在右下方的 “project” 选项卡下点 “create”,选择 “Folder” 重命名为 “_Scenes” 来容纳我们的场景。 之后在左上角的 “File” 里选择 “Save Scenes” 或者直接快捷键 “Ctrl + S” ... 阅读详情

相关推荐

Unity官方教程Roll-a-ball (一)

这是一个官方的教程,附上地址http://unity3d.com/cn/learn/tutorials/projects/roll-a-ball/set-up,因为是youtube的,怕有些人看不了,所以自己做一遍,并记录下过程。对象是beginer,刚开始一看,就是控制一个球,去吃周围的正方体,一想可能也就是很简单的,但是就是简单,也有可能补充到你不了解的方面,比如灯光的设置,所以还是准备把它写

破晓的专栏 4710

Unity官方实例教程 Roll-a-Ball

一、添加游戏对象——平台(Plane) 第1种:通过菜单GameObject-&gt;3D Object-&gt;Plane来创建,如下图:     第2种:通过Hierarchy窗口中Create按钮来创建,如下图:   第3种:通过右键菜单创建,我们在Hierarchy窗口中单击右键会弹出菜单,如下图: 二、添加我们的主角——球体(Sp...

tsundere的博客 1146

Unity官方教程《roll-a-ball》学习笔记

第一次接触unity项目,学习了unity官方教程roll-a-ball。接下来是我的整个学习过程1.项目预览     项目学习的过程分为了这样几个步骤:      1.项目简介。      2.环境和小球      3.相机视角和游戏区域      4.收集功能,滚动和创建游戏第一个部分是介绍了整个游戏的玩法,如题所说的,滚动小球,然后触碰消掉方块,所有方块都被消除完毕后,游戏结束。第二部分介绍...

qq_33316262的博客 7146

Unity官方实例——Roll A Ball 开发流程记录

1. 新建项目 新建一个项目,命名为Rolling Ball,选择3D游戏模式。 2. 添加游戏对象 2.1 Plane(平台) 在Hierarchy窗口中通过右键新建一个Plane,并重命名为Ground。 创建成功后,将Ground的Scale X和Z设置为2。(可以在Transform窗口中直接对物体的属性进行设置。 2.2 Sphere(球体) 添加方式和平台一样,选择添加Sp...

Aimyller的博客 812

Unity官方教程Roll-a-ball (二)

9.接下来我们需要控制球的滚动,为了不让球通过地面,我们需要给物体增加一个刚体(rigid body),选择Player,然后在Inspector中Add Component,或者你也可以在顶部菜单栏中Component里面添加Physics-rigid body。刚体是一个让物体拥有物理属性的组件。 10.然后我们新建一个Scripts文件夹,右键新建一个C#脚本,并把脚本拖动附加到H

破晓的专栏 3026

初识Unity(十步做好你的第一个unity小游戏)

初识unity,通过一个小游戏的制作带你了解unity,产生兴趣。

Adamwen520的博客 1万+

Unity官方案例精讲

作为Unity引擎的辅助学习资料,Unity公司提供了大量的官方示例和演示程序供开发者参考,这些程序示例涵盖了各个主要游戏类型的程序架构,以及Unity引擎本身的几乎所有重要功能,极富参考价值。可惜的是,Unity公司在提供这些程序示例的同时,并没有给出相应的详细文字讲解和说明。   《Unity官方案例精讲》即从这些示例中精心挑选了若干个具有代表性的实例进行详细讲解,在每个实例中都重点切入一个或几个Unity引擎的核心功能点,进而以接近于现场教学的方式,引导读者一边阅读、一边动手,通过实际操作来掌握学习内容。在讲解过程中,本书还对与Unity编程相关的重要知识加以特别关注和讲解,使读者在实践中深刻理解Unity引擎的原理和使用方法,真正做到融会贯通。

unity官方资源案例survival shooter

unity官方资源案例survival shooter,只需要导入即可立即生效

UNITY3D官方案例Roll_A_Ball

自己制作的unity官方案例,Roll_A_Ball,在案例的基础上添加了音效。

unity官方案例素材包

官方案例素材包,初学者必备,快速入门包括 Character Customization.unitypackage Mecanim GDC2013 Sample Project.unitypackage

DINOv3实战指南:如何利用零样本视觉模型革新工业质检

本文详细介绍了如何利用DINOv3零样本视觉模型革新工业质检流程。通过无需标注数据的自监督学习技术,DINOv3能快速部署高精度检测系统,显著降低成本和提升效率。文章涵盖模型选型、数据准备、实时检测优化及典型行业解决方案,为工业质检提供革命性AI实践指南。

ansible6ops的博客 125

cutlass2.x源码解读之PitchLinearStripminedThreadMap

TensorCoord:使用layout::PitchLinearCoord作为张量坐标。Shape:使用模板参数Shape_作为tile的形状,kThreads:线程总数,定义为模板参数Threads。kElementsPerAccess:每次访问的元素数,定义为模板参数ElementsPerAccess。ThreadAccessShape:线程访问的形状,使用layout::PitchLinearShape定义。内部实现细节:ShapeVec。

jiangjkd的专栏 790

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资

逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。...

m0_73494033的博客 894

VMware VSAN 高级参数介绍(测试用)

VSAN 的策略驱动让我们看到了VSAN无穷的潜力,其设计思路相当新颖,在一个基础资源池上使用策略就能实现不同对象的区分服务,而目前没有其他厂家能到VMware这样的高度。 VSAN 呈现给用户配置很简单,但实际上设计及后台比较复杂。笔者无意间发现了VSAN的隐藏高级参数设置,有很多好玩的选项想分享出来。这些参数全部是针对每主机进行设置的。VSAN 中有很多默认设置,这些设置应该都是研发人员多次测试得出的最优值,修改可能导致环境异常,并不建议修改! 目录 参数1:全闪配置下 SSD 写缓存最大.

山水牧羊 2032

unity6000.0.3版本URP下ScriptableRendererFeature如何实现一张自定义贴图效果?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 586

(二)OpenClaw-连接即时通讯平台-集成飞书完整配置指南

本文详细介绍了如何将OpenClaw与飞书机器人对接,实现通过飞书聊天窗口下达指令自动执行任务的高效协作模式。主要内容包括:1)OpenClaw服务部署验证和飞书账号准备;2)在飞书开放平台创建企业自建应用、添加机器人能力、获取凭证和开通必要权限;3)OpenClaw服务端的首次配置,包括设置飞书通道参数和启动长连接。文章提供了完整的操作步骤和截图指引,帮助用户快速完成对接配置,实现AI自动化助手功能。

直到世界的尽头 2251

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

基于YOLOv5的人脸识别系统:从构建到应用的全流程指南

本文详细介绍了基于YOLOv5的人脸识别系统开发全流程。首先阐述了YOLOv5模型的高效性和准确性优势,随后分步骤讲解了深度学习环境配置、数据集准备(推荐WIDER FACE数据集)和模型训练方法。重点展示了如何将训练好的模型集成到Tkinter开发的GUI界面中,实现图片上传、人脸检测和结果可视化功能。文章提供完整的代码示例和飞书文档链接(密码:946m22&8),帮助开发者快速构建可交互的人脸识别系统,适用于安防、门禁等多种应用场景。通过该项目,读者可掌握YOLOv5的实际应用和界面集成技术。

FJN110的博客 169

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Atom 插件备份--Sync Setting
下一篇: Bootstrap js动态给select添加option元素不显示
NoahCode
博客等级 码龄9年 24粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值