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

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

ただいまの
回答率

90.47%

  • C#

    7433questions

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

  • Unity

    4199questions

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

Unityでコントローラーに状態を知らせる方法

解決済

回答 1

投稿

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

choir

score 2

元未経験かけだしエンジニアです。

勉強をかねて、パズルゲームのようなものを作っているのですが、実装方法がわからない点があり、
お知恵をお借りしたいです。

前提:プロトタイプとして、コントローラースクリプトをつけた親オブジェクト1つ、
毎回起動時に色がランダムに変化する16枚のパネルをシーン上に配置しました。
パネルにはそれぞれ1から16の番号を振りました。
パネルにはドラッグを検知させるためEventTriggerのDragをアタッチしました。

質問:ゲームを制御するコントローラーオブジェクトに、
ドラッグされたパネルの"番号"、"色"、"何枚目にドラッグしたか"を知らせるには
どうすればよいでしょうか?

"何枚目にドラッグしたか"は、Listを宣言しておいてなぞった分だけ配列に加えるので
行けそうな気がしています。

"番号"、"色"はSendMessageUpwardsを使って親オブジェクトにメッセージを送ろう、
と試したのですがSendMessage系は引数をひとつしか取れないですね。。。すっかり失念していました

http://tsubakit1.hateblo.jp/entry/20140308/1394213883
↑上記の記事に目を通したのですが、恥ずかしながら内容が難しくてピンときませんでした。

似たような実装をされたことがある方や、スマートな書き方を知っていらっしゃる方おりましたら、
解決法をご指南いただきたいです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

EventTriggerのDragをアタッチしたら、OnDragのイベントを設定できたと思います。
イベントに、以下のインターフェースを実装して呼び出してください。
UnityEngine.EventSystems.IDragHandler.OnDrag
インターフェースはeventDataとして受け取ることができ、
eventData.gameObject.GetComponentのようにしてコンポーネントを取得できます。
そこからコントローラのメソッドに自身を渡せばいいのではないでしょうか。
同じようにdropも実装する必要があると思います。

もし、インターフェースについて理解が少ないのでしたら、
C#を先に一通り勉強した方がいいと思いますよ。

また、コントローラーはシーン上に1つしか存在しないと思うので、
以下のようなシングルトン(1つのインスタンス)方式をおすすめします。

public static GameController{
 private static Controller self;
 public static instance { 
  get{ if(self == null)self = GameObject.Find("Controller");
   return self;
  }
 }
}

まとめるとやることは以下です。
コントローラの参照を保持する(シングルトン 単純にGameObject.Findでもよい)
パネルコンポーネントにdrag dropを実装し呼び出し設定(EventTrigger OnDrag)
コントローラにパネルコンポーネントを渡す

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/19 00:14

    ありがとうございます!
    シングルトンはなんとなく知っています、インターフェースはお察しのとおり良く理解できていません。。。

    キャンセル

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

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

関連した質問

  • 解決済

    SpringMVCのJSONの扱い

    SpringMVC3.2で、JSONを扱うには どのようにしたらよいでしょうか? クライアントからajaxでJSONを投げてJSONで受け取りたいです。

  • 解決済

    Animatorを参照できない。

    前提・実現したいこと フィールドにAnimatorを参照するコードを書いたのですが、インスペクターで参照設定ができません。 ご教授のほどよろしくお願いします。 publi

  • 解決済

    uGUI非表示の挙動

    シーンにuGUIの①パネルを表示させた後、 最前面に別の②パネルを表示させた際に①パネルを グレー表示で非活性にさせたいです。(①パネルにはボタンもあり、合わせて非活性にしたい

  • 解決済

    Unityでドラッグ移動が可能なUIパネルを作りたいです。

    実現したいこと UIのパネルを使って、ステータス表示ウィンドウ的なものを作ろうとしています。 パネルをドラッグで自由に移動させたいのですが、方法が思いつきません。 発生して

  • 解決済

    ボタンを押したら別のjavaファイルを実行したい

    シューティングゲームのメニューでボタンを押したら シューティングゲーム(別のjavaファイル)を実行するようにしたいのですが どのようにしたらいいのか調べてもよくわかりませんでした

  • 解決済

    Androidアプリでパネルを消していくゲームを作るのに必要な知識

    前提・実現したいこと Androidアプリで以下のようなゲームを作ろうとしています。 ただ、以前Javaを軽く触っていた程度の知識のため、途方に暮れています。 入門書なども内容が膨

  • 解決済

    nexacro グローバルdatasetアクセスとonload

    onloadでGlobalVariablesのdatasetsの内容をfrmのdatasetにコピーしてグリッドに表示させたいのですが、onloadにも入りません。 また、以下の(

  • 解決済

    UnityAdsを使ってUnity内では広告が出るが、ビルドすると再生されなくなる

     前提、問題 Unity,C#でゲームを作っています。 UnityAdsを使っています。最新版のUnityAdsをインストールしました。 パソコン内では広告のテストが出来ますが、ビ

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

  • C#

    7433questions

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

  • Unity

    4199questions

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