Unityで2つのGameObjectがあります。それぞれGameObjectAとGameObjectBとします。
やりたいこと)2つです。
1)GameObjectAをドラッグしてGameObjectBに持っていくが途中で手を離すと最初の位置に戻る。
2)GameObjectAをドラッグしてGameObjectBまで持っていってタッチするとDebug.Logで「タッチしました。」と表示する。
環境)
Unity2017
言語:C#
PC:Mac
Android用開発
色々錯誤してドラッグして移動するまでは出来たのですが上記方法が結びつきません。
分かる方ヒントでも良いので教えて下さい。
★回答をいただいた事を加味して修正しました。
下記スクリプトをGameObjectAにアタッチしています。
GameObjectBのTagをDroppableFieldにしました。
using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; // Imageコンポーネントを必要とする [RequireComponent ( typeof ( Image ) )] // ドラッグとドロップに関するインターフェースを実装する public class DragAndDrop : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler, IDropHandler { // ドラッグ前の位置 private Vector2 prevPos; public void OnBeginDrag ( PointerEventData eventData ) { // ドラッグ前の位置を記憶しておく prevPos = transform.position; Debug.Log("OnBeginDrag"); } public void OnDrag ( PointerEventData eventData ) { // ドラッグ中は位置を更新する transform.position = eventData.position; Debug.Log("OnDrag"); } public void OnEndDrag ( PointerEventData eventData ) { // ドラッグ前の位置に戻す transform.position = prevPos; Debug.Log("OnEndDrag"); } public void OnDrop ( PointerEventData eventData ) { Debug.Log("OnDrop"); var raycastResults = new List<RaycastResult>(); EventSystem.current.RaycastAll ( eventData, raycastResults ); foreach ( var hit in raycastResults ) { // もし DroppableField の上なら、その位置に固定する if ( hit.gameObject.CompareTag ( "DroppableField" ) ) { transform.position = hit.gameObject.transform.position; this.enabled = false; } } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/05 08:18
2018/05/05 09:35 編集
2018/05/06 03:50
2018/05/06 04:38
2018/05/06 05:39
2018/05/06 06:40
2018/05/06 06:57