LoginSignup
1
1

More than 1 year has passed since last update.

Unityで簡単な玉転がしをしてみる(2:玉転がし編)

Last updated at Posted at 2021-05-25

前回の続き!

前回の玉転がしゲームの続きを作っていくよー。今回は玉を実際に転がしてみよう!編です。

ezgif.com-gif-maker (2).gif

物理演算を適用するために、重力を適用する方に「Rigidbody」、重力は適用しないが衝突対象になるものに「Colider」を適用させます。
ちなみに「Collider」はオブジェクトを追加した際に自動的に追加されます。
1.PNG

「Rigidbody」は「Add Component」から追加してあげる必要があります。
ezgif.com-gif-maker (3).gif

適用すれば板の上をボールが転がるように動かすことができます。迷路のステージに関してはCubeを組み合わせて頑張って作りました...
2.PNG
こんな感じで一個のオブジェクトの中に入れてあげれば同じ物体として扱われるため、物体を傾けても大丈夫です。

これで玉を転がす部分は完成なのですが、ちょっと今でも解決できていないバグ(?)があるので共有します。

問題点

フツーに何も考えずに実行すると以下のようになってしまいます...
ezgif.com-gif-maker (4).gif

おいおい当たり判定全然できてないじゃないか!と言いたいところなのですが、下図のように少し板を動かすとできるようになるんですね

ezgif.com-gif-maker (5).gif

とても謎ですが、もしできた場合は追記などで情報を追加しようと思います...

[2021年6月9日追記]
コメントいただきありがとうございます!colliderがスリープ状態になっていたことが原因だったようですね...
こちらのサイトを参考に実装させていただきます。ここのサイトにあるコードを参考にさせていただきます。
https://ftvoid.com/blog/post/728

追加で以下のコードをボールに適用します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class wakeupball : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        var body = GameObject.Find ("Sphere").GetComponent<Rigidbody> ();
        if (Input.GetKey(KeyCode.UpArrow )) {
            body.WakeUp();
        }else if (Input.GetKey(KeyCode.DownArrow)){
            body.WakeUp();
        }else if (Input.GetKey(KeyCode.RightArrow)){
            body.WakeUp();
        }else if(Input.GetKey(KeyCode.LeftArrow)){
            body.WakeUp();
        }

    }
}

上下左右のキーを押すことでRigidBodyがWakeupし、物理演算を動かせるということですね...

ezgif.com-gif-maker (6).gif

情報をいただいた方ありがとうございました。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1