Unity에서 Texture2D로 그리기
실제로는 채용하지 않았습니다만, 비망록으로서 Texture2D에 그리는 방법을 남겨 둡니다.
PaintController.cs
public class PaintController : MonoBehaviour
{
public Texture2D texture2D; // 描き込み先のTexture
public GameObject pointer; // カーソル
private Brush brush; // ブラシサイズ、色情報を保持するクラス
void Start()
{
// 初期化処理(Inspectorでpublic変数が紐付けられていない時はタグから取得する)
if (texture2D == null)
{
texture2D = GameObject.FindWithTag("Canvas")
.GetComponent<SpriteRenderer>()
.sprite
.texture;
}
if (pointer == null)
{
Debug.Log("pointer");
pointer = GameObject.FindWithTag("Pointer");
}
brush = new Brush();
}
void Update()
{
// マウス座標をワールド座標からスクリーン座標に変換する
Vector2 mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
pointer.transform.position = new Vector3(
mouse.x,
mouse.y,
this.transform.position.z /* マウスのz座標は-10となってしまうため、
スクリプトがアタッチされているオブジェクトのz座標で補正する */
);
// マウスクリック
if (Input.GetMouseButton(0))
{
Draw(Input.mousePosition);
}
}
// 描き込み(Textureに描き込むだけで、元になったpngファイルには反映されない)
private void Draw(Vector2 position)
{
// Textureにピクセルカラーを設定する
texture2D.SetPixels((int)position.x, (int)position.y,
brush.blockWidth,
brush.blockHeight,
brush.colors);
// 反映
texture2D.Apply();
}
// ブラシ
private class Brush
{
public int blockWidth = 4;
public int blockHeight = 4;
public Color color = Color.gray;
public Color[] colors;
public Brush()
{
colors = new Color[blockWidth * blockHeight];
for (int i = 0; i < colors.Length; i++)
{
colors[i] = color;
}
}
}
}
그려진 대상의 Texture는 Inspector상에서 이하의 변경을 가해 둘 필요가 있습니다. (SetPixels 함수 실패)
소스 코드는 GitHub에 업로드 중입니다.
Reference
이 문제에 관하여(Unity에서 Texture2D로 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hanadaUG/items/3064f146903c595c5ebd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)