网格图块地图和滚动
Mesh tilemap and scrolling
我正在开发一款自上而下的游戏,玩家可以在其中上下左右移动。我遇到过 tilemaps,但自从使用 Unity 后,我看到了使用 Meshes 的想法。我不太明白这是怎么回事。每块瓷砖是一个网格(两个三角形)吗?如果我要执行滚动,是否只是简单地换出每个顶点的UV值?
理论上,我可以通过创建一个大网格并简单地实时交换 UV 坐标来获得无限景观滚动,还是我误解了纹理图集上网格和 UV 坐标的使用?
谢谢
如果你想滚动uv`s,你可以通过改变更新方法中的纹理偏移来实现,它可以用于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);
}
}
}
}
我正在开发一款自上而下的游戏,玩家可以在其中上下左右移动。我遇到过 tilemaps,但自从使用 Unity 后,我看到了使用 Meshes 的想法。我不太明白这是怎么回事。每块瓷砖是一个网格(两个三角形)吗?如果我要执行滚动,是否只是简单地换出每个顶点的UV值?
理论上,我可以通过创建一个大网格并简单地实时交换 UV 坐标来获得无限景观滚动,还是我误解了纹理图集上网格和 UV 坐标的使用?
谢谢
如果你想滚动uv`s,你可以通过改变更新方法中的纹理偏移来实现,它可以用于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);
}
}
}
}