【Unity2D入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球)

2023-11-09

学习目标:

看过我前面的文章应该知道怎么制作开头和结尾,这里我简单把效果给大伙看一下

我用的游戏分辨率是4∶3,因此我们要改变Canvas的的Cavans Scale为X1440 Y1080

结束的场景也一样

接着我们编写一个脚本来管理场景的切换,创建一个空物体SceneLoader并将脚本

LoadSceneManage挂载到上面,并在按钮上挂载这些Public函数(我之前的入门文章有教程)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LoadSceneManage : MonoBehaviour
{
    public void LoadNextScene()
    {
        int currentScene = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(currentScene+1);
    }
    public void RestartScene()
    {
        SceneManager.LoadScene(0);
        FindObjectOfType<GameStatus>().ResetGame();
    }
    public void QuitGame()
    {
        Application.Quit();
    }
}

 

学习内容:

  接下来的内容才是重量级,教大家如何搭建好一个关卡场景

我们先创建一个Scene就叫Level1吧

先从Github中下载好素材:Commits · CompleteUnityDeveloper/05-Block-Breakericon-default.png?t=M276https://github.com/CompleteUnityDeveloper/05-Block-Breaker/commits?author=rickdavidson

然后再import把素材导入到Project面板中

别忘了修改Sprite图片的Pixel Per Unit

 然后把场景拖进来并Reset改好名字叫Background

创建好板子Paddle和Ball

创建好Paddle.cs脚本挂载在Paddle上

脚本如下:

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

public class Paddle : MonoBehaviour
{
    [SerializeField] float minX = 1F;
    [SerializeField] float maxX = 14F;
    [SerializeField] float screenWidthInUnits = 16f;

    GameStatus theGameSession; //管理UI更新(待会用上)
    Ball theBall;
    void Start()
    {
        theGameSession = FindObjectOfType<GameStatus>();
        theBall = FindObjectOfType<Ball>();
    }
    void Update()
    {       
        Vector2 paddlePos = new Vector2(transform.position.x,transform.position.y);
        paddlePos.x = Mathf.Clamp(GetXPos(), minX, maxX); //限制板子移动的X范围
        transform.position = paddlePos;        
    }

    private float GetXPos()
    {
        if (theGameSession.IsAutoBackEnabled()) //当系统AI自动操作时
        {
            return theBall.transform.position.x;
        }
        else
        {
            return Input.mousePosition.x / Screen.width * screenWidthInUnits;//相当于鼠标移动的x轴的坐标乘以整个游戏屏幕的宽度得到它的世界坐标
        }
    }
}

 

给个Polygon Collider2D

 然后再编写Ball的脚本

Ball.cs如下:

using UnityEngine;

public class Ball : MonoBehaviour
{
    [SerializeField] Paddle paddle1; //选择你要绑定的板子
    [SerializeField] float xPush = 2f;
    [SerializeField] float yPush = 15f;
    [SerializeField] bool hasStarted = false;

    AudioSource myAudioSource;
    [SerializeField] AudioClip[] ballSounds;

    [SerializeField] float randomFactor = 0.5f;

    Rigidbody2D myRigibody2D;
    Vector2 paddleToBallVector;

    void Start()
    {
        myRigibody2D = GetComponent<Rigidbody2D>();
        myAudioSource = GetComponent<AudioSource>();
        paddleToBallVector = transform.position - paddle1.transform.position; //获取球和板子的向量方向
    }

    void Update()
    {
        if (!hasStarted) //当游戏还没有开始时就每帧执行
        {
            LockBallToPaddle();
            LaunceOnMouseClick();
        }
    }
    private void LockBallToPaddle() //游戏刚开始要把球绑到板子中间上面随着板子移动
    {
        Vector2 paddlePos = new Vector2(paddle1.transform.position.x, paddle1.transform.position.y);
        transform.position = paddlePos + paddleToBallVector;
    }
    private void LaunceOnMouseClick()
    {
        if (Input.GetMouseButtonDown(0)) //通过点击鼠标左键发射,hasStart设置为true,并给它一个向上的力
        {
            hasStarted = true;
            GetComponent<Rigidbody2D>().velocity = new Vector2(xPush,yPush);
        }
    }

    private void OnCollisionEnter2D(Collision2D other)
    {
        Vector2 velocityTwek = new Vector2(Random.Range(0, randomFactor), Random.Range(0, randomFactor));//随机的速度
        if (hasStarted)
        {
            AudioClip clip = ballSounds[Random.Range(0, ballSounds.Length)];
            myAudioSource.PlayOneShot(clip); //播放一遍音频
            myRigibody2D.velocity += velocityTwek; //为了防止球一直做减速移动,要在给它每次和砖块碰撞的时候添加一个随机速度
        }
    }
}

别忘了给它碰撞体和重力,初次之外我们还有一个弹力就用Physice Material 2D

Friction为摩擦力,Bounceness为弹力

 我们还要创建一个Audio Source组件让他在发射和碰撞时发出声音,并把素材的音频文件拖到Ball Sounds的数组中


我会在下一篇继续教大伙怎么搭建Level

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Unity2D入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球) 的相关文章

随机推荐

  • ### Paper about Event Detection

    Paper about Event Detection author gr date 2014 03 15 email forgerui gmail com 看一些相关的论文 1 Efficient Visual Event Detecti
  • 【动态规划】最少按多少下开关使灯全亮

    文章目录 无环条件下 题目描述 解题思路 递归版本 迭代版本 有环状态下 题目描述 解题思路 递归版本 迭代版本 无环条件下 题目描述 给定一个数组arr 长度为N arr中的值不是0就是1 arr i 表示第i栈灯的状态 0代表灭灯 1代
  • 介绍:教育研究:定量,定性和混合方法——伯克约翰逊,拉里克里斯滕森著

    www sagepub com bjohnson4e 章节资源的网站
  • 【图形学】GAMES101 Assignment3 作业框架分析

    GAMES101 Assignment3 作业框架分析 文章目录 GAMES101 Assignment3 作业框架分析 rasterizer draw rasterizer rasterize triangle 参考 写作业之前看了一眼代
  • java 多线程学习笔记之 线程互斥

    许多线程共享同一数据 这种情况在现实的生活中也是经常发生的 比如火车站的火车票售票系统 火车票售票系统是一个常年运行的系统 为了满足乘客的需求 我们不能只设一个窗口 必须设很多的售票窗口 每个售票窗口就像一个线程 它们各自运行 共同访问相同
  • GateWay 服务网关

    介绍 Cloud全家桶中有个很重要的组件就是网关 在1 x版本中都是采用的Zuul网关 但在2 x版本中 zuul的升级一直跳票 SpringCloud最后自己研发了一个网关替代Zuul 那就是SpringCloud Gateway Gat
  • 2023年kali linux安装中文输入法

    apt get install fcitx 安装输入法框架 apt get install fcitx googlepinyin 安装谷歌输入法 reboot 重启系统 重启之后右上有个小键盘点击里面的配置 添加google输入法 把Goo
  • vue2.6 Ag-grid 使用

    中文文档 ag grid中文教程 itxst com 一 HTML 结构
  • E3-1230和E3-1230 V2有多神?

    最近追E3 1230 枪E3 1230的人那叫一个多啊 都被捧成神了 我也来说说对E3 1230的看法 同档次的装机方案 我更倾向i5 2320 2500K 3570K 首 先比较两个U的规格吧 E3 1230的主频是3 2G 比i7 26
  • NVIDIA APEX安装完全指南及Megatron-LM/Pytorch运行问题解决(fused_layer_norm_cuda/packaging/amp_C/libc10.so)

    1 问题列表 在Megatron LM Pytorch运行中报错如下 No module named fused layer norm cuda apex没有装或者装的不对 注意直接用pip install apex装的不是真正的nvdia
  • 常用JS验证

    常用JS验证 共通JS Ver Date Author Comment 1 00 2016 04 25 马 新規作成 function replaceAll strvalue strRepBy strRepWith while strval
  • 从 Java 到 Go:实现一个投票和民意调查系统

    在本篇博客中 我们将探讨如何使用 Go 语言实现一个投票和民意调查系统 并从 Java 开发者的角度分析 Go 语言的特点和优势 在阅读本文之前 我们假设您已经具备一定的 Java 编程基础 文章将通过具体的代码示例 帮助您更轻松地从 Ja
  • windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell 在这个shell上面你可以使用几乎所有linux unix上面的命令 他几乎可以取代windows的shell 用官方的题目说就是A Windows shell you
  • Linux中部署Spring Cloud项目

    Linux中部署Spring Cloud项目 文章为本人在学习的过程中 记录部署过程 仅供参考学习 因本人经验不足 教程或有不妥之处 还望指正 保姆级教程 敬请食用 简介 在学习过程中 部署时使用的项目是一个个人学习项目 若您喜欢 也可点击
  • Linux-压缩命令

    目录 1 tar 1 1 压缩 tar gz tar bz2 tgz 1 2 解压缩 tar gz tar bz2 tgz 2 zip 2 1 压缩 zip 2 2 解压缩 zip 3 rar 3 1 压缩 rar 3 2 解压缩 rar
  • 强大性能分析工具JVisualVM

    JVisualVM是由Sun提供的性能分析工具 如此强大的后盾怎能不强大 在Jdk6 0以后的版本中是自带的 配置好环境变量然后在运行中输入 JVisualVm 或直接到Jdk的安装目录的Bin目录下找到运行程序即可运行 如果是用Jdk1
  • 静态测试 动态测试 白盒测试的优缺点

    静态分析是一种不通过执行程序而进行测试的技术 静态分析的关键功能是检查软件的表示和描述是否一致 没有冲突或者没有歧义 动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前 之中和之后 对软件系统行为的分析 动态分析包含了程序在受控的
  • C语言 字母大小互相转换 三种思路

    1 利用ASCII值方法 大小写相差32 方法 1 include
  • maven在Win10的安装和配置

    1 下载和安装maven 一 下载Maven并解压 1 Maven官网下载地址 http maven apache org download cgi 2 下载后解压 将Maven的压缩包解压到 E Java apache maven 3 6
  • 【Unity2D入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球)

    学习目标 看过我前面的文章应该知道怎么制作开头和结尾 这里我简单把效果给大伙看一下 我用的游戏分辨率是4 3 因此我们要改变Canvas的的Cavans Scale为X1440 Y1080 结束的场景也一样 接着我们编写一个脚本来管理场景的