AR 2日目 タップした位置にオブジェクトを配置するscriptファイルについて
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
[RequireComponent(typeof(ARRaycastManager))]
public class Spawn : MonoBehaviour
{
[SerializeField]//1)
GameObject objectPrefab;
public TrackableType type;
ARRaycastManager raycastManager;
List<ARRaycastHit> hitResults = new List<ARRaycastHit>();
void Start()
{
raycastManager = GetComponent<ARRaycastManager>();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (raycastManager.Raycast(Input.GetTouch(0).position, hitResults, TrackableType.All))
{
Instantiate(objectPrefab, hitResults[0].pose.position, Quaternion.identity);
}
}
}
}
1)SerializeFieldってなに?
参考
[SerializeField]
変数をシリアライゼーションする。シリアライゼーションするとオブジェクトの状態をUnityが保持して、あとで再構築できる。つまり、Unity上で値をいじれるようになる。
[SerializeField] int num = 10;
こう言う書き方ならnumがUnityでいじれるようになるのだが、今回の [SerializeField]
だけだと、直後の領域を知りあら罪が走れるようになる。[]で表現するものを属性という。シリアライズは上記でも述べたように、出たー構造やオブジェクトの状態を保存、再構築できるようにすることなので、[SerializeField]
以下の変数をUnity上でいじれるようになってる。
-
TrackableTypeってなに?
どの面を検知するか。
TrackableType.All
なら指定した面全てについて -
ARRaycastManager raycastManager;ってなに?
ARRaycastManager使用しますよ、の宣言。 -
new List<ARRaycastHit>();ってなに?
ARRaycastHitは、レイキャストの情報を持ってる。
レイキャストとは、ある場所から、見えない光線を発射し、検知した平面とbつかる位置があるかどうか検知するもの。例えば、スプラトゥーンで打った弾が相手に当たったかどうかなどに使用される。
要するに、ARRaycastHit型のListなので、rayと平面がぶつかった際の情報を蓄える役割。 -
raycastManager.Raycast(Input.GetTouch(0).position, hitResults, TrackableType.All)って?
Raycastメソッドは、タップした画面の座標と、そこから発射されるrayと、ぶつかった平面の座標を取得し、データ構造に入れる。
Raycast(ray発射位置, どこに保存する, 当たる面の対象)
Discussion