在Unity中,我创建了一个白板。我想通过脚本将图像和/或pdf添加到白板,并能够多次更改。游戏对象是Mesh,它有一个Mesh渲染器,Mesh Collider和一个白色着色器。我真的很惊讶我无法在任何地方找到这个答案。有这样的: http://answers.unity3d.com/questions/145185/how-to-add-art-gameobject.html
但这不是通过脚本而是设置不能多次更改。
如果你能给我一些适用于任何游戏对象的代码,我可以理解其余部分。
答案 0 :(得分:1)
UV将你的白板映射到搅拌机中,确保为要分配动态纹理的部分制作不同的地图,或者只是从两个部分制作模型,两个网格纹理发生变化,而不是然后你可以通过像这样的代码在运行时为它分配不同的纹理
public Texture2D tex;
void change(){
renderer.material.mainTexture = tex;
}
如果你想继续纹理并且你的所有纹理都在一个图像中,我的意思是精灵表,你可以改变主图像的UV,以便从你的文件中获取新的纹理,就像这样
class AnimateSpriteSheet : MonoBehaviour
{
public int Columns = 5;
public int Rows = 5;
public float FramesPerSecond = 10f;
public bool RunOnce = true;
public float RunTimeInSeconds
{
get
{
return ( (1f / FramesPerSecond) * (Columns * Rows) );
}
}
private Material materialCopy = null;
void Start()
{
// Copy its material to itself in order to create an instance not connected to any other
materialCopy = new Material(renderer.sharedMaterial);
renderer.sharedMaterial = materialCopy;
Vector2 size = new Vector2(1f / Columns, 1f / Rows);
renderer.sharedMaterial.SetTextureScale("_MainTex", size);
}
void OnEnable()
{
StartCoroutine(UpdateTiling());
}
private IEnumerator UpdateTiling()
{
float x = 0f;
float y = 0f;
Vector2 offset = Vector2.zero;
while (true)
{
for (int i = Rows-1; i >= 0; i--) // y
{
y = (float) i / Rows;
for (int j = 0; j <= Columns-1; j++) // x
{
x = (float) j / Columns;
offset.Set(x, y);
renderer.sharedMaterial.SetTextureOffset("_MainTex", offset);
yield return new WaitForSeconds(1f / FramesPerSecond);
}
}
if (RunOnce)
{
yield break;
}
}
}
}