2016-04-28 6 views
-1

私はColorセクションで直接関数を見つけられませんでした。またはポストレンダリングからカラーを選ぶための直接のC#Unity関数がないためです。どのようにマウスの位置で色を選択するための最良のアプローチですか?
私は研究を行い、スクリーンショットを作成してマウスの位置を計算するテクスチャを調べるような姿勢があるように見えます。どのようにユニティとC#を使用してマウスの位置で画面から色をキャプチャするには?

Input.GetMouseButtonDown(0) 

Application.CaptureScreenshot("Screenshot.png"); 

// get the color pixel in the same coordinates of the mouse position 
Vector3 mouseCoordinates = Input.mousePosition; 
myFinalColor = tex.GetPixel((int)mouseCoordinates.x, (int)mouseCoordinates.y); 

2番目のカメラを作成してメッシュレンダリングに接続する必要がありますか?

+0

本当に回答を受け入れる必要があります。あなたが役に立つと思わない場合は、そのコメントを無視するのではなく、答えがうまくいかないとコメントして教えてください。 – Programmer

+0

いくつかの研究はstackoverflowの質問をする前に必要です。 –

+0

はいプログラムありがとうございます。まもなくポーズがとれる。目を覚まし、アナライザのデータに十分な時間を与えて、コードが正しい答えを選択するために本当にうまく機能することを確認します。はいMohammad Faizan Khan私は1週間ドキュメントを調べています。そして、私はここでは、stackoverflowのマイナス点と同様の他の質問を見ている。私はどのように問題に近づくか考えていない。それを指摘してくれてありがとう。 –

答えて

1

あなただけのこれは非常に簡単です​​

を使用する必要があります。例えばにTexture2Dへ

  • スクリーンショットの保存MyTexture
  • そして.GetPixelを追加(moueのx postion、マウスのY位置)
  • GetScreenShotのためにあなたの色にそれを保存します(にTexture2Dへのあなたのビューを作る)

    Color TheColorPicked; 
        if (Input.GetMouseButtonDown(0)) 
        { 
         TheColorPicked = MyTexture.GetPixel(Input.mousePosition.x, 
                   Input.mousePosition.y);  
        } 
    
1

はい独自のカラーピッカーを作ることができます。これはGit-hubのコードであり、pageです。

using UnityEngine; 
using System.Collections; 

// relies on: http://forum.unity3d.com/threads/12031-create-random-colors?p=84625&viewfull=1#post84625 

public class ColorPicker : MonoBehaviour { 

    public bool useDefinedPosition = false; 
    public int positionLeft = 0; 
    public int positionTop = 0; 

    // the solid texture which everything is compared against 
    public Texture2D colorPicker; 

    // the picker being displayed 
    private Texture2D displayPicker; 

    // the color that has been chosen 
    public Color setColor; 
    private Color lastSetColor; 

    public bool useDefinedSize = false; 
    public int textureWidth = 360; 
    public int textureHeight = 120; 

    private float saturationSlider = 0.0F; 
    private Texture2D saturationTexture; 

    private Texture2D styleTexture; 

    public bool showPicker = false; 

    void Awake() { 
     if (!useDefinedPosition) { 
     positionLeft = (Screen.width/2) - (textureWidth/2); 
     positionTop = (Screen.height/2) - (textureHeight/2); 
     } 

     // if a default color picker texture hasn't been assigned, make one dynamically 
     if (!colorPicker) { 
     colorPicker = new Texture2D(textureWidth, textureHeight, TextureFormat.ARGB32, false); 
     ColorHSV hsvColor; 
     for (int i = 0; i < textureWidth; i++) { 
     for (int j = 0; j < textureHeight; j++) { 
      hsvColor = new ColorHSV((float)i, (1.0f/j) * textureHeight, 1.0f); 
      colorPicker.SetPixel(i, j, hsvColor.ToColor()); 
     } 
     } 
     } 
     colorPicker.Apply(); 
     displayPicker = colorPicker; 

     if (!useDefinedSize) { 
     textureWidth = colorPicker.width; 
     textureHeight = colorPicker.height; 
     } 

     float v = 0.0F; 
     float diff = 1.0f/textureHeight; 
     saturationTexture = new Texture2D(20, textureHeight); 
     for (int i = 0; i < saturationTexture.width; i++) { 
     for (int j = 0; j < saturationTexture.height; j++) { 
     saturationTexture.SetPixel(i, j, new Color(v, v, v)); 
     v += diff; 
     } 
     v = 0.0F; 
     } 
     saturationTexture.Apply(); 

     // small color picker box texture 
     styleTexture = new Texture2D(1, 1); 
     styleTexture.SetPixel(0, 0, setColor); 
    } 

    void OnGUI(){ 
     if (!showPicker) return; 

     GUI.Box(new Rect(positionLeft - 3, positionTop - 3, textureWidth + 60, textureHeight + 60), ""); 

     if (GUI.RepeatButton(new Rect(positionLeft, positionTop, textureWidth, textureHeight), displayPicker)) { 
     int a = (int)Input.mousePosition.x; 
     int b = Screen.height - (int)Input.mousePosition.y; 

     setColor = displayPicker.GetPixel(a - positionLeft, -(b - positionTop)); 
     lastSetColor = setColor; 
     } 

     saturationSlider = GUI.VerticalSlider(new Rect(positionLeft + textureWidth + 3, positionTop, 10, textureHeight), saturationSlider, 1, -1); 
    setColor = lastSetColor + new Color(saturationSlider, saturationSlider, saturationSlider); 
     GUI.Box(new Rect(positionLeft + textureWidth + 20, positionTop, 20, textureHeight), saturationTexture); 

     if (GUI.Button(new Rect(positionLeft + textureWidth - 60, positionTop + textureHeight + 10, 60, 25), "Apply")) { 
      setColor = styleTexture.GetPixel(0, 0); 

     // hide picker 
     showPicker = false; 
     } 

     // color display 
     GUIStyle style = new GUIStyle(); 
     styleTexture.SetPixel(0, 0, setColor); 
     styleTexture.Apply(); 

     style.normal.background = styleTexture; 
     GUI.Box(new Rect(positionLeft + textureWidth + 10, positionTop + textureHeight + 10, 30, 30), new GUIContent(""), style); 
    } 

} 

また、この参考になっ資産ストアパッケージ12を見つけることができます。

+0

Thx Mohammad私は前にPackage(1)を試しましたが、CameraBgColorはスクリプトを非難しました。そして(2)はUnixの行末を持っていて、Monoをなぜクラッシュさせるのか分かりません。他にもolsoがありますが、画面から色を選んではいけません。 –

+0

この不完全な解決策には2番目のクラスが必要です: "ColorHSV"おそらくMatthewWのこの1つで、Karsnen_2のC#への翻訳です:http://forum.unity3d.com/threads/create-random-colors.12031/ #post-84625 –

+0

将来の使用のために答えを更新してください!高槻 –

関連する問題