2017-10-23 9 views
1

問題があります。現在のカーソルを取得し、Unityでtexture2Dとして取得します。現在のカーソルをTexture2D Unityとして取得する方法C#

現在のカーソルとは、ユーザーが現在持っているカーソルを意味します。例えば、ユーザが自分のカーソルを猫に変更した場合、Unityに同じ猫のカーソルを入れたいと思う。それが私がデフォルトのカーソルをオンラインで検索するだけではない理由です。

私はgoogleでこれを検索しようとしましたが、私が入手したのはthisです。2009年に投稿されました。コードが動作しません(あなたが疑問に思っていれば "HandleはICONを表しません" )。

+1

たちを表示しますあなたのコード、あなたは何を試しましたか? – MeanGreen

+0

@MeanGreenまあ、どこから始めるのか本当に分かりません。しかし、私は私の質問で言ったように、私はGoogleで検索し、[this](https://stackoverflow.com/questions/918990/c-sharp-capturing-the-mouse-cursor-image)が私の唯一の結果でした見つけることができ、私はTarsierの答えを試して、それは "ハンドルはICONを表していない"エラーになります。 – Sinci1

答えて

0

は皆さんありがとうございました、しかし、私はそれを考え出した、私はおよそthisを発見し、ビットマップにカーソルを変換するSepehrMの答えを使用して、ちょうどused thisにTexture2Dにビットマップを変換するには、おかげで再び:)

1

まあそれは私の心に来るフォローする手順は、次のとおりです。Windows

  • でアクティブになっているものをカーソル

    1. チェックテクスチャとしてそのイメージを読むユニティ
    2. カーソル
    3. にテクスチャを適用します。

    これはOSからOSに変更されるので、すべてのオペレーティングシステムと互換性を持たせることは難しいでしょう。

    現在のアクティブなカーソルを読み取ることができませんでしたので、私の答えは不完全です。たぶん誰かが欠けているものを完了することができます:、

    //This is the part I am not sure how to complete 
    //String currentCursor = 
    
    //Here is where Windows store the cursors, you need to point to the one the 
    //user is using 
    String path = "C:\Windows\Cursors"+currentCursor; 
    
    //Here you load that image as a texture 
    Texture2D cursorTexture = new Texture2D(16, 16); 
    cursorTexture.LoadImage(File.ReadAllBytes(path)); 
    
    public CursorMode cursorMode = CursorMode.Auto; 
    public Vector2 hotSpot = Vector2.zero; 
    
    //You apply the texture to the cursor in Unity 
    void Start() 
    { 
        Cursor.SetCursor(cursorTexture, hotSpot, cursorMode); 
    } 
    

    たぶん、あなたはどのようにこれに似たものを使用して最初のステップを実行するにはhereを見つけることができますしかし、私はそれを

  • 0

    のwin32との任意の解決策を知っているドントAPIはプラットフォームに依存し、別のプラットフォームでは動作しません。独自のカスタムカーソルマネージャを追加することができます。

    //container for cursor data 
    [System.Serializable] 
    public struct CustomCursor 
    { 
        public Texture2D Texture; 
        public Vector2 HotSpot; 
        public CursorMode Mode; 
    } 
    
    //container for all cursor you used in you project 
    [System.Serializable] 
    public class CursorsHolder 
    { 
        [SerializeField] 
        private CustomCursor defaultCursor; 
        [SerializeField] 
        private CustomCursor cursorA; 
        [SerializeField] 
        private CustomCursor cursorB; 
        [SerializeField] 
        private CustomCursor cursorC; 
    
        public CustomCursor DefaultCursor { get { return defaultCursor; } } 
        public CustomCursor CursorA { get { return cursorA; } } 
        public CustomCursor CursorB { get { return cursorB; } } 
        public CustomCursor CursorC { get { return cursorC; } } 
    
        public void InitializeDefault(CustomCursor defaultCursor) 
        { 
         this.defaultCursor = defaultCursor; 
        } 
    } 
    
    public interface ICursorHandler 
    { 
        Texture2D CurrentCursor { get; } 
        void SetCursor(CustomCursor newCursor); 
    } 
    
    //Manager that cached last setted cursor 
    public class CursorHandler 
    { 
        private CustomCursor currentCursor; 
    
        public CustomCursor CurrentCursor { get { return currentCursor; } } 
    
        public void SetCursor(CustomCursor newCursor) 
        { 
         currentCursor = newCursor; 
         Cursor.SetCursor(currentCursor.Texture, currentCursor.HotSpot, currentCursor.Mode); 
         Debug.LogFormat("{0}", currentCursor.Texture); 
        } 
    } 
    
    
    //Main script for cursor management usage 
    public class MyScript : MonoBehaviour 
    { 
        [SerializeField] 
        private CursorsHolder cursorsData; 
    
        ICursorHandler cursorHandler = new CursorHandler(); 
    
        private void Awake() 
        { 
         cursorsData.InitializeDefault(new CustomCursor() { Texture = PlayerSettings.defaultCursor, HotSpot = Vector2.zero, Mode = CursorMode.ForceSoftware }); 
    
         cursorHandler.SetCursor(cursorsData.DefaultCursor);  
        } 
    
        private void Update() 
        { 
         if (Input.GetKeyDown(KeyCode.A)) 
         { 
          cursorHandler.SetCursor(cursorsData.CursorA); 
         } 
    
         if (Input.GetKeyDown(KeyCode.B)) 
         { 
          cursorHandler.SetCursor(cursorsData.CursorB); 
         } 
    
         if (Input.GetKeyDown(KeyCode.C)) 
         { 
          cursorHandler.SetCursor(cursorsData.CursorC); 
         } 
    
         if (Input.GetKeyDown(KeyCode.D)) 
         { 
          cursorHandler.SetCursor(cursorsData.DefaultCursor); 
         } 
    
        } 
    } 
    

    プレーヤの設定でデフォルトカーソルを割り当てることを忘れないでください。

    関連する問題