我正在遵循基本2d统一游戏的教程。但是即使当我移动角色时,即使角色只有1个动画,动画也会变得像眨眼一样,例如1只眼睛变得比另一只眼睛大或者手臂会长。我已经链接了一些图片
我不知道为什么会这样,我该如何解决?另外,我的角色感觉像是它对我的运动命令的响应较晚,并且也比预期的要迟。我试图让他以恒定的速度移动并立即停止。我不知道可以显示哪些必要的代码块,但是我尝试将下面发现的必要代码放到下面,这是我的刚体设置的图片:
public class PlayerController : MonoBehaviour
{
public Vector2 movementDirection;
public float movementSpeed;
public Rigidbody2D rb;
public float BASE_MOVE_SPEED = 1.0f;
public Animator animator;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
processInputs();
move();
animate();
}
void processInputs() {
movementDirection = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
movementSpeed = Mathf.Clamp(movementDirection.magnitude, 0.0f, 1.0f);
movementDirection.Normalize();
}
void move()
{
rb.velocity = movementDirection *BASE_MOVE_SPEED* movementSpeed * Time.deltaTime;
}
void animate()
{
animator.SetFloat("Horizontal", movementDirection.x);
animator.SetFloat("Vertical", movementDirection.y);
}
}
我的SpriteRenderer和Shader如下:
答案 0 :(得分:0)
GetAxis
接受GetAxisRaw
的输出,并对其进行一些操作,使其行为与操纵杆输入更相似-它具有一个死区,并且它将在前一个状态之间平滑过渡帧到当前帧的状态。如果您希望在使用模拟摇杆和按键之间有类似的游戏感觉,那么这可能会很好,但是由于状态必须离开死区并实际过渡到当前状态,因此还会引入一些滞后。
因此,要摆脱滞后,您可能只想使用GetAxisRaw
并删除所有可能导致滞后的处理:
movementDirection = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
正如您所发现的,更改相机的正交尺寸可以修复子画面的位置与要渲染到其上的像素的位置之间的不匹配。这就是Official Unity blog says on the topic:
基础知识:什么是正字大小?
在正交摄影机上,正交尺寸决定了屏幕高度在世界空间中划分成多少个单位。因此,在屏幕高度为1080(正交大小为5)的情况下,每个世界空间单位将占用108个像素(1080 /(5 * 2))。之所以为5 * 2,是因为正交大小指定了从屏幕中心到顶部的大小。
因此,如果您的Sprite的“单位像素数”(PPU)设置为108,则可以很好地呈现。
实现像素完美的实用方法。
要将其应用于实际项目,需要更多的注意事项并预先计划。由于您无法调整目标设备的物理分辨率,并且PPU的范围非常有限(通过资产捆绑方式),因此唯一可以使用的实数是正交尺寸。
更改正字大小将具有增加或减少可见世界空间的效果。这会直接影响您的游戏代码,需要加以考虑。下表列出了各种扩展方案
Vertical Resolution PPU PPU Scale Orthographics Size Size Change 768 32 1x 12 100% 1080 32 1x 16.875 140% 1080 48 1x 11.25 93.75% 1080 32 2x 8.4375 70.31% 1440 32 2x 11.25 93.75% 1536 32 2x 12 100%
- 正字大小=((垂直分辨率)/(PPUScale * PPU))* 0.5