Photo by
nokka3
ARクマ教育アプリ進捗③
ARクマ
床認識させて、クマとかわいいクマを出す処理を実装
1. 床認識させる
1. 画面をタップした場所の「少し前(手前)」に出す
2. 出現したクマが「カメラ(プレイヤーの正面)」を向くようにした
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class Raycast : MonoBehaviour
{
[SerializeField] private GameObject selectedPrefab; // クマ1
[SerializeField] private GameObject otherBearPrefab; // クマ2
[SerializeField] private ARRaycastManager m_RaycastManager;
[SerializeField] private Camera arCamera; // カメラ参照
private List<ARRaycastHit> hits = new List<ARRaycastHit>();
// クマ1を出現
public void SpawnBear()
{
SpawnAtScreenCenter(selectedPrefab);
}
// クマ2を出現
public void SpawnOtherBear()
{
SpawnAtScreenCenter(otherBearPrefab);
}
// 共通処理
private void SpawnAtScreenCenter(GameObject prefab)
{
Vector2 screenCenter = new Vector2(Screen.width / 2f, Screen.height / 2f);
if (m_RaycastManager.Raycast(screenCenter, hits, TrackableType.PlaneWithinPolygon))
{
Pose hitPose = hits[0].pose;
// ヒット位置を少し手前にずらす(カメラ方向に -0.5m)
Vector3 offset = arCamera.transform.forward * -0.5f;
Vector3 spawnPosition = hitPose.position + offset;
// クマを出現させる
GameObject bear = Instantiate(prefab, spawnPosition, Quaternion.identity);
// カメラの方向を向かせる
Vector3 lookDirection = arCamera.transform.position - bear.transform.position;
lookDirection.y = 0; // 水平にのみ回転
bear.transform.rotation = Quaternion.LookRotation(lookDirection);
Debug.Log($"{prefab.name} 出現!");
}
else
{
Debug.Log("Raycastヒットせず");
}
}
}AR画面UI
こちらも前回のV0で作成してもらい、以下のイメージを使用

要素ごとに取り出して、配置。
ボタンを押したらクマが出るように設定。
クマ3Dモデル
クマの3DモデルをAsset Storeからインストール。
ボクセルでいい感じのクマがなかった...。(時間あればBlenderで作ろうかな..)
本物っぽいクマと、他にあったかわいいクマを配置、アニメーションを付けて、設定する。
動作確認。



動き自体はできた。
UIや文字の見やすさは別途修正する。
クマがダンスするボタンとかあったら面白いかも。
