ParamlTblの値を一括でunityに取得する方法はありますか?

172 views
Skip to first unread message

koppu

unread,
Jan 25, 2020, 6:46:30 AM1/25/20
to 宴ユーザーグループ
Unityの習熟度:独学2年
宴のバージョン: 3.8.0
UnityのバージョンとOS:unity 2019.1.1f1  win10

お世話になります。

utageのParamlTblの値を一括でunityに取得する方法はありますか?

1行目のNameを連番にすれば自分でもできるとは思うのですが、
その場合、宴側で見づらく、使いづらくなってしまいます。

よろしくお願いします。

マッドネスラボ

unread,
Jan 25, 2020, 11:07:14 PM1/25/20
to utag...@googlegroups.com
一括でというのはどういう意味でしょうか?
「連番にすれば」とあるので、名前を指定せずに設定した順番で上から順に取得したいということでしょうか?


であれば、AdvEngine.Param.StructTblがシート名をキーにしたDictionaryで
さらにその中に、1シートのパラメーターテーブルのDictionaryがあります。
Dictionaryをキーを使わずに全て順番に取得したいのであれば、foreachを使ってください。


void Sample()
{
AdvParamStructTbl structTbl;
string structName = "シート名";
if (AdvEngine.Param.StructTbl.TryGetValue(structName, out structTbl))
{
var dictionary = structTbl.Tbl;
foreach ( var keyValue in dictionary)
{
//一行ぶんの情報
AdvParamStruct paramStruct = keyValue.Value;

string paramName = "パラメーター名";
AdvParamData param;
if (paramStruct.Tbl.TryGetValue(paramName, out param))
{
//型に合わせてキャストして取得
int count = (int)param.Parameter;
}
}
}
}


宴のパラメーターは、ユーザーが定義した型ごとにC#的なクラスが作られているわけではないです。
それをするにはソースコードを自動生成する必要があるので、危険なのでやっていません。
内部にアクセスしたいのであれば、基本的にはDictionaryやキャストを使ってアクセスすることになります。


koppu

unread,
Jan 26, 2020, 3:29:11 AM1/26/20
to 宴ユーザーグループ
ありがとうございます!
>一括でというのはどういう意味でしょうか?
for文などで取得できればと思っていました。


頂いたSampleを使ってintの列は取得できたのですが
stringの列は取得する方法がわかりませんでした。
大変お手数ですが stringの場合の取得方法を教えて頂けませんでしょうか。
よろしくおねがいします。

 //型に合わせてキャストして取得
                    int count = (int)param.Parameter;
                   //取得できました
                    string count = (string)param.Parameter;
                  //取得出来ませんでした(空欄になりました)

マッドネスラボ

unread,
Jan 26, 2020, 3:47:11 AM1/26/20
to 宴ユーザーグループ
プログラムは合っているかと思います。

エラーが出ずに空欄になるだけであれば、パラメーターの内容が空欄なのだと思います。

そのコードを実行したときにエラーが出るようでしたら、
エクセルのほうで設定した型とは違うものにアクセスしています。


koppu

unread,
Jan 26, 2020, 4:26:46 AM1/26/20
to 宴ユーザーグループ
ありがとうございます。
取得できました!

取得できなかった原因は 空欄の列があったせいのようです。
空欄の列を作らなければ問題ないようです。

法則がよくわかりませんが一応ご報告させて頂きます。
(空欄の列が2列続くと次の列が取得できないようですが
空欄の列が1列でも取得できない場合もありました。)

この取得できない場合、エラーは出ず空欄になりました。

マッドネスラボ

unread,
Jan 26, 2020, 4:34:35 AM1/26/20
to utag...@googlegroups.com
すみません、よく状況がわからないのですが
取得できないというのは空欄になるという意味ではないのですか?
エクセル上で空欄が初期値に設定されている場合は、プログラムで取得できるのも空欄の文字列になるはずです。その動作自体は合っていると思いますが。



koppu

unread,
Jan 26, 2020, 5:35:23 AM1/26/20
to 宴ユーザーグループ

コメント 2020-01-26 192434.jpg

すみません 説明ができていませんでした。
このようにC,D列が空欄の場合、(空欄の列が2列続く場合?)E列(nameの列)が取得できないようです。

コメント 2020-01-26 192434b.jpg

このように 空欄が1列の場合、name列を取得できることもある(?)ようでした。
どの場合でもエラーはでませんでした。

マッドネスラボ

unread,
Jan 27, 2020, 2:24:13 AM1/27/20
to 宴ユーザーグループ
ありがとうございます。
行全体が空欄になっていた場合の処理に不具合があったので修正しました。
添付のパッケージファイルをご確認ください。

FixParamTblBug.unitypackage

koppu

unread,
Feb 21, 2020, 3:01:05 AM2/21/20
to 宴ユーザーグループ
ありがとうございます。
試してみたところ取得できました。
Reply all
Reply to author
Forward
0 new messages