Как нарисовать 2D-график на плоскости в Unity 3D? - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть плоский игровой объект на 3D-сцене, и я хочу построить 2D-график z=f(x)=sin kx (кстати, MathJaX не работает на этом сайте), например, на нем. Я очень новичок в Unity, не могли бы вы сказать мне, что мне делать?

1 Ответ

1 голос
/ 18 апреля 2020

Есть три способа показать сюжет.

  1. вы создаете кучу маленьких игровых объектов и соединяете линии,
  2. вы создаете Texture2D и рисуете в нем.
  3. Когда вы оставляете Unity на несколько минут, вызовите Texture.GetNativeTexturePtr () и используйте для этого вызовы D3D.

Я думаю, что 2 - это то, что вы могли бы использовать лучше всего. 3. немного покидает Unity и не будет портировать на целевые платформы.

Вам остается только сделать графику на нем. Использование только SetPixel - не очень большой графический API.

Вот пример того, как загрузить текстуру с графикой, нарисованной во время выполнения. Чтобы использовать его, создайте объект, не забудьте назначить материал и прикрепить этот скрипт.

using UnityEngine;

public class DrawTex : MonoBehaviour
{
    Material mat;
    Texture2D tx;

    void Start()
    {
        MeshRenderer rend;
        rend = GetComponent<MeshRenderer>();
        UnityEngine.Assertions.Assert.IsNotNull(rend);
        mat = rend.material;
        UnityEngine.Assertions.Assert.IsNotNull(mat);

        tx = new Texture2D(128,128,TextureFormat.ARGB32,true);

        // draw stuff.
        for(int y=0;y<128;y++)
        {
            for(int x=0;x<128;x++)
            {
                float a,r,g,b;
                r=g=b=a=0f;
                if( x<20 || y<20 || x>108 || y>108 )
                    {a=1.0f;r=g=b=0.75f;}
                else
                    {a=0.5f;r=b=0.25f+(x/256.0f);g=0.25f+(y/256.0f);}
                tx.SetPixel(x,y,new Color(r,g,b,a));
            }
            tx.Apply(true); // now really load all those pixels.
        }

        mat.mainTexture = tx;
    }

}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...