使用Unity Tilemap和Cinemachine进行奇怪的扭曲/闪烁效果

时间:2018-03-31 18:09:12

标签: c# unity3d

我已经在很长一段时间内一直在努力解决问题,并且几乎没有想法。

enter image description here

我在2D项目中使用Cinemachine虚拟相机来跟踪目标。地面/背景是Unity Tilemap GameObject。 正如你在this gif中看到的那样,当跟随玩家(24x24精灵)时,背景图块似乎有点扭曲。我试图编写所有类型的解决方案脚本来调整虚拟摄像机转换位置,并希望“正确”捕捉/移动它无济于事。我甚至不确定问题的根源是相机设置。我的解决方案已经用完了,这似乎是一个非常简单和非常常见的场景。我已经创建了一个示例项目,说明了可以下载的问题here

使用Unity 2017.3.1f1 Personal。 背景精灵为32x32,PPU为32.无压缩,点(无滤镜),使用具有着色器:Sprites / Default和Pixel snap的材质渲染。

Cinemachine Virtual Cam设置为Ortho镜头尺寸16,Body:Framing Transposer,默认设置。

非常感谢您的任何建议或提示!!!

感觉类似于被描述here的子像素移动,但我不确定,并且该博客帖子中的解决方案似乎应该是不必要的(但是再次 - 也许不是)。

我已经创建了相机脚本并将它们连接到虚拟相机,如下所示:

float maxPixelHeight = 32;
CinemachineVirtualCamera vcam;

public void Awake()
    {
        float scale = Screen.height / maxPixelHeight;
        float orthographicSize = (Screen.height / scale) / 2f;
        vcam = GetComponent<CinemachineVirtualCamera>();
        vcam.m_Lens.OrthographicSize = orthographicSize;
}

    public void Update()
    {
        Vector3 tempPos = vcam.transform.position;
      Vector3 newPos = new Vector3(Mathf.RoundToInt(tempPos.x), Mathf.RoundToInt(tempPos.y), Mathf.RoundToInt(tempPos.z));
        vcam.transform.position = tempPos;
    }

我也试过了:

public void Update()
    {
        Vector3 tempPos = vcam.transform.position;
Vector3 newPos = new Vector3((float)System.Math.Round((decimal)tempPos.x, 2) , (float)System.Math.Round((decimal)tempPos.y, 2), (float)System.Math.Round((decimal)tempPos.z, 2));
        vcam.transform.position = newPos;
    }

等等:

public void Update()
    {
        Vector3 tempPos = vcam.transform.position;
        vcam.transform.position = new Vector3(RoundToNearestPixel(tempPos.x), RoundToNearestPixel(tempPos.y), RoundToNearestPixel(tempPos.z));    
    }

    public float RoundToNearestPixel(float unityUnits)
    {
        float valueInPixels = unityUnits * maxPixelHeight;
        valueInPixels = Mathf.Round(valueInPixels);
        float roundedUnityUnits = valueInPixels * (1 / maxPixelHeight);
        return roundedUnityUnits;
    }

1 个答案:

答案 0 :(得分:1)

我将此问题交叉发布到https://gamedev.stackexchange.com,并且有人回复了一个很好的答案:

https://gamedev.stackexchange.com/a/157021/11212