かさたな日記

主にUnityを使った制作記録。書いてる人は初心者です。一緒に頑張ろう。

自分用Unityメモ:マウス位置を得る(3Dの場合)

マウス(あるいはタップされた位置)はInput.mousePositionで得ることが出来る。
これをスクリーン座標に変換することで画面上の位置を取得することが出来る。

Vector3 v = Camera.main.ScreenToWorldPoint(Input.mousePosition);

ただ、3Dのときは上手くいかない。
理由は、mousePositionにz軸の指定がないからみたい。
なので、変換前に入れておくと良いらしい。

    Vector3 pos = Input.mousePosition;
    pos.z = 10.0f;
    Vector3 v = Camera.main.ScreenToWorldPoint(pos);

スクリーン座標じゃなくてワールド座標内での
特定のXZ平面上の座標を得たいという場合は、
見えない平面オブジェクトを配置しておいて
カメラからrayを飛ばし、その接触点を得るという方法もある。
というか、今回使ってるのはこっちなのダ....。

     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
     RaycastHit hit;
     int layerMask = (1 << LayerMask.NameToLayer("HitPanel")); //適当なレイヤーマスクを設定するよ

     if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
     {
         //レイが当たった位置を得るよ
         Vector3 pos = hit.point;
     }

自分用Unityメモ:パーティクルで当たり判定

PartticleSystemコンポーネントのCollisionにチェックを入れることで
当たり判定が検出できます。

各プロパティを設定することで反射強度や
当たったとき消えるかどうかも簡単に設定が可能。

また、SendCollisionMessageにチェックを入れると、
衝突時にOnParticleCollisionのAPIを呼び出すことが出来るみたいです。
うーむ、簡単。

   void OnParticleCollision(GameObject obj)
    {

        Debug.Log(obj.name + " に当たったよ");

    }

Unityでゲーム製作:自分用メモ

■キーボードからの入力
Input.GetKey(キーコード) でキーボードからの入力を取得することが出来る。


※KeyCodeについての覚書き

KeyCode.KeypadEnter----テンキーの傍の小さい方のEnterキー
KeyCode.Return---------大きい方のEnterキーはこっち。

ほかのKeyCodeプロパティは見ればわかるので割愛。




■Buttonオブジェクトに動的に命令を追加する

ラムダ式を使うことで、
割と簡単に命令を追加することが出来る。

public Button btn;
btn.onClick.AddListener(() => OnClick用メソッド );

インスペクターから設定のときは
OnClick用のメソッドの引数は1つしか設定できないけど、
これを使えば複数渡すことが出来ます。

btn.onClick.AddListener(() => OnClickOkButton( okButton.gameObject, 1, "決定ボタンですよ") );