文章目录
Unity 2D游戏开发基础知识
简单的序列帧图片切割成图集资源步骤:
- 精灵模式Sprite Mode设置为可切割Multiple,应用Apply。
- 点击Sprite Editor,左上角选择Sprite Editor,然后选Slice,再点击Slice,最后右上角Apply。
单帧不是完整物体的序列帧图如何切割:
- 选中多余部分删除。
- 新建一个边框,然后拖动大小。
边缘不清晰的序列帧图如何切割:
- 先点击Revert取消所有边框。
- 用鼠标左键圈选边框。
- 多个重复的可以使用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学习笔记目录整理