1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 游戏开发--10-17-疯狂弹球初级版

游戏开发--10-17-疯狂弹球初级版

时间:2020-07-20 18:30:13

相关推荐

游戏开发--10-17-疯狂弹球初级版

游戏引擎:Unity

编译版本:.3.40f1c1

VS

一、实现步骤

首先在unity中画出游戏界面,元素包含(玩家板,球,墙,砖块精灵)

如果想要实现游戏的初级功能,即玩家可以左右控制板移动,小球碰到墙和玩家板可以反弹,以及小球碰到砖块精灵,砖块可以消失,就需要给它们赋予模块以及脚本

二、模块添加

首先,给墙,砖块,玩家板添加Box Collider 2D模块,以及给小球具有刚性效应添加Rigidbody 2D模块.

三、赋予脚本

3.1玩家板脚本

对于玩家来说,板是可以左右移动的,并且移动的范围,速度,都要有所限制。

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Player : MonoBehaviour{public float speed = 3; //横版移动的速度// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){float x = Input.GetAxis("Horizontal");//获取横向输入float move = x * speed * Time.deltaTime;Vector3 pos = transform.position + new Vector3(move, 0, 0);pos.x = Mathf.Clamp(pos.x, -2.7f, 2.6f);//限制的是位置transform.position = pos;}}

3.2小球脚本

对于小球来说,小球的移动方向,速度,以及碰到Default图层的物体(砖块,玩家板,墙)以后,要能够反弹,而打到砖块精灵以后,砖块精灵要消失,这时候,需要给砖块添加一个标签Brick,即小球打到Default图层且具有Brick标签的物体就消失

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Ball : MonoBehaviour{public Vector3 dir = new Vector3(1,1,0);//只在平面移动public float speed = 5;//小球速度// Start is called before the first frame updatevoid Start(){dir = dir.normalized;}// Update is called once per framevoid Update(){transform.position += dir * speed * Time.deltaTime;}private void FixedUpdate(){RaycastHit2D hit = Physics2D.Raycast(transform.position,dir,0.125f+speed*Time.deltaTime,LayerMask.GetMask("Default"));//开始位置,方向,移动距离,碰到的图层if(hit.transform!=null)//如果碰到了图层default,则{//Debug.Log("111111");Vector2 v = Vector2.Reflect(dir, hit.normal);dir = v.normalized;if(pareTag("Brick"))//如果打到的是带有Brick标签的,就调用砖块的脚本{Brick b = hit.transform.GetComponent<Brick>();b.OnHit();}}}}

3.3砖块脚本

即触发脚本就自毁砖块

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Brick : MonoBehaviour{public void OnHit(){Destroy(gameObject);//被调用就销毁我自己}}

四、模块代码知识积累

4.1 Vector

Vector表示向量、矢量的意思,含有大小和方向;

Unity基础(0)—— Vector3的简单使用_天策府狼崽子的博客-CSDN博客_unity vector3

4.2RaycastHit2D 和Physics2D.Raycast

向场景中的碰撞体投射射线。从概念上说,射线投射类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。函数返回一个 RaycastHit 对象,该对象引用了射线命中的碰撞体(如果未命中任何对象,则结果的碰撞体属性将为 NULL)。layerMask可用于仅在特定层上有选择地检测对象(例如,这让您能够仅将检测应用于敌人角色)。

UnityEngine.RaycastHit2D - Unity 脚本 API

Physics2D-Raycast - Unity 脚本 API

4.3Transform

Transform是Unity中一个重要的类,用来控制物体的位置、旋转、缩放。

Unity编码篇 Transform类

/p/145d18c7e574

/p/c3975f0162be

五、遇到的问题

很奇怪,当我使用Unity .3.11f1c2创建该项目的时候,代码与步骤都与此篇相同,但是,当当在小球脚本中使用RaycastHit2D 和Physics2D.Raycast时,碰到墙体也无法获取一个值,也就是无法进行反弹操作,无论是墙和球的模块,或者是设置中有关2d物理的设置,都没有问题,但是就是找不到是什么原因导致的,使用了编译以后就可以了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。