Notifications
bg
かんぴょう
Prashalt - Student
Japan
0
Likes
2
Followers
1
Connection
All
Articles0
Games0
Showcases0
Column0
Jobs0
こんにちは。
いつもお世話になっております。

今回、ご相談したいのはGUIの最適化についてです。

今同じような仕組みを持つGUIを4つ並べようと思っています。(各キャラクターに1つずつ必要なため)
このGUIは、ボタンを押すと次のステップ用のボタンが表示されるというものなのです。
裏の仕様は以下のパターンのどちらが最適でしょうか?

①次のステップ用のオブジェクトも含めて全く同じゲームオブジェクトを4つ作る。
②次のステップ用のオブジェクトをPrefabに登録しその都度生成・削除する。
③裏で一つだけ次のステップ用のオブジェクトを用意しておき、そのオブジェクトの位置・表示、非表示を変更することで4つあるように見せかける。

①は、メモリの消費量が多そうですよね。
②は、純粋に処理が重そう。
③は、2つのGUIを並列的に操作できなくなるという制約がありますよね。

上記以外でも構いません。2Dゲームですのであまり最適化は考えなくてもよいのかなとも思いましたが、作るのであればより良いものをと思い相談させていただくことにしました。
ご教授お願いいたします。

4 months ago
Reply@Tatsuhiko Yamamura (山村達彦)作りたいUIのイメージが出来ないため、一般的な適当な意見ですが… ① メモリ負荷は10年前ならともかく、現状の一般的な環境では誤差なので気にしなくて良いです。最も簡単に実装できますが、量が増えると管理が面倒になります。 ② 負荷は階層や量にもよりますが概ね微々たるものですので、そこまで気にしなくても良いです。一般的なアプローチです。多少のコードが必要ですが、そこまで面倒ではありません。  全く同じPrefabを生成・破棄を繰り返す形ならば、オブジェクトプーリングのような仕組みを検討するのが良いかもしれません。 ③ シェーダー芸でアニメーションするか、ボタン数が膨大(1万)とかにならない限りは見ないタイプだと思います。UIの構造を最初から実装するレベルで色々と努力が必要です。早すぎる最適化に該当するので、上2つで問題があったときに初めて検討するのが良さそうです。
ご返答ありがとうございます。Prefabを使った仕様にしようと思います!
作りたいUIのイメージが出来ないため、一般的な適当な意見ですが… ① メモリ負荷は10年前ならともかく、現状の一般的な環境では誤差なので気にしなくて良いです。最も簡単に実装できますが、量が増えると管理が面倒になります。 ② 負荷は階層や量にもよりますが概ね微々たるものですので、そこまで気にしなくても良いです。一般的なアプローチです。多少のコードが必要ですが、そこまで面倒ではありません。  全く同じPrefabを生成・破棄を繰り返す形ならば、オブジェクトプーリングのような仕組みを検討するのが良いかもしれません。 ③ シェーダー芸でアニメーションするか、ボタン数が膨大(1万)とかにならない限りは見ないタイプだと思います。UIの構造を最初から実装するレベルで色々と努力が必要です。早すぎる最適化に該当するので、上2つで問題があったときに初めて検討するのが良さそうです。
いつもお世話になっております。
今回、4つのボタンを押すと押したボタンの色を変えるということをしようと実装しました。
code
~~~~~~略~~~~~~~~
foreach(var _button in _skillLineButton)
{
var _colors = _button.GetComponent<Button>().colors;
if(value == i)
{
_colors.normalColor = new Color(35, 244, 255);
Debug.Log("colorを変えます: " + _button.GetComponentInChildren<Text>().text);
}
else
{
_colors.normalColor = new Color(255, 255, 255);
Debug.Log("colorを戻します: " + _button.GetComponentInChildren<Text>().text);
}
var _buttonComponent = _button.GetComponent<Button>();
_buttonComponent.colors = _colors;
value++;
}

上記の、コードでは色を変更することはできませんでした。
色々デバックしてみたのですが、私の実力では原因を特定できませんでした。
ご教授お願い致します。

Yuji YASUHARA
Field Engineer
5 months ago
ぼくも、人と話してると自己解決することがしょっちゅうあります!
5 months ago
Reply@Yuji YASUHARA私も実際にボタンの色を変えるコードを書いたことはないのですが、コードはいっけん問題がなさそうに見えます。 ただドキュメントによると https://docs.unity3d.com/2018.3/Documentation/ScriptReference/UI.Button.html#UI.Selectable-colors >Modifications will not be visible if transition is not ColorTint. とありますね。 _buttonComponent.transition = Selectable.Transition.ColorTint; としておくとどうなるでしょう?
返信ありがとうございます。 試してみましたが、効果なく… 試しに、Imageコンポーネントの色を例の処理で変更しましたが、そちらもうまく動かず… デバックを色々してみて、手動で色を変えてからクリックすると色が元に戻る(elseの処理が押したボタンに適用されている?)といった症状がでました。←これは、Imageの色を変える処理をデバックしています。 処理を、ButtonのnormalColorを変更するものにして同じデバックしてみたところ、ボタンを押すと色の変化はなし。違うボタンを押すと白に戻る(正常)。もう一度色を手動で変えたボタンを押してみると何も起きませんでした。 と…この文を書いている途中で気が付きましたが確かButtonコンポーネントには押した際に色を変更できる設定がありましたね… 無駄なことにお付き合いしていただいて、申し訳ありません。 すっかり抜けていました。
Yuji YASUHARA
Field Engineer
5 months ago
私も実際にボタンの色を変えるコードを書いたことはないのですが、コードはいっけん問題がなさそうに見えます。 ただドキュメントによると https://docs.unity3d.com/2018.3/Documentation/ScriptReference/UI.Button.html#UI.Selectable-colors >Modifications will not be visible if transition is not ColorTint. とありますね。 _buttonComponent.transition = Selectable.Transition.ColorTint; としておくとどうなるでしょう?
5 months ago
iは、ボタンの番号です。0~3です。 変数名が分かりにくいのはよくないと思いましたので、変更しておきました。 よろしくお願いいたします。
いつもお世話になっております。

今開発しているゲームでは、とにかくいろいろやって経験を積もうという趣旨で友達のサーバーの開発担当とやっています。
その一環としてAsset Bundleを触ってみようと思いました。

ですが、現在のAsset Bundle事情が調べても二転三転していたので今回質問させていただきます。

①Asset Bundleを利用するにはどのようなライブラリを入れればよいのでしょうか?私が調べた限り、近頃は「Addressable Asset System」というものが主流のようですがあっていますでしょうか?

②Asset Bundle(Addressable Asset System)のチュートリアルのようなものはありますか?一度別のプロジェクトで、使い方を一通り確認したいと思っています。

ご教授お願い致します。

6 months ago
Reply@Tatsuhiko Yamamura (山村達彦)AssetBundleのビルドからダウンロード・利用まで面倒を見たくないならAddressableは楽で良いですね。一般的な主流という点では、正直な所AssetGraphや自前スクリプトでAssetBundleを管理し、自分でキャッシュするという形がメインになると思います。
ご返答ありがとうございます。今後、Untiyを使う企業等でAddressableは一般的になって行きますか?
AssetBundleのビルドからダウンロード・利用まで面倒を見たくないならAddressableは楽で良いですね。一般的な主流という点では、正直な所AssetGraphや自前スクリプトでAssetBundleを管理し、自分でキャッシュするという形がメインになると思います。
いつもお世話になっております。

私は、2DからUnityを始めたのですが3Dにも挑戦してみたいと思っています。
何度か挑戦したことはあるのですが、アニメーション等々で躓いてしまいます。
そこで、チュートリアルを活用しようと思っているのですが何かおすすめのチュートリアルはありませんか?
日本語でなくてもよいので、これをやれば3Dも少しはできるようになるものでお願いします。

7 months ago
Reply@tamtamこちらはどうでしょうか? ひとまず3Dゲームを1個完成させることができます。 https://learn.unity.com/project/john-lemon-s-haunted-jaunt-3d-beginner
ありがとうございます。 やってみます!
tamtam
Community Evangelist
7 months ago
こちらはどうでしょうか? ひとまず3Dゲームを1個完成させることができます。 https://learn.unity.com/project/john-lemon-s-haunted-jaunt-3d-beginner
ご無沙汰しております。
近頃は開発もうまくいっており、このグループにお世話にならずにすんでいたのですが、よくわからないバグ?に悩まされているのでご教授願いたく投稿させていただきます。

★状況
あるコードを書くたびにエラーを吐きます。Visual Studioではエラーではないので構文的には間違っていないかと思います。
★コード
List<Dictionary<string, dynamic>> _party = new List<Dictionary<string, dynamic>>();
_party[0]["character"]; ←エラー的にはこの文でエラーを吐いています。
★エラー
error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.Binder.Convert'


追記(1/29 12:36): 再起動するとエラーは消えています

7 months ago
Reply@Yuji YASUHARAhttp://light11.hatenadiary.com/entry/2019/05/19/172107 こちらに >これを解決するにはApi Compatibility Levelを.Net 4.x`に上げる必要があります。 とありますね。もし試していなければやってみてくださいませ。 ところで dynamic ですが、便利な反面かなり特殊な機能ですので、まずはこれを使わない方法を考えるべきところです。 https://ufcpp.net/study/csharp/misc_dynamic.html#dynamic こちらには、dynamicが動的なコード生成を行っている意味の解説があります。おそらくiOSやコンソールプラットフォームでは動作しないでしょう。 例示いただいたコード Dictionary<string, dynamic> は、単純には Dictionary<string, object> で代用できるように思いますし、実際はこれを処理する実装が確定しているでしょうから(誰かに使用してもらうライブラリを作成しているのではないでしょうから) interface を使った抽象化を試みるのが正しいと思います。 >近頃は開発もうまくいっており とのことでなによりです。また質問の内容が高度なことから、順調に学習を進めてらっしゃることが想像できます。なかなかできることではなく、素晴らしいですね。がんばってくださいませ。
年末のお忙しいところ、返答だけでなくアドバイスもくださり誠にありがとうございます。 ご返答を参考にまた、精進していきたいと存じます。
Yuji YASUHARA
Field Engineer
7 months ago
http://light11.hatenadiary.com/entry/2019/05/19/172107 こちらに >これを解決するにはApi Compatibility Levelを.Net 4.x`に上げる必要があります。 とありますね。もし試していなければやってみてくださいませ。 ところで dynamic ですが、便利な反面かなり特殊な機能ですので、まずはこれを使わない方法を考えるべきところです。 https://ufcpp.net/study/csharp/misc_dynamic.html#dynamic こちらには、dynamicが動的なコード生成を行っている意味の解説があります。おそらくiOSやコンソールプラットフォームでは動作しないでしょう。 例示いただいたコード Dictionary<string, dynamic> は、単純には Dictionary<string, object> で代用できるように思いますし、実際はこれを処理する実装が確定しているでしょうから(誰かに使用してもらうライブラリを作成しているのではないでしょうから) interface を使った抽象化を試みるのが正しいと思います。 >近頃は開発もうまくいっており とのことでなによりです。また質問の内容が高度なことから、順調に学習を進めてらっしゃることが想像できます。なかなかできることではなく、素晴らしいですね。がんばってくださいませ。
ご無沙汰しております。
ついに色々完成してきて、ビルドしてみたのですが、フルスクリーンではなく起動する方法が分かりません。設定は画像の通りです。ご教授よろしくお願いいたします。

9 months ago
お二方ご返事ありがとうございます。 私は、通常のウインドゥでの起動をしたいと思っています。文が分かりにくく申し訳ありません。 先日、レジストリを削除してやってみたのですが上手くいかず…そこで質問させていただいたのですが、名前を変更することで解消しました。 ありがとうございました。
Yuji YASUHARA
Field Engineer
9 months ago
tamtamさんのおっしゃる通りの設定で変更可能ですが、一度ビルドしたものを実行するとその設定を記憶する仕組みが働いて、うまく変更できないことがあるようです。Windowsの場合ですとレジストリを操作することで解消できるはずですが、手っ取り早く対応したい場合は Player Settings にある Product Name を別なものに変更してビルドしてみると、過去の設定が使われなくなるはずです。
tamtam
Community Evangelist
9 months ago
もしフルスクリーンでの軌道を希望であれば、スクショの中にある項目「Fullscreen Mode」を「Fullscreen Window」に設定すればOKなはずです。
About Me
Prashaltという学生でゲームを作ろう!という軽いノリのチームに所属しています。無知でご迷惑をおかけするかもしれませんがよろしくお願い致します。
See more
Skills
Certifications (0)
Import
See all
かんぴょう's liked projects (0)
No likes yet
Following (2)
Followers (2)
Following Companies (0)
Not following anyone yet