我正在学习一个基本的2d unity游戏的教程。但即使我只有一个角色的动画,当我移动角色时,动画也会变得摇摇欲坠,比如一只眼睛变得比另一只大,或者手臂变大。我链接了一些图片
我不明白为什么会发生这种情况,我该怎么解决呢?此外,我的角色感觉它对我的移动命令反应迟缓,也比它应该停止的晚。我试着让他以恒定的速度移动,然后立即停下来。我不知道哪些是我可以显示的必要代码块,但我尝试将我认为必要的代码块放在下面,下面是我的刚体设置的图片:
。
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和着色器如下:
发布于 2019-07-10 02:55:16
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,因为正交尺寸指定了从屏幕中心到顶部的大小。
因此,如果精灵的每单位像素(PPU)设置为108,则渲染效果会很好。
实现像素完美的实用方法。
要在实际项目中应用这一点,需要更多的考虑和提前计划。由于您不能调整目标设备的物理分辨率,并且您只有非常有限的PPU范围(通过资源束变体),因此您可以使用的唯一实数是正交大小。
更改正交大小将产生增加或减少可见世界空间的效果。这会直接影响你的游戏代码,需要考虑到。以下是包含各种缩放方案的表格垂直分辨率PPU PPU缩放正射尺寸更改768 32 1x 12 100%1080 32 1x 16.875 140%1080 48 1x 11.25 93.75%108032 2x 8.4375 70.31%1440 32 2x 11.25 93.75%1536 32 2x 12 100%
https://stackoverflow.com/questions/56957288
复制相似问题