青いやつの進捗日記。

べんきょうのしんちょくをかいていきます。プログラミング初心者。

「UnityでCubeを床に投げるARKitアプリを作る」っていうチュートリアルやった。で、重力空間変更してみた。

www.atmarkit.co.jp

これですこれ。

まあそのとおりやれば出来ます。

UnityARHitTestExample.csにupdate()内に

if (Input.touchCount > 0 && cam != null) {
    //CreatePrimitiveで動的にGameObjectであるCubeを生成する
    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    //Cubeに適用するランダムな色を生成する
    Material material = new Material(Shader.Find("Diffuse")) {
         color = new Color(Random.value, Random.value, Random.value)
    };
    //ランダムに変化する色をCubeに適用する
    cube.GetComponent<Renderer>().material = material;
    //端末をタップして、ランダムな色のCubeを認識した平面上に投げ出すように追加していく
    //Cubeの大きさも0.2fとして指定している
    cube.transform.position = cam.transform.TransformPoint(0, 0, 0.5f);
    // cube.transform.position = cam.transform.TransformPoint(0.5f, 0, 0);
    cube.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
    //CubeにはRigidbodyを持たせて重力を与えておかないと、床の上には配置されないので注意が必要。Rigidbodyで重力を持たせないとCubeは宙に浮いた状態になる
    cube.AddComponent<Rigidbody>();
    //これでタップしたときに斜め上にキューブ飛んでいく?そして衝突計算
     cube.GetComponent<Rigidbody>().AddForce(cam.transform.TransformDirection(0,1f,2f),ForceMode.Impulse);
    // cube.GetComponent<Rigidbody>().AddForce(cam.transform.TransformDirection(2f, 0, 0),ForceMode.Impulse);
}

と書きます、と。 その際に、

#if UNITY_EDITOR

#endif

も消す必要あったので注意。たぶんupdateの最初と最後に書かれてるのですが、そのままでやったら動作しませんでした。

// cube.transform.position = cam.transform.TransformPoint(0.5f, 0, 0);

は私が追加した部分で、数値変えたら何起きるのかなー、って試したのでした。 これはCubeが生まれるポジション、ですね。
カメラ基準でどこから出てくるか、って感じでした。
元々はz軸で0.5fなんで、カメラの奥の方向に少しいったところからCubeが生まれます。

// cube.GetComponent<Rigidbody>().AddForce(cam.transform.TransformDirection(2f, 0, 0),ForceMode.Impulse);

これも私が追加した部分で、
これはCubeが生まれるときに飛ぶ方向、でした。 正確に言うと
AddForce(cam.transform.TransformDirection(2f, 0, 0), ForceMode.Impulse);
ここがそれを指します。
ForceMode.lmpulseはよくわかんなかったです。

docs.unity3d.com

docs.unity3d.com


で、このサンプルだとARKit1.0なんで、平面だけなんですけど、ARKit1.5以降なら、ちゃんと垂直も認識し、かつ認識したところを跳ね返ります。

でもそれだとまだ現実的というか、現実で壁にキューブ投げて床に落ちてるだけなんで、せっかくAR空間なんで非現実的にしたいなと思ったので、重力を変えてみました。

なんかコード色々書かなきゃなのかなあ、と思っていたら

qiita.com

Unity上でちょちょいと設定いじるだけでした。 f:id:XxGodmoonxX:20180725203259p:plain

これで、Z方向にマイナスに飛んでいきます。
https://qiita.com/jordan710k/items/568c17d1f3e2d763544b なんかたぶんカメラ起動したときに軸決まるから、そのときのZ軸の負の方向に重力かかる、と思います。
意外と簡単だった。