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

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

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

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

Q&A

解決済

1回答

456閲覧

enum型に入れた数字等をしりたい

manmanJ

総合スコア19

Unity

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

0グッド

0クリップ

投稿2020/03/29 19:30

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerItemInv : MonoBehaviour { public enum ItemType { Sikaku, maru, ken, Escape1, Defense1, }; public Dictionary<ItemType, int> ItemKoDictionary = new Dictionary<ItemType, int>(); public Dictionary<ItemType, bool> ItemDictionary = new Dictionary<ItemType, bool>(); // Start is called before the first frame update void Start() { ItemKoDictionary [ItemType. Sikaku] = 0; ItemKoDictionary [ItemType. maru] = 0; ItemKoDictionary [ItemType. ken] = 0; ItemKoDictionary [ItemType. Escape1] = 0; ItemKoDictionary [ItemType. Defense1] = 0; } // Update is called once per frame void Update() { if(ItemKoDictionary [ItemType. Sikaku] == 0) {ItemDictionary[ItemType. Sikaku] = false;} if(ItemKoDictionary [ItemType.maru] == 0) {ItemDictionary [ItemType.maru] = false;} if(ItemKoDictionary [ItemType. ken] == 0) {ItemDictionary [ItemType. ken] = false;} if(ItemKoDictionary [ItemType.Escape1] == 0) {ItemDictionary [ItemType.Escape1] = false;} if(ItemKoDictionary [ItemType. Defense1] ==0) {ItemDictionary [ItemType. Defense1] =false;} if(ItemKoDictionary [ItemType. Sikaku] >= 1) {ItemDictionary[ItemType. Sikaku] = true;} if(ItemKoDictionary [ItemType.maru] >= 1) {ItemDictionary [ItemType.maru] =true;} if(ItemKoDictionary [ItemType. ken] >= 1) {ItemDictionary [ItemType. ken] = true;} if(ItemKoDictionary [ItemType.Escape1] >= 1) {ItemDictionary [ItemType.Escape1] = true;} if(ItemKoDictionary [ItemType. Defense1] >= 1) {ItemDictionary [ItemType. Defense1] =true;} Debug.Log("数字" + (int)ItemType. Defense1); Debug.Log("文字" + ItemDictionary.GetBool("Sikaku")); } }

Debug.Log("文字" + ItemDictionary.GetBool("Sikaku"));
enum型にいれた数字などを知りたいのですがどうすればいいでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問から察するにこういうことですか?

Debug.Log("文字" + ItemDictionary[ItemType.Sikaku]);

ちなみにそうであるなら、厳密にはenum型ではなくDictionary<TKey, TValue>型ですね。

投稿2020/03/30 00:26

edo_m18

総合スコア2283

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

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

manmanJ

2020/03/30 02:06

そうです! true,falseと同じような形で数字も取得できるとおもってましたがちがうのですね もしかして2つの情報はいれれないんですか? Dictionary<TKey, TValue>型調べてみます! ありがとうございます!
edo_m18

2020/03/30 04:04

true / false(bool)の場合も取得の仕方は同様ですよ。というか、内容によらずDictionaryの使い方は前述のようにします。 ちなみに「ふたつの情報」というのがちょっと分からなかったのですが、これはどういうことでしょうか?
manmanJ

2020/03/30 13:24

Dictionary<TKey, TValue>型に数字と真偽の情報をいれれないかなと if(ItemKoDictionary [ItemType. Sikaku] == 0) {ItemDictionary[ItemType. Sikaku] = false;} で0の情報がfalseに変換されているのでしょうか? すいませんほとんど独学で教材にたよってないのでわかりにくいかもしれませんが
manmanJ

2020/03/30 16:27

勘違いしてました Dictionary<ItemType, int> ItemKoDictionaryとDictionary<ItemType, bool> ItemDictionary とルールを決めていたので両方検出はできませんでした Debug.Log("数字" + (int)ItemType. Defense1); で順番?を取得できるので一つの型で何個も情報入れれると勘違いしていました
edo_m18

2020/03/30 23:03

なるほど。enumは内部的には(デフォルトでは)ただのintなので、当然int型にキャストすることができます。まぁ言ってしまえば、intだと分かりづらいものに名前をつけている、という感じでしょうか。 もしひとつのキーに複数の値を入れるとしたら、値を専用のクラスにすることで対応できますよ。 ``` public class DataType { public int Number = 0; public bool Check = false; } // ----------- private Dictionary<ItemType, DataType> _database = new Dictionary<ItemType, DataType>(); // ----------- DataType data = new DataType { Number = 1, Check = true, }; _database.Add(ItemType.Sikaku, data); // ----------- _database[ItemType.Sikaku].Check = false; ``` みたいな感じで使うことができます。
manmanJ

2020/03/31 05:39

やりました! public class DataType { public int Number = 0; } public class AAType { public int Number = 0; } みたなことをするとNumberの名前は変更できないみたいですね 知識不足かもしれませんけど
edo_m18

2020/03/31 07:12

Numberの名前とはどういうことでしょう? どういうことをやりたくてそれを意識した感じですか?
manmanJ

2020/03/31 15:12

public class SkilType { public string Name { get; set; } public int SkilNo { get; set; }//0使えない、覚えていない、今の装備じゃ使えない1戦闘中使える2戦闘中使えない3両方使える public int AP { get; set; } } public class AutoType { public string Name { get; set; } public int AutoNo { get; set; }//0使えない、覚えていない、今の装備じゃ使えない1戦闘中使える2戦闘中使えない3両方使える public int AP { get; set; } } public class NewBehaviourScript : MonoBehaviour { public Dictionary<int, SkilType> SkilDict; public Dictionary<int, AutoType> AutoDict; // Start is called before the first frame update void Start() { SkilDict = new Dictionary<int, SkilType> { { 0, new SkilType{Name = "Attack1", SkilNo = 1, AP = 10 ,AAA=false,SS=1.5f,KK="回復"} }, { 1, new SkilType{ Name = "Attack2", SkilNo = 1, AP = 20 } }, }; AutoDict = new Dictionary<int, AutoType> { { 0, new AutoType{Name = "Attack1", AutoNo = 1, AP = 10 ,AAA=false,SS=1.5f,KK="回復"} }, { 1, new AutoType{ Name = "Attack2", AutoNo = 1, AP = 20 } }, }; } // Update is called once per frame void Update() { } } こんな感じですね UIをうごかすのにほぼ同じ箱?に入れて動かすのでスクリプトをわけずにやろうとおもいましたけど Assets\C#\UI\NewBehaviourScript.cs(10,14): error CS0101: The namespace '<global namespace>' already contains a definition for 'AutoType' とエラーがでてしまい断念しました
edo_m18

2020/03/31 22:37

↑のをコピペしてもこのエラーは発生しないですね。(逆に、未定義のものを指定しているのでそっちのエラーが出ますが) ちょっとC#に対しての知識が少ないと思うので、まずはC#自体について学ばれたほうがいいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問