対象のオブジェクトがクリックされたか調べる(2D)

公開日:2018-12-09
最終更新:2018-12-09
※この記事は外部サイト(https://sh-lu0.hatenablog.com/entry/2018/1...)からのクロス投稿です

RayCastとは

Rayとは「画面から無限の奥までまっすぐに貫く光線」
クリックした位置から無限大の奥までRayを発射して,このレーザービームがゲームオブジェクトを貫いているかどうかを調べることで,クリックされたかどうか判断できる.
これを「Rayを飛ばす」というらしい.

対象のオブジェクトをタッチしたときだけ処理するスクリプト(2D)

  • 対象のオブジェクトにスクリプトをアタッチ
  • 対象のオブジェクトに2Dコライダーを追加
  • タッチ判定の範囲を広げたかったらコライダーを変更する

対象のオブジェクトがタッチされると小さくなるスクリプト

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  

public class RayTest : MonoBehaviour {  

    GameObject clickedGameObject;  
    Vector2 smlSize;  

    void Start(){  
        smlSize = new Vector2(0.5f, 0.5f);  
    }  

    void Update()  
    {  

        if (Input.GetMouseButtonDown(0))  
        {  

            clickedGameObject = null;  

            //指定の位置から発射されるRayを作成  
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);  
            //Rayとオブジェクトの接触を調べる  
            RaycastHit2D hit2d = Physics2D.Raycast((Vector2)ray.origin, (Vector2)ray.direction);  

            //接触してたらオブジェクトを小さくする  
            if (hit2d)  
            {  
                clickedGameObject = hit2d.transform.gameObject;  
                hit2d.transform.localScale = smlSize;  
            }  

            Debug.Log(clickedGameObject);  
        }  
    }  

}  

上のコードだと,スクリプトをアタッチしたオブジェクトの他にも2Dコライダーを持っているオブジェクトを感知してしまった.
接触してるかどうかを判別するコードを以下に変更

if (hit2d && clickedGameObject.name=="オブジェクト名")  

詰まった点

  • Physics.Raycastは3Dでしか使えない→Physics2D.Raycast
  • 2DではRayが引数にできない
  • 3DではRaycastHitを参照渡しだったが,2Dだと返り値自体がRaycastHit2D

初心者本はInput.GetMouseButtonDownだけの例が多くて,どのオブジェクトがタッチされたかの判別はどうするんだから「Rayを飛ばす」という言葉に出会って,2Dの書き方に変更するまでちょっと時間かかった.

参考にしたサイト

[https://docs.unity3d.com/ja/current/ScriptReference/Physics2D.Raycast.html:title]
[http://kan-kikuchi.hatenablog.com/entry/RayCast4:title]
[https://tech.pjin.jp/blog/2018/09/03/unity_get-clicked-gameobject/:title]
ありがとうございます.

記事が少しでもいいなと思ったらクラップを送ってみよう!
18
+1
@shlu0の技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする