SoftwareDesign3月号のARKit特集を読んで

概要

ARKit使って現実世界に猫を呼び出すアプリを一緒に作っていくお話が掲載されています。
すごい丁寧で分かりやすいし、作り方を一通り学びつつ、Unityの操作も学べて大変良い連続企画です。
Unity初心者なので、なんでなんだろうって思ったポイントをメモっておきます。
最初全く分からなかったのは2月号の内積で角度判定するやつ。
数式をかけるようになったらいつか書きたい。

環境

  • Unity
  • MonoDevelop
  • UnityARKitPlugin
  • Asset
    • Kitten のAssetがなくなっていた(3月号までではAssetStoreからDLできるとあった)
    • 公式githubから入手できた!!(4月号で捕捉されてた。ありがたし)

分からなかったこと

BallControl.cs

Ray ray = Camera.main.ScreenPointToRay(pos);
RaycastHit hit = new RaycastHit();
if(Physics.Raycast(ray, out hit) == false || hit.rigidbody == null){
・・・
}

という部分。

Ray

rayはある点から始まり、ある方向への無限の線。

// コンストラクタ
// originがある点, directionが方向
public Ray(Vector3 origin, Vector3 direction);

Camera.ScreenPointToRay(pos);

  • カメラのnear planeからpositionまでのワールドスペースのrayを返す。
  • posはここでは触った点
    • カメラから触った点までの3次元空間でのRayを返している

RaycastHit

  • Raycastから情報を得るために使う構造体。
    • 情報を入れ込むためにnew で箱を作る。
  • RaycastHit.rigidbody
    • ぶつかったcolliderのrigidbody

Physics.Raycast

Physics.Raycast(ray, out hit) == false
  • 引数のRayが何かcolliderと交わった場合、trueを返し、引数の hit 、つまりRaycastHit型のhitに、ぶつかった場所の情報が入る。
  • Rayが何もぶつからない場合、falseを返す。

結局

タッチした先にcollider付きのオブジェクトがない場合と、
collider付きのオブジェクトがあってもrigidbody付いてなかったらOK。
今回猫にColliderとrigidbodyを付けたから、 タッチした先に猫がいたら反応しない?のかな。
やってみる
(MacBookAirでやっていてbuildに大変手間取っています。)

参考にしたサイト

Unity - Scripting API: RaycastHit

Unity - Scripting API: Camera.ScreenPointToRay