当前位置:   article > 正文

【Unity】Unity 2D游戏开发(一)U2D基础功能

u2d


Unity 2D游戏开发基础知识

简单的序列帧图片切割成图集资源步骤:

  1. 精灵模式Sprite Mode设置为可切割Multiple,应用Apply。
  2. 点击Sprite Editor,左上角选择Sprite Editor,然后选Slice,再点击Slice,最后右上角Apply。

单帧不是完整物体的序列帧图如何切割:

  1. 选中多余部分删除。
  2. 新建一个边框,然后拖动大小。

边缘不清晰的序列帧图如何切割:

  1. 先点击Revert取消所有边框。
  2. 用鼠标左键圈选边框。
  3. 多个重复的可以使用Ctrl+D进行边框复制。

Animation动画

  • 如何生成帧动画?在图集资源中选中需要生成动画的几张图,然后直接拖拽到Scene界面中,系统会提示你保存一个Animation动画,保存以后这个动画自动就显示在Scene界面中了。
  • 生成了动画有问题怎么办?到Animation视窗可以修改。
  • 如果已经生成过动画了,想在别的场景使用这个动画,可以先随便做一个Sprite,然后添加Animator组件,然后指定Controller为之前已经创建好的动画即可。
  • 如果一个物体的默认动画是静止的,可以先创建一个AnimationController,指定给对象后,再创建一个空动画。这样就可以在controller中关联其他动画了。

SortingLayer层排序

在Sprite的Sprite Renderer属性卡中,有个Sorting Layer属性,可以用于选择和编辑层排序。点击层的名称为选择层,点击Add Sorting Layer为进入编辑模式。
编辑模式下,越靠下的层,越靠前显示。
通常情况下的层会有,background背景层,player玩家层,enemy敌人层,foreground前景层等。
在同一个层内部,也可以跟进Order in Layer进行排序。

Physics 2D物理2D

有哪些常用的碰撞?

  • Box Collider方形碰撞:多用于方形的物体,例如箱子。
  • Circle Collider圆形碰撞:多用于圆形的物体,例如球。
  • Edge Collider边缘碰撞:多用于背景图的碰撞,例如判断球是否出界,玩家跳跃后是否落地。点击Edit可以进行边缘编辑(按住Ctrl+左键为取消选中的点)。
  • Polygon Collider多边形碰撞:多用于形状不规则且需要碰撞比较精细的物体,比如player本身,或者炮弹。编辑模式跟边缘碰撞基本一致。

Rigidbody 2D刚体

特性1:必须双方都有碰撞体才会产生碰撞效果。
特性2:刚体休眠:只有运动中的刚体才会主动检测碰撞(3D中的特性,不确定2D中是否也存在)。
Mass 质量
Linear Drag 线性阻力
Angular Drag 角速度阻力
Gravity Scale 重力大小,0代表无重力
Constraints 锁定,位置上只能锁定X、Y,旋转上只能锁定Z

刚体在不同状态下的响应情况:
在这里插入图片描述

示例

1、点击鼠标发出子弹

// 子弹类
public class PlayerBullet : MonoBehaviour
{
	public GameObject bullet;// 子弹prefab
	private GameObject bulletInstance;// 子弹实例

	private void Update()
	{
		if(Input.GetMouseButtonDown(0))
		{
			// 实例化对象,方向为子物体的方向
			bulletInstance = (GameObject)Instantiate(bullet, transform.position, transform.GetChild(0).rotation);
			// 朝左边发射子弹,**TODO** 方向自己改
			bulletInstance.GetComponent<Rigidbody2D>.velocity = transform.right * -20;
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2、子弹打中时调用触发器

// 子弹触发器
public class BulletTrigger : MonoBehaviour
{
	// 触发器调用的方法
	private void OnTriggerEnter2D(Collider2D other)
	{
		if(other.tag == "Enemy")
		{
			// 改变动画播放的Bool值,以播放死亡动画
			other.GetComponent<Animator>.SetBool("DestroyBool", true);
			// 调用销毁方法销毁子弹对象,延迟0.1秒执行
			Destroy(gameObject, 0.1f);
		}
	}
	// 碰撞器跟触发器效果一样,也可以用,二选一
	private void OnCollisionEnter2D(Collider2D other)
	{
		if(other.tag == "Enemy")
		{
			// 改变动画播放的Bool值,以播放死亡动画
			other.GetComponent<Animator>.SetBool("DestroyBool", true);
			// 调用销毁方法销毁子弹对象,延迟0.1秒执行
			Destroy(gameObject, 0.1f);
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

3、被打中的敌人添加销毁事件

public class DestroyEvent : MonoBehaviour
{
	// 在被击中物体的Animation视窗中
	public void DestroyFunc()
	{
		Destroy(gameObject);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4、动画事件的添加方法

点击此处添加事件:
在这里插入图片描述
右键点击编辑事件:
右键点击编辑事件
选择写好的事件响应方法:
选择写好的事件响应方法

更多内容请查看总目录【Unity】Unity学习笔记目录整理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/122665
推荐阅读
相关标签
  

闽ICP备14008679号