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(“跳台”));