【Unity2D入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球)
学习目标:
看过我前面的文章应该知道怎么制作开头和结尾,这里我简单把效果给大伙看一下
我用的游戏分辨率是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入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球)相关推荐
- 【Unity2D入门教程】简单制作一个弹珠游戏之制作场景③(设置砖块,添加碰撞)
学习目标: 今天我教一下怎么设置砖块(比如需要碰撞两次,三次才能彻底击碎)然后我们再更换不同的颜色让画面更有色彩,话不多说直接开搞. 学习内容: 首先我们看到我们的素材上有这种破碎的砖块刚好可以做成碰 ...
- 游戏建模入门教程:绝地求生—PUBG的游戏模型制作流程
<绝地求生>好玩吗?说实话,好玩也很刺激,尤其是进房子的时候被别人一枪偷了屁股的时候.自游戏发布以来,已经有一个年头了.今天在这里就给大家看看游戏里面的模型是什么样的!!! 如果你也想未来 ...
- [Unity2D入门教程]简单制作仿植物大战僵尸游戏之①搭建场景
布置场景: 众所周知,植物大战僵尸非常好玩,所以我们来制作一款类似的,名字就叫Glitch Garden. 布置场景需要用到很多素材,这里我们在GitHub中找到一位老师的素材并把需要的导入到proj ...
- [Unity2D入门教程]简单制作仿植物大战僵尸游戏之②搭建游戏场景+制作动画
布置场景: 我们首先要创建一个新场景就叫level1, 我们在project面板中找到这张图 我们在新建的Canvas上创建一张background把这张拖进去点击Set Native Size 然后 ...
- [Unity2D入门教程]简单制作仿植物大战僵尸游戏之⑤制作更多的敌人Attacker以及防御者Defender
制作更多的Defender: 之前我们创建了一个向日葵和一个仙人掌,今天我们多创建两个 首先是一个老头Gnome,我们让它的功能和仙人掌一样,所以我会尽量快点讲完, 需要给它三个脚本Defender, ...
- Unity2D 入门教程
Unity2D 入门教程 常用操作 通用操作 游戏状态进行保存 使用 TileMap 绘制地图 实现碰撞体效果 移动 Bug 的修复 实现人物控制 动画系统 镜头控制 脚本控制 Cinemachine ...
- 使用Scratch制作项目《弹珠游戏》
不知道大家有没有听说过这样一句话,"80后玩弹珠,90后玩游戏,00后怎么消遣业余时间?不是王者就是吃鸡." 作为一名90后,我们对打弹珠在熟悉不过了,今天,我们就来了解以下如果使 ...
- (译)如何使用cocos2d来制作一个打地鼠的游戏:第一部分
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- 14. 如何使用cocos2d来制作一个打地鼠的游戏:第一部分
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- (译)如何使用cocos2d制作一个塔防游戏:引子
原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...
最新文章
- linux shell 日志环境变量 HISTFILESIZE 和 HISTSIZE的区别
- [NTU-Machine-learning-note]1 Introduction(2)
- IBASE 不能被编辑
- mysql 大表 驱动_MySql 小表驱动大表
- 分享:玩Linux笔记(2) —— 神奇的curl工具
- WCF编程]WCF使用Net.tcp绑定时候出现错误:元数据包含无法解析的引用
- 面试官:你是如何调用 wait() 方法的?使用 if 还是 while?别答错了!
- 2018CHI paper: Communication Behavior in Embodied Virtual Reality
- Android开发入门案例
- 谷歌浏览器用的是什么内核
- 异次元发卡源码/荔枝发卡V3.0二次元风格发卡网全开源源码/对接免签约支付接口
- excel多列合并关联数据
- 【Bug修复】java.lang.IllegalArgumentException、java.lang.NullPointerException 问题解决修复
- Jboot用@Cron失效
- windows控制面板卸载程序失败(等待。。。)
- 谈谈UCloud保障数据安全的七种“武器”
- MacBook Pro(13 英寸,2011 年末)A1278 安装Winows11无声音问题解决(WIN10和WIN11同样的解决方法)
- 数据探查平台-元数据对标专利 -- 普帝
- IDEA 2021的下载与安装
- 【Vue开发实战课后题】子组件为何不可以修改父组件传递的props?