由于没有给小鸟做标签,导致无法触发受伤图片
由于没有给小鸟做标签,导致无法触发受伤图片
图片会按照默认ID进行排序,所以可能产生相反的动画效果
如果要手动调整图片顺序,在Ctrl+6后的窗口,
点击Boom Sprite左侧的展开箭头,在右侧对图片帧进行拖动调整
//Spring Joint 2D(弹簧接头组件 2D)
Connected Rigid Body
选中此框可自动设置此关节连接到的其他对象的锚点位置。(选中此项而不是填写已连接的锚字段。)
Distance
弹簧应尝试保持两个对象之间的距离。(可以手动设置。)
Frequency
当物体接近您想要的分离距离时弹簧振动的频率(以每秒周期数测量):在 0 到 1,000,000 范围内 - 值越高,弹簧越硬
//刚体静态
Rigidbody 2D ->Body Type->Static
静态刚体2D 设计为在模拟下根本不移动;如果有任何东西与它发生碰撞,Static Rigidbody 2D 的行为就像一个不可移动的物体(好像它有无限的质量)。它也是使用资源最少的体型。静态实体仅与动态刚体 2D 碰撞。不支持让两个静态刚体 2D 发生碰撞,因为它们不是为移动而设计的。
制作 Lose 界面UI
添加一个UI ,Image,填充满屏幕,设置透明度降低,添加一个渐隐的动画
在添加一个Image 放在中间,上下充满,,在这个 Image 下面添加一个 Button 按键,分别为重新开始和home 键
中间放一个Pig
制作 Win 界面UI
和失败基本相同,将猪换成
动画状态机和动画需要复制一份
给Win 添加一个脚本
渲染层级关系
1. Camera
Depth 深度 决定渲染顺序,先绘制 depth 低的物体(使用与多个摄像机渲染排序)
2.同一个 Camera
sorting layer sorting 层大的先渲染遮挡 sorting 层小的
3.同一个 Sorting 层
Order in Layer :order 大的遮挡住 order 小的
将 Canvas 的render mode :修改为 Screen space
Collision.relativeVelocity 相对速度
两个碰撞物体的相对线性速度(只读)。
.magnitude
返回此向量的长度(只读)。
写在小猪脚本里,用碰撞体
collision2D.relativeVelocity.magnitude
LineRenderer 线渲染器类
线渲染器用于在 3D 空间中绘制自由浮动线。
LineRenderer lineRenderer;
lineRenderer.SetPosition(0, 弹弓左边的坐标);
lineRenderer.SetPosition(1, 小鸟坐标);
gamemanager里写
如果赢了,
如果分数>高分,
播放三颗星动画
如果分数中间
播放两颗星动画
如果低分
播放一颗星动画
其他
播放
失败动画
我是个弱智
摄像机跟特效sorting layer改了半天不显示
发现原来是忘记把摄像机挂在canvas下了!!!
在Canvas里面的游戏物体的顺序会影响的点击,后渲染的图层会覆盖先渲染的图层,例如在lose里面添加了点击事件,但是当失败的界面显示的时候点击图标无法触发事件,将lose的顺序拉到PausePanel后面的就可以了,原因是pausePanel的大小覆盖了真个Canvas,并且是后于lose渲染的,这样就导致弹出lose界面的时候里面的所有按钮都无法点击。
public class Boom
public void destroying()
{
Destroy(gameObject);
}
class Pig
void Dead()
{
Destroy(gameObject);
Instantiate(boom,transform.position,Quaternion.identity);
GameObject go = Instantiate(score,transform.position+new Vector3(0,0.5f,0),Quaternion.identity);
Destroy(go,1.5f);
}
数据存储
创建场景三个
00-loading
01-level
02-game
导入image和sound文件
game场景
birds图片进行剪切成多个图片。
添加碰撞体(实现交互):physics 2D.circle collider
添加脚本:新建script文件夹,新建脚本
onmouse函数:unity自动检测鼠标动作,并执行相应函数,如onmousedown,鼠标按下时执行该函数
update函数:实时监测
transform:当前对象
input:输入对象
worldpoint:当前对象的坐标系,屏幕中间
screen:鼠标坐标系,屏幕左下角
转化坐标:
transform.position=Camera.main.ScareenToWorldPoint(Input.mouseposition);
注意对象的z坐标变化:
transfrom.pisition+=new Vector3(0,0,Canmera.main.transfrom.position.z);
Vector3.Distance
因为在拖拽小鸟的过程中,小鸟的位置是由代码中的position自定义所确定,所以该过程中应该将小鸟设置为isKinematic
死亡和加分特效
重新分配裁切大小
弹簧的应用 不是很懂 为什么设置2下 需验证弹簧的用发
游戏逻辑的判定
场景中小鸟剩余的个数大于猪的数量我们就赢了
复制 bird 为三只
设置GameManager管理我们的小鸟
新建空物体作为 GameManager
public List<Bird> birds;
public List<Pig> pigs;
现在确定逻辑,当我们第一支小鸟还没有飞的时候,后面的小鸟的 Spring Joint 2D 和 Bird 组件要禁用
2D