[Unity] 3D球体の上を移動する方法。

(2022/03/21)
の画像

まだまだ改善点は多いですが、球体の上を移動するゲームオブジェクトを作ることができたのでその方法を書き残しておきます。

使用したUnityのバージョン:2020.3.30f1

目次

  • 完成したもの
  • 作り方 ①ゲームオブジェクトの準備
  • 作り方 ②コード
  • 問題点
  • 完成したもの

    下のgifのように、Cubeが下に落ちることなく球体の上を移動することが出来るようにしました。

    球体の上を移動する方法。

    作り方 ①ゲームオブジェクトの準備

    まず、使用するゲームオブジェクトを準備していきます。

    下の画像のようにSphereとCubeを配置します。

    球体の上を移動する方法。

    この時、CubeとSphereのx座標とz座標が同じになるようにしてください。(同じにしないと正しい挙動をしなくなる時があります。)
    ScaleはCubeが全て1、Sphereは全て10にしています。CubeにはRigidbodyをつけて、Use Gravityにチェックをつけてください。

    作り方 ②コード

    下のコードのスクリプトをCubeにアタッチしてください。

    public GameObject planet;
    
    float speed = 10f;
    
      void Start()
      {
    
      }
    
      void Update()
      {
        if (Input.GetKey(KeyCode.UpArrow)) {
         this.transform.position += transform.forward * speed * Time.deltaTime;
        }
    
        if (Input.GetKey(KeyCode.DownArrow)) {
         this.transform.position -= transform.forward * speed * Time.deltaTime;
         }
    
        if (Input.GetKey(KeyCode.LeftArrow)) {
           this.transform.Rotate(0,-1f,0);
         }
    
        if (Input.GetKey(KeyCode.RightArrow)) {
           this.transform.Rotate(0,1f,0);
         }
    
    
         Vector3 ground = planet.transform.position - this.transform.position;
         Physics.gravity  = ground * 9.81f;
      }
    

    30行目で重力の向きが球体になるように変えています。

    重力の向きの変え方については、こちらの記事に書いています。

    重力の向きを変える方法。
    [Unity] 重力の向きを変える方法。

    スクリプトをアタッチしたら、下の画像のように、PlanetにSphereを選択します。

    球体の上を移動する方法。

    上手くいけば、上にあったgif画像のようになるはずです。

    問題点

    ぱっと見は、問題がなさそうですがこの方法には問題点があります。例えば、Cubeが移動するスピードを早くするとどこかへ飛んで行ってしまったり、ゲーム開始時の位置を変えるとCubeが思ったように動かなかったりします。
    他にも、CapsuleなどのCube以外のゲームオブジェクトに対応できていないなど多くの問題点を抱えています。

     
    他の記事も見る
     
  • プライバシーポリシー