【ハルシオンブログ】Unityでオブジェクトの一覧を作成し、アイテムをタップすると選択中的なオブジェクトを表示する方法
少し暖かくなってきました。
その代わり花粉が暴れてきた今日この頃。
目がかゆい坂内です。
ポケットガール好評リリース中。
是非遊んでやってください。
URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
URL(iOS):https://itunes.apple.com/jp/app/id1539553611
宣伝から入りました。
さて、Unityのお話。
Unityでアイテムのリストを作成し、タップで選択中というオブジェクトをそのリストアイテムに出す。
こんな感じのことをしたい時。

こんな感じで作ってますよという紹介です。
(もっと簡単な方法あると思います)
アイテムを並べるためのスクロールビューを作成。
スクロールの必要もないんだけど、いっぱい並べた時用にスクロールにしてみた。

そしてCanvasに以下コードをくっつける。
[Blog0313.cs]
次に、リストのアイテムPrefabを作成。

このItemには以下のコードを張り付けます。
[ListItem.cs]
こんな感じの処理をしてみる。
実行するとこんな感じ。

選択した際に、選択されてるindexを各リストのオブジェクトに渡して、自分のindexと同じやつだけ選択中のオブジェクトを表示、違う場合は選択中のオブジェクトを非表示しているだけ。
特に何も考えないで作るとこんな感じでできます。
ということで、メモ的な感じでした。
では、あでゅ~ノシ
その代わり花粉が暴れてきた今日この頃。
目がかゆい坂内です。
ポケットガール好評リリース中。
是非遊んでやってください。
URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
URL(iOS):https://itunes.apple.com/jp/app/id1539553611
宣伝から入りました。
さて、Unityのお話。
Unityでアイテムのリストを作成し、タップで選択中というオブジェクトをそのリストアイテムに出す。
こんな感じのことをしたい時。

こんな感じで作ってますよという紹介です。
(もっと簡単な方法あると思います)
アイテムを並べるためのスクロールビューを作成。
スクロールの必要もないんだけど、いっぱい並べた時用にスクロールにしてみた。

そしてCanvasに以下コードをくっつける。
[Blog0313.cs]
using System.Collections.Generic;
using UnityEngine;
public class Blog0313 : MonoBehaviour
{
[SerializeField] ListItem listItemPref;
[System.Serializable]
public class Item {
public int itemCd;
public string itemName;
}
List<Item> items = new List<Item>();
List<ListItem> listItems = new List<ListItem>();
[SerializeField] Transform trnItemPlace;
int currentItemIndex;
private void Start() {
// アイテムのデータを10個生成
for (int i = 0; i < 10; i++) {
Item item = new Item();
item.itemCd = i;
item.itemName = "Item" + i;
items.Add(item);
}
// アイテムを生成
foreach (Item item in items) {
ListItem listItem = Instantiate(listItemPref, trnItemPlace, false);
listItem.Setup(item, SelectItem);
listItems.Add(listItem);
}
}
///
/// アイテムを選択する処理
/// </summary>
/// <param name="i"></param>
void SelectItem(int i) {
currentItemIndex = i;
// リスト更新
foreach (ListItem listItem in listItems) {
listItem.CheckSelect(currentItemIndex);
}
}
}
次に、リストのアイテムPrefabを作成。

このItemには以下のコードを張り付けます。
[ListItem.cs]
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System;
public class ListItem : MonoBehaviour
{
[SerializeField] TextMeshProUGUI lblItemName;
[SerializeField] Button btnSelect;
[SerializeField] GameObject objSelector;
int itemCd;
public void Setup(Blog0313.Item itemData, Action<int> SelectItem) {
objSelector.SetActive(false);
lblItemName.text = itemData.itemName;
this.itemCd = itemData.itemCd;
btnSelect.onClick.AddListener(() => SelectItem(itemData.itemCd));
}
///
/// 選択中マーク更新処理
/// </summary>
/// <param name="index"></param>
public void CheckSelect(int index) {
if (itemCd == index) {
objSelector.SetActive(true);
} else {
objSelector.SetActive(false);
}
}
}
こんな感じの処理をしてみる。
実行するとこんな感じ。

選択した際に、選択されてるindexを各リストのオブジェクトに渡して、自分のindexと同じやつだけ選択中のオブジェクトを表示、違う場合は選択中のオブジェクトを非表示しているだけ。
特に何も考えないで作るとこんな感じでできます。
ということで、メモ的な感じでした。
では、あでゅ~ノシ
Category: 開発日記(Unity)
| h o m e |