将图像添加到Unity中的游戏对象

时间:2015-09-26 01:30:18

标签: image pdf unity3d

在Unity中,我创建了一个白板。我想通过脚本将图像和/或pdf添加到白板,并能够多次更改。游戏对象是Mesh,它有一个Mesh渲染器,Mesh Collider和一个白色着色器。我真的很惊讶我无法在任何地方找到这个答案。有这样的: http://answers.unity3d.com/questions/145185/how-to-add-art-gameobject.html

但这不是通过脚本而是设置不能多次更改。

如果你能给我一些适用于任何游戏对象的代码,我可以理解其余部分。

1 个答案:

答案 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;
            }
        }
    }
}