学习目标:

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

我用的游戏分辨率是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-Breakerhttps://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

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

  1. 【Unity2D入门教程】简单制作一个弹珠游戏之制作场景③(设置砖块,添加碰撞)

    学习目标: 今天我教一下怎么设置砖块(比如需要碰撞两次,三次才能彻底击碎)然后我们再更换不同的颜色让画面更有色彩,话不多说直接开搞. 学习内容: 首先我们看到我们的素材上有这种破碎的砖块刚好可以做成碰 ...

  2. 游戏建模入门教程:绝地求生—PUBG的游戏模型制作流程

    <绝地求生>好玩吗?说实话,好玩也很刺激,尤其是进房子的时候被别人一枪偷了屁股的时候.自游戏发布以来,已经有一个年头了.今天在这里就给大家看看游戏里面的模型是什么样的!!! 如果你也想未来 ...

  3. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之①搭建场景

    布置场景: 众所周知,植物大战僵尸非常好玩,所以我们来制作一款类似的,名字就叫Glitch Garden. 布置场景需要用到很多素材,这里我们在GitHub中找到一位老师的素材并把需要的导入到proj ...

  4. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之②搭建游戏场景+制作动画

    布置场景: 我们首先要创建一个新场景就叫level1, 我们在project面板中找到这张图 我们在新建的Canvas上创建一张background把这张拖进去点击Set Native Size 然后 ...

  5. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之⑤制作更多的敌人Attacker以及防御者Defender

    制作更多的Defender: 之前我们创建了一个向日葵和一个仙人掌,今天我们多创建两个 首先是一个老头Gnome,我们让它的功能和仙人掌一样,所以我会尽量快点讲完, 需要给它三个脚本Defender, ...

  6. Unity2D 入门教程

    Unity2D 入门教程 常用操作 通用操作 游戏状态进行保存 使用 TileMap 绘制地图 实现碰撞体效果 移动 Bug 的修复 实现人物控制 动画系统 镜头控制 脚本控制 Cinemachine ...

  7. 使用Scratch制作项目《弹珠游戏》

    不知道大家有没有听说过这样一句话,"80后玩弹珠,90后玩游戏,00后怎么消遣业余时间?不是王者就是吃鸡." 作为一名90后,我们对打弹珠在熟悉不过了,今天,我们就来了解以下如果使 ...

  8. (译)如何使用cocos2d来制作一个打地鼠的游戏:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  9. 14. 如何使用cocos2d来制作一个打地鼠的游戏:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  10. (译)如何使用cocos2d制作一个塔防游戏:引子

    原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...

最新文章

  1. linux shell 日志环境变量 HISTFILESIZE 和 HISTSIZE的区别
  2. [NTU-Machine-learning-note]1 Introduction(2)
  3. IBASE 不能被编辑
  4. mysql 大表 驱动_MySql 小表驱动大表
  5. 分享:玩Linux笔记(2) —— 神奇的curl工具
  6. WCF编程]WCF使用Net.tcp绑定时候出现错误:元数据包含无法解析的引用
  7. 面试官:你是如何调用 wait() 方法的?使用 if 还是 while?别答错了!
  8. 2018CHI paper: Communication Behavior in Embodied Virtual Reality
  9. Android开发入门案例
  10. 谷歌浏览器用的是什么内核
  11. 异次元发卡源码/荔枝发卡V3.0二次元风格发卡网全开源源码/对接免签约支付接口
  12. excel多列合并关联数据
  13. 【Bug修复】java.lang.IllegalArgumentException、java.lang.NullPointerException 问题解决修复
  14. Jboot用@Cron失效
  15. windows控制面板卸载程序失败(等待。。。)
  16. 谈谈UCloud保障数据安全的七种“武器”
  17. MacBook Pro(13 英寸,2011 年末)A1278 安装Winows11无声音问题解决(WIN10和WIN11同样的解决方法)
  18. 数据探查平台-元数据对标专利 -- 普帝
  19. IDEA 2021的下载与安装
  20. 【Vue开发实战课后题】子组件为何不可以修改父组件传递的props?

热门文章

  1. UE5 Metahuman使用Live Link Face动画不匹配的问题修复
  2. Hbuilder 嵌套外部链接
  3. 一个读者大佬精心总结的阿里、腾讯、宇宙条大厂 Offer 面经和硬核面试攻略
  4. linux winqq 不能输入中文的解决办法
  5. IDEA突然不能输入中文
  6. 基于搜狗搜索的微信公众号爬虫实现(C#版本)
  7. tableau Fixed函数使用
  8. 使用python抓取搜狗引擎公众号文章
  9. Kubernetes 学习总结(27)—— Kubernetes 安装 Redis 集群的两个方案
  10. 新一届信息奥赛国家队出炉:3/4来自浙江,北大英才班成最大赢家