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

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

ただいまの
回答率

90.98%

  • C#

    5795questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    3047questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

スプラトゥーン、色塗り

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 244

dangoooooo

score 0

UnityとC#を使ってスプラトゥーンみたいな、色を塗るゲームを作りたいのですが・・・

AssetStoreのInk Painterというものを使って実装したいと思っています。
そこでInk PainterのSample04というシーンがあるのですが、それを参考にしたいと思っています。
その中にあるMouse Painterという色を塗る座標を読み取る機能が付いているのですが、その機能を接触したとき(Collision)判定にしたいのですが、どこを変えればいいのかわかりません。

using UnityEngine;

namespace Es.InkPainter.Sample
{
    public class MousePainter : MonoBehaviour
    {
        /// <summary>
        /// Types of methods used to paint.
        /// </summary>
        [System.Serializable]
        private enum UseMethodType
        {
            RaycastHitInfo,
            WorldPoint,
            NearestSurfacePoint,
            DirectUV,
        }

        [SerializeField]
        private Brush brush;

        [SerializeField]
        private UseMethodType useMethodType = UseMethodType.RaycastHitInfo;

        [SerializeField]
        bool erase = false;

        private void Update()
        {
            if(Input.GetMouseButton(0))
            {
                var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                bool success = true;
                RaycastHit hitInfo;
                if(Physics.Raycast(ray, out hitInfo))
                {
                    var paintObject = hitInfo.transform.GetComponent<InkCanvas>();
                    if(paintObject != null)
                        switch(useMethodType)
                        {
                            case UseMethodType.RaycastHitInfo:
                                success = erase ? paintObject.Erase(brush, hitInfo) : paintObject.Paint(brush, hitInfo);
                                break;

                            case UseMethodType.WorldPoint:
                                success = erase ? paintObject.Erase(brush, hitInfo.point) : paintObject.Paint(brush, hitInfo.point);
                                break;

                            case UseMethodType.NearestSurfacePoint:
                                success = erase ? paintObject.EraseNearestTriangleSurface(brush, hitInfo.point) : paintObject.PaintNearestTriangleSurface(brush, hitInfo.point);
                                break;

                            case UseMethodType.DirectUV:
                                if(!(hitInfo.collider is MeshCollider))
                                    Debug.LogWarning("Raycast may be unexpected if you do not use MeshCollider.");
                                success = erase ? paintObject.EraseUVDirect(brush, hitInfo.textureCoord) : paintObject.PaintUVDirect(brush, hitInfo.textureCoord);
                                break;
                        }
                    if(!success)
                        Debug.LogError("Failed to paint.");
                }
            }
        }

        public void OnGUI()
        {
            if(GUILayout.Button("Reset"))
            {
                foreach(var canvas in FindObjectsOfType<InkCanvas>())
                    canvas.ResetPaint();
            }
        }
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • sakura_hana

    2018/01/29 17:49

    https://teratail.com/help/question-tips まずはこちらをご覧ください。また、今回であれば「unity 接触したとき」などと調べればある程度情報は出て来ると思いますが、どこが分からないのでしょうか。

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 90.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    ​ uGUIからRayを飛ばす

    ​ マウス(タッチ)でオブジェクトを取得するにあたって Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition

  • 解決済

    untiy terrain機能で作った壁が登れてしまう

    unityで、terrainで作った壁を登れなくしたいです。 キャラクターがジャンプ中に移動方向に進むと、terrainで作った急斜面な山や壁を登れてしまいます。 滑り落ち

  • 解決済

    Unity-RaycastでOnCollisionStay/Exitのような判定をする

    RaycastでOncollisionStayのような継続した接触や、OnCollisionExitのような接触の終わりを検知することは可能でしょうか? phisics.Ray

  • 解決済

    Texture2Dをななめに切り出す方法

    Texture2Dをななめに切り出す方法を探しています。 4点を基準に画像を切り取る関数などはないでしょうか? GetPixelsの引数も一つの座標と幅、高さしかないためどう斜めに

  • 解決済

    Unity2Dでクリックしたオブジェクトの座標を取得したい

    前提・実現したいこと Unity2Dでドラッグ&ドロップではめていくパズルゲームを作成中です。 現在、パズルが出てくるスポーンが一つだけなのですが、三つに増やしたいと考えてお

  • 解決済

    Unityでの乱数を重複なく複数回表示

    Unityでtetrisを作っています。 unity初心者なのでいろんなサイトを見て頑張っているのですが、 一つだけどこを探してもわからないことがあります。 それは 乱数を重複なく

  • 解決済

    WPF 複数の動画を順番に再生したい

    お世話になっております。 行いたいこと 動画を順番に再生したいと思っています。 仕様 ・再生したい動画を指定(動画1,動画2,動画3,…,動画N)→ボタンを押す→新しいウィ

  • 解決済

    ListView ヘッダ部の背景色の指定

    C#(visual studio 2010)にて、ListViewをつかった表を作成しております。 ヘッダ部およびデータ部へ情報の表示はできたのですが、 ListViewヘッダ部の

同じタグがついた質問を見る

  • C#

    5795questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    3047questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。