2015年2月6日金曜日

uGuiのボタンについて

uGuiのボタンにスクリプトを入れて適応させる。
まずは例を

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class button : MonoBehaviour {
    public int uu;
    public bool abo = false;
   
   
   
    void Start () {
        Button button = this.GetComponent <Button> ();
        button.onClick.AddListener (() => {
            Debug.Log ("bo!");
            uu--;
            abo = true;
        });
    }
   
    void Update () {
   
    }
}

まず

using UnityEngine.UI;

これないと

Button button = this.GetComponent <Button> ();

の Button が反応しません。
例のスプを入れると
ボタンを押したとき

  Debug.Log ("bo!");
 bo!と文字が出て

uu--; で
uuがー1される

2015年2月3日火曜日

2Dオブジェクトは通常のRayでは反応しない

タイトルどうりで、どうやら2Dオブジェクトは通常のRaycastでは反応しないらしい
例として

まず通常の3DオブジェクトのRay

if (Input.GetMouseButtonDown(0)){
                if (sx.gameObject.GetComponent<UserPlayer>().ss != null){
                    Vector3 pos = Input.mousePosition;
                    pos.z = 3.0f;
                    Ray ray = Camera.main.ScreenPointToRay(pos);
                    if(Physics.Raycast(ray, out hit, 100)){
}}}

こちらが2DオブジェクトのRay
      
        Vector2 pos = new Vector2(x, y);
        RaycastHit2D hitObject = Physics2D.Raycast(pos, -Vector2.up);


まぁこうなってると思う
だいぶ2DオブジェクトのRayの方は簡易に書いてます。
このまま使っても意味ないです。

ここで
3Dの空間に2DオブジェクトにRyaでオブジェクトを取得はどうやるんだろうかと
いろいろ調べた結果をここにメモとして残そう!

        Vector3 Vector3D = Camera.main.ScreenToWorldPoint( new Vector3(Input.mousePosition.x, Input.mousePosition.y, z));
      
        Vector2 pos = new Vector2(Vector3D.x, Vector3D.y);
        Collider2D colition2d = Physics2D.OverlapPoint(pos);
      
        if(colition2d) {
            RaycastHit2D 2dObject = Physics2D.Raycast(tapPoint, -Vector2.up);

これで2DオブのRayは完成
とその前に

ついつい忘れてしまうのがオブジェクトにコライダーをつけることです
つけなければRayは反応しませんよ!