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

  • Post author:
  • Post category:其他





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;
		}
	}
}



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);
		}
	}
}



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

public class DestroyEvent : MonoBehaviour
{
	// 在被击中物体的Animation视窗中
	public void DestroyFunc()
	{
		Destroy(gameObject);
	}
}



4、动画事件的添加方法

点击此处添加事件:

在这里插入图片描述

右键点击编辑事件:

右键点击编辑事件

选择写好的事件响应方法:

选择写好的事件响应方法

更多内容请查看总目录

【Unity】Unity学习笔记目录整理



版权声明:本文为xiaoyaoACi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。