【Unity2D】オブジェクトをドラッグして動かし、ドロップと同時に重力をつけて落とす方法

  • オブジェクトをドラッグして動かしたい!
  • ドロップと同時に重力をつけたい

その悩みを解決します。

【OnMouseDown】と【OnMouseDrag】メソッドを使って実装していきます。

目次

Unityでオブジェクトをドラックして動かし、ドロップと同時に重力をつけて落とす方法

こんな感じになりんす

Unityでドラックして動かし、ドロップ

オブジェクト(スプライト)を自由自在に動かして、ドロップと同時に重力がつき落ちます。

オブジェクトの状態

  • オブジェクトにColliderがアタッチされている
  • オブジェクトにRigidbody2Dがアタッチされている
  • Rigidbody2Dの【Gravity Scale】が0にしている
  • オブジェクトにスクリプトがアタッチされている

この状態にしておいてください。

オブジェクトの状態

Rigidbody2Dの【Gravity Scale】をゼロにしておいてください。

今回はオブジェクトに【BakudanController】スクリプトがアタッチされているので、そのスクリプトを編集していきます。

スクリプト

BakudanController.cs

using UnityEngine;
using System.Collections;

public class BakudanController : MonoBehaviour
{
    Vector3 screenPoint;
    Vector3 offset;

    Rigidbody2D rb;

    void Start()
{
        rb = this.GetComponent<Rigidbody2D>();
}

    void OnMouseDown()
    {
        this.screenPoint = Camera.main.WorldToScreenPoint(transform.position);
        this.offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
        rb.gravityScale = 0.5f;

    }

    void OnMouseDrag()
    {
        Vector3 currentScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint) + this.offset;
        transform.position = currentPosition;
    }
}

行間おかしくてゴメンなさい。

ドロップするタイミングで【Gravity Scale】を制御してます。

おわりに

スクリプトの説明はのちのち追加していきます。

オブジェクトをドラックして動かし、ドロップと同時に重力をつけて落とす方法でした。

さぎのみや(@saginomiya8)でした。

あわせて読みたい
【Unity2D&3Dサンプルゲーム】動画よりわかりやすく記事でゲームを作ろう【チュートリアル】 ▼この記事を先に見ておきましょう▼ https://miyagame.net/basis-cs/ 当サイトではUnityでのサンプルゲームを作成することができます。Unityでゲームを作っていきましょ...
Unityでドラッグをしたらオブジェクトを動かす

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次