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

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

新規登録して質問してみよう
ただいま回答率
85.30%
UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

2回答

1966閲覧

UnityでUIを円形に配置する方法

Shion0529

総合スコア21

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2020/04/16 13:06

http://tsubakit1.hateblo.jp/entry/2016/04/11/070637

に記載のUnityの機能「IDragHandler」「IEndDragHandler」の扱い方がわかりません。
円形にボタンを配置したいのですが、この記事に記載の通りにスクリプトを書き、円のイメージを用意し、ボタンも用意しました。スクリプトの使用方法を教えてもらいたいです。

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

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

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

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

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

guest

回答2

0

GetOffsetAngleとSetOffsetAngleはsimpleCirlceLayoutGroupスクリプト内のoffsetAngleを下記の様に設定した物ですか?

public float GetOffsetAngle { get { return offsetAngle; } } public float SetOffsetAngle { set { offsetAngle = value; } }

layout.GetOffsetAngleとlayout.SetOffsetAngleの部分が赤線エラーで表示されるので差し支えなければ、少しエラー部分のアドバイスをして頂けないでしょうか?

私も同じサイトを通して円形に配置したUIへのスクロールを実装しようとしている者です。

投稿2020/09/25 08:01

Kotaro22

総合スコア21

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

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

0

自己解決

空のゲームオブジェクトにアタッチし、親子関係でボタンを追加、その後に親にこのコードをアタッチすることにより解決```C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

[RequireComponent(typeof(SimpleCircleLayoutGroup))]
public class SimpleCircleInterface : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
private SimpleCircleLayoutGroup layout;
private RectTransform layoutRect;
/// <summary>
/// 前フレームのマウスの位置
/// </summary>
private Vector2 previousPosition;
private float acceleration;
private bool isDragged = false;

/// <summary> /// 摩擦力 /// </summary> [SerializeField] private float drag = 0.33f; /// <summary> /// 最大の回転スピード(度/フレーム) /// </summary> [SerializeField] private float limit = 10f; void Awake() { layout = GetComponent<SimpleCircleLayoutGroup>(); layoutRect = layout.GetComponent<RectTransform>(); } void Update() { if (!isDragged) { var splitAngle = 360f / layoutRect.childCount; var targetAngle = Mathf.Round(layout.GetOffsetAngle() / splitAngle) * splitAngle; acceleration += Mathf.Clamp((targetAngle - layout.GetOffsetAngle()) * Time.deltaTime * 6f, -0.3f, 0.3f); } // accelerationは、*Time.deltaTimeでの調節を必要としない. すでに、OnDrag()でフレーム当たりの量になっているから. layout.SetOffsetAngle(layout.GetOffsetAngle() + acceleration); var delta = -(drag * Mathf.Sign(acceleration)) * Time.deltaTime * 40f; // *Time.deltaTimeすると滅茶小さくなるので、40fで大きくする. if (Mathf.Abs(acceleration + delta) > Mathf.Abs(acceleration)) // 最後の力を摩擦で止められたなら acceleration = 0f; else acceleration += delta; } void IBeginDragHandler.OnBeginDrag(PointerEventData eventData) { previousPosition = eventData.position; acceleration = 0f; isDragged = true; } public void OnDrag(PointerEventData eventData) { var currentPosition = eventData.position; float degree = Vector2.SignedAngle(previousPosition - (Vector2)layoutRect.position, currentPosition - (Vector2)layoutRect.position); degree = Mathf.Clamp(degree, -limit, limit); acceleration = degree; previousPosition = currentPosition; } /// <summary> /// いまは、まだ何もしない. /// </summary> /// <param name="eventData"></param> public void OnEndDrag(PointerEventData eventData) { isDragged = false; }

}

投稿2020/04/19 10:23

Shion0529

総合スコア21

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

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

Kotaro22

2020/09/25 08:02

GetOffsetAngleとSetOffsetAngleはsimpleCirlceLayoutGroupスクリプト内のoffsetAngleを下記の様に設定した物ですか? public float GetOffsetAngle { get { return offsetAngle; } } public float SetOffsetAngle { set { offsetAngle = value; } } layout.GetOffsetAngleとlayout.SetOffsetAngleの部分が赤線エラーで表示されるので差し支えなければ、少しエラー部分のアドバイスをして頂けないでしょうか? 私も同じサイトを通して円形に配置したUIへのスクロールを実装しようとしている者です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問