Unity RayCastでキャラクターを検出する

■Topic

ダンガンロンパみたいにアドベンチャーっぽい感じで

対象を検出したい

 

■方法

一般的に広く伝わるRayCastを使わせていただき、

「画像をクリックするとひとまずセリフがデバッグ表示される」

を目指す。

▼完成イメージ

f:id:happyherpy:20200914013121p:plain

①RayCastオブジェクトを作る

何はともあれRayCastオブジェクトがないといけないので、

Hierarchy上で

右クリック > Create Empty

でからのオブジェクトを作成。

名前をRayCastとする。

 

f:id:happyherpy:20200914013707p:plain

②Scriptを作る

 最下部のリンクの内容を組み合わせたため、

コピペ率が高いが、動くものを目指していく。

ちなみにcaseの内容は検出するオブジェクト名と揃える必要があります。

 

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

public class RayCastTest : MonoBehaviour
{
public Camera camera_object; //カメラを取得

//rayキャストが当たったものを取得する入れ物
public RaycastHit hit;

void Update()
{
if (Input.GetMouseButtonDown(0)) //マウスがクリックされたら
{
//マウスのポジションでrayを生成
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

if (Physics.Raycast(ray, out hit))
//マウスのポジションからRayを投げて何かに当たったらhitに入れる
{
string objectName = hit.collider.gameObject.name; //オブジェクト名を取得して変数に入れる

Debug.Log(objectName); //オブジェクト名をコンソールに表示

switch (objectName)
{

case "Chr_01":
Debug.Log("なによ"); //女の子セリフをコンソールに表示
break;
case "Chr_02":
Debug.Log("やあ"); //男の子セリフをコンソールに表示
break;

default:
Debug.Log("何もないようだ"); //オブジェクト名をコンソールに表示
break;
}
}
}
}
}

 ③カメラを入れて終わり

スクリプトを入れてコンパイルが通れば、

camera_object

にメインカメラを入れることができるので、

それを行ってゲームを実行すればセリフが再生されるはずです。

 

f:id:happyherpy:20200914014608p:plain

 

--- 

■参考にさせて頂いた記事

RayCastその4、Raycastを2Dで使う【Unity】 - (:3[kanのメモ帳]

マウスでクリックしたオブジェクトの情報を取得する - Qiita

【Unity】FPS系ゲーム制作に使えるraycastの使い方(3D・2D) – XR-Hub