- オブジェクトをドラッグして動かしたい!
- ドロップと同時に重力をつけたい
その悩みを解決します。
【OnMouseDown】と【OnMouseDrag】メソッドを使って実装していきます。
Unityでオブジェクトをドラックして動かし、ドロップと同時に重力をつけて落とす方法
こんな感じになりんす
オブジェクト(スプライト)を自由自在に動かして、ドロップと同時に重力がつき落ちます。
オブジェクトの状態
- オブジェクトにColliderがアタッチされている
- オブジェクトにRigidbody2Dがアタッチされている
- Rigidbody2Dの【Gravity Scale】が0にしている
- オブジェクトにスクリプトがアタッチされている
この状態にしておいてください。
Rigidbody2Dの【Gravity Scale】をゼロにしておいてください。
今回はオブジェクトに【BakudanController】スクリプトがアタッチされているので、そのスクリプトを編集していきます。
スクリプト
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】を制御してます。
おわりに
スクリプトの説明はのちのち追加していきます。
オブジェクトをドラックして動かし、ドロップと同時に重力をつけて落とす方法でした。
ドラッグして動して離した瞬間に落ちるようにしたんだけど、落ちるスピードが早すぎてただオブジェクトが破壊させたみたいになったん。#unity #unity2d #ゲーム開発 pic.twitter.com/Ki0nONAAFW
— さぎのみや (@saginomiya8) October 26, 2018
さぎのみや(@saginomiya8)でした。
コメント