見出し画像

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や文字の見やすさは別途修正する。
クマがダンスするボタンとかあったら面白いかも。

いいなと思ったら応援しよう!