Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

Unity5 メモ3

  • スプライト
    用意した画像をUnityで使うには、まずその画像を入れて、
    その画像を選択した時に出るImport SettingsでTextureTypeをSprite(2D and UI)にする。
    通常やるような1枚の画像に複数のパーツを入れている場合は、SpriteModeをMultipleにして、SpriteEditorを開き、スライス作業が必要。
    左上にあるSliceをクリックし、TypeをAutomaticにしてSliceボタンを押すと自動的に判別してスライスしてくれる。
    これでできたスプライトを使うには、HierarchyのCreateで2DObject>Spriteを選択して生成、
    さっき作ったスプライトの横についた右矢印をクリックして展開し、使いたいスプライトをSpriteRendererコンポーネントのSpriteにDD。

  • 2Dオブジェクトをクリックしたか判定
    2Dと3Dの衝突判定は干渉しないので、2D用に書く必要がある。
    判定したいオブジェクトにxxxCollider2D系をアタッチし、
    メインカメラのCameraコンポーネントのProjectionをOrthographicにし、以下のように記述する。
    これで、クリックしたオブジェクトのタグ名を使って判別できる。

    if(Input.GetMouseButtonDown(0)) {  
        Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);  
        RaycastHit2D hit = Physics2D.Raycast(new Vector2(worldPos.x, worldPos.y), Vector2.zero);  
        if (hit.collider != null && hit.collider.CompareTag("Player")) {  
            Debug.Log ("you clicked Player!");  
        }  
    }
  • 線を描画する場合
    Line Rendererコンポーネントを利用する。
    初期状態ではPositionsのelement 0 が始点、element 1 が終点になっている。

  • collisionとtrigger
    OnCollisionEnter2D()の引数はCollision2D
    OnTriggerEnter2D()の引数はCollider2Dで、微妙に異なる。

  • OnTriggerEnter2Dが呼ばれない場合
    OnXXXXXEnterなどの衝突判定関係の関数を使う場合、物理演算をしなくてもRigidbody(2D)がどちらかに必ず必要。
    物理演算が必要ない場合、RigidbodyコンポーネントのIs Kinematicにチェックを入れれば物理演算が無しになる。