質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

1072閲覧

Unity2D・C#:Scroll View内のオブジェクトをドラッグ&ドロップでの配置可能な領域に相互に移動させたい

aXis_000

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/07/05 11:16

前提・実現したいこと

Unity2Dでカードゲームを作っているのですが、画面内のスペースの都合上墓地をポップアップウィンドウとして表示し、Scroll Viewを使用して実装しました。
ですが、Scroll View内のカードを外の配置可能な領域にドラッグ&ドロップで移動させようとすると、Scroll Viewの範囲外に出るとカードのテクスチャが描写されなくなります。(配置自体は可能)
加えて、外の配置可能な領域からScroll View内に配置することができません。
カードの移動はドラッグ&ドロップで統一したいので、この二つを可能にしたいです。
解決方法・手法わかる方いらっしゃいましたらご教授いただけると幸いです。

オブジェクトの親子関係

Unity

1- CardGame 2 - Main Camera 3 - Canvas 4 - PlayerHand 5 - Bench 6 - Batle 7 - Field 8 - Side 9 - Coin 10 - Text 11 - Text 12 - Return 13 - Text 14 - Trash 15 - Text 16 - PopUp_UI 17 - Button 18 - Text 19 - Scroll View 20 - Viewport 21 - Content 22 - Scrollbar Horizonal 23 - Sliding Area 24 - Scrollbar Vertical 25 - Sliding Area

ソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6//カードにアタッチしているスクリプト 7public class CardMovement : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler 8{ 9 public Transform cardParent; 10 11 public void OnBeginDrag(PointerEventData eventData) // ドラッグを始めるときに行う処理 12 { 13 cardParent = transform.parent; 14 transform.SetParent(cardParent.parent, false); 15 GetComponent<CanvasGroup>().blocksRaycasts = false; // blocksRaycastsをオフにする 16 } 17 18 public void OnDrag(PointerEventData eventData) // ドラッグした時に起こす処理 19 { 20 transform.position = eventData.position; 21 } 22 23 public void OnEndDrag(PointerEventData eventData) // カードを離したときに行う処理 24 { 25 transform.SetParent(cardParent, false); 26 GetComponent<CanvasGroup>().blocksRaycasts = true; // blocksRaycastsをオンにする 27 } 28}

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6// PlayerHand,Bench,Batle,Field,Side,Contentにアタッチしているスクリプト 7public class DropPlace : MonoBehaviour, IDropHandler 8{ 9 public void OnDrop(PointerEventData eventData) // ドロップされた時に行う処理 10 { 11 CardMovement card = eventData.pointerDrag.GetComponent<CardMovement>(); // ドラッグしてきた情報からCardMovementを取得 12 if (card != null) // もしカードがあれば、 13 { 14 card.cardParent = this.transform; // カードの親要素を自分(アタッチされてるオブジェクト)にする 15 } 16 } 17} 18

補足情報(FW/ツールのバージョンなど)

  • Unity 2020.3.13f1 Personal
  • Visual Studio 2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

BeginDrag した時に、その「カード」のオブジェクトを ScrollView の子オブジェクトから外して Canvas 直下の子オブジェクトに親子関係を移動すればよいと思います。

そのオブジェクトが ScrollView の子オブジェクトになっているから、ViewPort から出た時に見えなくなってしまうのでしょう。

投稿2022/03/02 02:50

bboydaisuke

総合スコア5277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問