質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2448閲覧

Unityでuguiを使用したUI上で手書きメモ機能を実装したい

hinatahinata

総合スコア29

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/03/18 08:19

Unityでuguiを使用しUIを作成しています。
UIに手書きメモ機能を持たせたいと思い調べましたが
SpriteRendererを使用したスクリプトしか見つけられませんでした。

これをUIのImageなどを使用して実装するにはどのようにすればよいでしょうか。

参考にしたのが以下のサイトです。
https://qiita.com/ayaseya/items/3064f146903c595c5ebd

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純に、SpriteRendererのテクスチャを指定している部分を
Imageのテクスチャを指定するように変更すれば良いのではないでしょうか。
指定する方法はいろいろあると思いますが、例えば

diff

1- texture2D = GameObject.FindWithTag("Canvas") 2- .GetComponent<SpriteRenderer>() 3- .sprite 4- .texture; 5+ var image = GetComponent<Image>(); 6+ var rt = GetComponent<RectTransform>(); 7+ var width = (int)rt.rect.width; 8+ var height = (int)rt.rect.height; 9+ texture2D = new Texture2D(width, height, TextureFormat.ARGB32, false); 10+ image.sprite = Sprite.Create(texture2D, new Rect(0, 0, width, height), Vector2.zero);

投稿2019/03/22 23:48

編集2019/03/23 00:07
karin

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinatahinata

2019/03/30 03:17

回答ありがとうございます! 返信遅くなり申し訳ありません。 ご提案いただいたコードで実装できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問