2d 材质
里面可以设置
摩擦力 和 弹力
Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。
Kinematic 动力学刚体
动力学刚体不受重力和力的影响,而受用户的控制,需要使用类似Rigidbody2D.MovePosition、Rigidbody2D.MoveRotation的方法。它于静态刚体一样,只与动态刚体会发生碰撞。
嗯,而且质量应该算是无限大,所以它在运动的时候会撞开所有的动态刚体。
使物体移动可以用 AddForce 和 velocity
AddForce 分两种 Force 和 Impulse
如何判断是否在地上?
判断velocity的y是否等于0 是不行的 因为在空中的某一时刻速度也会是0
所以需要 Physics2D.OverlapCircle
做像素游戏
需要设置一些内容
Sprite Mode: 选择"Multipe"
Single: 整张贴图文件就是一个精灵
Multipe: 贴图文件包含多个精灵,需要进一步切割。
Polygon: 类似Single,但允许自定义精灵的网格轮廓。
PPU(Pixels Pre Unit):
这个属性表示贴图中多少个像素对应Unity中的1个单位。
Filter Mode:
这个属性用于处理贴图时采用的抗锯齿算法。我们做的是像素游戏,每一个像素都是宝贵的,一定要把抗锯齿关闭,否则画面就糊了。所以选择"Point(no filter)“。
Compression:
这个选项是对贴图进行压缩,同样为了我们宝贵的像素,一定要关闭它。选择"None”。
Collision Decection
由于游戏中的移动时并不是完全连续的,而时根据移动时间来判断当前应该的位置。这样会导致游戏卡顿时画面的跳跃,或这当速度过快时在两帧之间会移动很大距离导致跨越了某个碰撞体,导致的穿模现象。这个属性用来设置是否用额外的计算来避免卡顿时的穿模。
Discrete: 离散方式,不管穿模的问题。
Coutinuous: 连续方式,当移动的方向上有碰撞体则不会在两帧之间跨越穿模,需要额外的计算量。
Constraints: 约束,禁止在某一个或几个轴方向上旋转。在2D刚体的物理模型中,由于受力位置的影响,对象会沿着Z轴
旋转,我们的角色走着走着就摔倒了。勾选Freeze Rotation Z
就可以避免。
Gravity Scale 重力倍数
如果想用键盘上下左右移动 不需要监听 awsd 按键 和 上下左右按键
只需要
float axisX = Input.GetAxis(“Horizontal”);
float axisY = Input.GetAxis(“Vertical”);
float ax1 = Input.GetAxisRaw(“Horizontal”);
float ay1 = Input.GetAxisRaw(“Vertical”);
他自动包括上面两组按键
GetAxisRaw 是只有1 0 -1
GetAxis 是慢慢改变的 中间数值有过度
其实是可以设置的
可以看这里
Gravity
: 当按键松开时,"轴(Axis)值"回到"中性(neutral)值"的速度。这句话翻译自官方文档。简单讲就是松开按键时,返回值落回0
的速度。
Sensitivity
: 灵敏度,就是按下按键时返回值从0
到1
的速度。
Snap
: 截断
如果此项不勾选。那么当按下反向的按键时,返回值会根据Gravity
属性逐渐从1
变为0
,然后根据Sensitivity
属性从0
逐渐变为-1
,有个刹车滑动的效果。
如果勾选此项,则返回值会立即从1
变为0
,然后根据Sensitivity
属性,逐渐从0
变为-1
。
Dead
: 这个属性表示敏感度,在多大的范围内,返回值始终为0
。主要用于摇杆设备,防止摇杆过于灵敏导致的晃动。
Update 和 FixedUpdate
FixedUpdate 默认是0.02 秒执行一次
可以在下面修改
Update 会因为卡顿 调用变少
FixedUpdate 则没有这个问题
所以原则就是
在update里 监听玩家控制 FixedUpdate 里进行动作
在Update
函数中保留接收按键数据的代码,因为Unity在Update
函数调用前会读取输入设备。
如果在FixedUpdate
中接受按键数据,则可能出现虽然按下按键,但Input
返回值是0
的情况。
将速度计算和修改刚体属性的代码放到FixedUpdate
函数。
当比尔转身的时候,不会立刻向反方向移动,而有一个逐渐减速的刹车效果。这样与原版不一致。
处理方法是,菜单"Edit->Project Settings->Input Manager->Axes(展开)->Horizontal(展开)"
,将Snap
属性勾选。这样转身时就没有刹车效果了。
检测是否站在地上
onGround=Physics2D.Raycast(transform.position, Vector3.down, 0.1f, 1 << LayerMask.NameToLayer(“跳台”));
精灵图
随便拿一张
放到unity里
设置成这个
sprite editor里
点击 slice
就分割了
再看资源 就被分割成了小图
可以在 sprite editor 里点击子图 设置一些参数 比如pivot
这个是干啥的?
假如你希望 你的对象是一格子一格子的移动的话 也就是一个步进移动 咋办?
按住ctrl 再拖动三根线 就可以了
他会按照你设定的值 移动
写着一半死机了。。晕了 草稿都丢了
整一张图
放游戏里显示是这样的
模模糊糊 没有像素的颗粒感
你需要设置纹理的这个
看到没 一下子清晰了
现在旋转一下
和右边相比 有没有觉得 又不那么像素了?缺少了锯齿
可以设置下镜头里的这个
现在感觉差不多了!
如果让他连续转起来会发现奇奇怪怪的。
设计窗口和game窗口显示的效果是不一样的
不填充 用不到
竖向填充
横向填充
窗口模式 固定大小
回想一下 h5 你是怎么做动画的
是不是把动画 像 image label 一样 直接托到stage上
unity不是 因为unity是组件形式的
所以他没有专门的动画
他的逻辑是
任何一个sprite 都可以通过添加 Animator 组件 变成动画
那如何做动画
选中动画的几个图
直接拖拽到场景里就可以了
unity会提示你创建New Animation.anim 文件
这个就是动画文件
这一点和h5不一样 h5是一个动作文件里面有好多动作
unity不是 一个动画就是一个单独的文件
比如跑 跳 都是单独的文件
unity还会自动帮你创建好 controller文件
单独的anim 是不能用的
你需要在sprite上挂一个 Animator 组件
然后挂上创建的那个controller文件。
3d也是一样的逻辑。
如果希望光源产生阴影 那么一定要打开灯光的这个
然后给需要产生阴影的加
Shadow Caster 2D 组件
接受阴影
你会发现
看 有阴影和光源了!
灯光可以开启 normal maps 这个会开启法线贴图
可以设置法线贴图 我瞎画的
最后变成这样了
创建地图
他长这样
在tile palette视图里 创建新的调色板
然后把你的资源托进去就可以了 可以是单独的图 也可以是图集 都行
你需要设置一下grid的大小
不然你会发现 拖进去的格子 太大或者太小了
比如 我拖进去的地面 大小是30像素 进去结果是这样的
改成0.3 0.3
就ok了
可以用这个操作
移动啊 删除啊 选中 都是这里
我刷了一个超级玛丽的 非常方便
任意选中一个格子
可以进行一些操作 比如
插入一行 插入一列等
你会发现变这样了
这样就不用自己挨个移动了
选中裁切出来的资源
长这样
可以选择 碰撞体
Tilemap Collider 2D 组件不会为此瓦片生成任何碰撞体形状。
Tilemap Collider 2D 组件基于分配给瓦片的精灵生成碰撞体形状。碰撞体形状基于为精灵设置的 Custom Physics Shape。
Tilemap Collider 2D 组件基于网格单元格的形状(由 Grid 组件的选定单元格布局确定)生成碰撞体形状。
还可以设置一下调色盘参数哦
接下来 如何给tile map 放碰撞呢?
只需要在tilemap上挂上
tilemap collider 2d 组件 就可以了
就会这样子
想创建简单的tile 动画咋办呢
创建 Animated Tile
他长这样子
里面可以设置现实哪些图
然后把这个文件拖拽到你的调色盘里
就可以了
到了游戏里 他会自动切换显示的
这个适合做一些海洋啊 草地啊 什么的
RuleTile
https://docs.unity3d.com/Packages/com.unity.2d.tilemap.extras@4.0/manual/RuleTile.html
老规矩 先new一个
直接拖拽到 调色盘里
就可以用了
他是一个类似九宫格的
先设置默认显示的
然后就是设置这个了
这个是啥意思呢
x 就是不是这个的意思 比如 空的 或者 别的tile
举个例子
比如这样的
显示出来就是这样的
他判断 上面如果不是这个 就会显示
如果是绿色箭头呢
这个意思是说 如果是这个 就显示
如果这样呢
就会如此
因为中间是旋转
Tilemap Collider 2D Composite Collider 2D
只添加 Tilemap Collider 2D
那么 每个格子都是单独计算碰撞的
性能低下
如果想合并 就需要勾选 composite
但是需要添加 Composite Collider 2D组件
这时候你会发现 碰撞线 变化了
变成一整个的
大家都玩过魂斗罗吧
从下面的平台跳到上面的平台 不会被阻挡 并且 会承载住玩家
这个要用
Platform Effector 2D
并且勾选这个
如果调成360
那么任何角度都不能穿过去
如果是180 那么从下到上 可以跳上去
如果你让主角 跳起来 会发现 他穿到地里去了
速度太快 穿模了
主角的改成这样就可以了
如果你想 按照y轴 排序
找到这个
改 Transparency Sort Mode 就可以了