网格贴图和滚动

时间:2015-06-07 08:46:26

标签: c# unity3d game-engine mesh tile

我正在进行一项自上而下的游戏,玩家可以向上,向下,向左或向右移动。我遇到过tilemaps但是自从使用Unity之后,我看到了使用Meshes的想法。我不太明白这是如何工作的。每个瓷砖是一个网格(两个三角形)吗?如果我想执行滚动,是否只是简单地交换每个顶点的UV值?

理论上,我是否可以通过创建一个大网格来实现无限的横向滚动并简单地实时交换UV坐标,或者我是否误解了纹理图集上网格和UV坐标的使用?

由于

1 个答案:

答案 0 :(得分:1)

如果要滚动uv,可以通过更改Update方法中的纹理偏移来实现,它可以用于2D游戏的背景

using UnityEngine;
using System.Collections;

public class ScrollingUVs : MonoBehaviour 
{
    public int materialIndex = 0;
    public Vector2 uvAnimationRate = new Vector2( 1.0f, 0.0f );
    public string textureName = "_MainTex";

    Vector2 uvOffset = Vector2.zero;

    void LateUpdate() 
    {
        uvOffset += ( uvAnimationRate * Time.deltaTime );
        if( renderer.enabled )
        {
            renderer.materials[ materialIndex ].SetTextureOffset( textureName, uvOffset );
        }
    }
}

当你想在平面上移动一个物体时,你可以使用物体滚动,当它到达一端时,它就像一个循环一样出现在它的初始位置

public class ScrollingObj : MonoBehaviour 
{
    float speed ;  
    float resetDistance;  
    float initialDistance;  
    boolean isVertical;  

     void Start()
    {
      isVertical=false;
    }


        void Update ()  
        {  
            float move = speed * Time.deltaTime;  
            if (isVertical) {  
                transform.Translate(Vector3.down * move, Space.World);  
                if (transform.position.y < resetDistance)  
                {  
                    transform.position = Vector3(transform.position.x, initialDistance, transform.position.z);  
                }  
            }else{  
                transform.Translate(Vector3.left * move, Space.World);  
                if (transform.position.x < resetDistance)  
                {  
                    transform.position = Vector3(initialDistance, transform.position.y, transform.position.z);  
                }  
            }  
        }  
}