[過去ログ] 【3Dゲームエンジン】Unity質問スレッド33 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
114: 2017/12/26(火)18:42 ID:Rpuwe1xT(2/2) AAS
どう見てもキムチ
115: 2017/12/26(火)19:19 ID:yq5adPSI(4/4) AAS
公式どころか個人がやってる初心者講座サイトの1つでもやってれば普通に分かっていておかしくない内容だよな。
どんだけ何もやってない怠けものだよコイツって感じ
116: 名無し@キムチ 2017/12/26(火)19:58 ID:5fo0vrRf(1/2) AAS
ごく初歩的な質問ですが、何もさわってないのに、たまにシーン内でのオブジェクトの位置が変わっていることがあるのですが、それは何故でしょうか?
同じく何もしないのに、コンポーネントが外れていたり、インスペクターの値が変わっていることもあります。
これは非常に困るので、位置や値が自分で変えるまでは絶対に変わらない対処法をご教示おねがいいたします!!!
117: 名無し@キムチ 2017/12/26(火)20:03 ID:5fo0vrRf(2/2) AAS
なお>>113は当方ではないですよ。当方、無意味なコテ外しはしませんw
118
(3): 2017/12/26(火)20:26 ID:O9PscLer(1) AAS
シーン遷移時に引き継ぎたい変数をどの手段から選べばいいか迷ってるんですけど、

1 static変数として持つ
2 ScriptableObjectを作ってそこに一時保管しておく
3 dontdestroyで変数の入ったスクリプトがアタッチされているオブジェクトを壊さず持っていく
4 外部のdb等に一時保管しておく

辺りで迷ってるのですが、ケースバイケースだとは思うのですがどれがいいのかアドバイスお願いします。
1 なるべくstatic使わない方が初心者には良い とたまに聞きます。
  似た名前のローカル変数を複数使っているので混乱する可能性もあるかなと

2 基本的に変動しない小さいマスターデータをdb代わりに使う事が多い と見ました
  こういった使い方には適さないのかもと迷いました

3 普通のゲームと同じくいくつかのシーンをループして進めていくのでオブジェクトが被らないようにシングルトンにする手間や
  処理は一切入れず変数入れとしてこの処理をするならScriotbleObjectでいいのかな?と思ったり

4 形式にもよるのでしょうが一時的な変数をイチイチ外部に書き出すのはどうなのかと
119: 2017/12/26(火)21:20 ID:ef3cEapS(6/11) AAS
当方、キムチでも、113でも、117でもありませんがw
120: 2017/12/26(火)21:27 ID:ef3cEapS(7/11) AAS
>>111

ボタンは引数なしで呼び出すだけだから簡単だけど、
スライダーは引数をどうやって受け取るかがわからなかったのでした

少なくとも公式のオンラインマニュアルからは探せず・・・
UIのインスペクターのリストをよーく見たら、
引数ありのメソッドと同名の、引く数なしのメソッドが上の方に見つかって解決したけど

>>99

やっぱり、リスト最上段のDynamic floatの直下にあるところをみると、
コレ(@)がUnity側で用意した機能なんでしょうね・・・
121
(2): 2017/12/26(火)21:32 ID:ycBgqB9O(1) AAS
>>118
何が消えてOKで、何が消えたら不味いのか、切り分けが分からない
例えば、セーブ/ロード付けるなら、シーン移動時にセーブとロード
するから結局同じ事じゃないの?
122
(1): 2017/12/26(火)21:36 ID:ef3cEapS(8/11) AAS
>>118

個人的には「3」を使ってます!

最初のLoad用のシーン0でフラグ管理用のオブジェクトを「DontDestroy」設定して、
その後はシーン1へ遷移して、以降はシーン0へは戻りません
(戻ると、「DontDestroy」設定を繰り返してしまうので・・・)

フラグ管理用のオブジェクトに載せたスクリプト内では、Start()内で、
ゲームを通してシーン間で共有する変数を全て「public」で宣言して初期値設定しています

そして、他のシーンの他のオブジェクトから、適宜呼び出して参照や代入して共有してますね
123: 2017/12/26(火)21:40 ID:ef3cEapS(9/11) AAS
>>121の言うように、
セーブありのRPGみたいな感じであれば、シーン変更前にセーブして、
シーン変更後にロードでも良い気がしますね

ゲーム終了後も保持したいなら、やはり外部保存だと思います

自分のは基本パスワード式のACTなので、
セーブシステムがないので、ゲーム内でのみ保持しています

パスワードの入力によって、フラグの初期値を変更して、
その後にゲーム開始となるようにしていますね
(まっすぐゲームスタートした場合は、全フラグを初期値で開始)
124
(1): 2017/12/26(火)23:19 ID:V8TVTato(1) AAS
>>118
言うまでもないが可能不可能で言えばどれでも出来る
と言うか、シーンロードでDestroyされないヒエラルキーに依存しないものならなんでも保持は可能

適不適で言うなら
1.staticである必要性はない。staticにすることによる弊害の方が多いため不適
2.ScriptableObjectは実行時はReadOnlyなデータのバリエーションを扱うもの。使い方が間違っているため当然不適
3.揮発性の情報ならこれが最適※
4.不揮発性の情報ならこれこれが最適※

※揮発性情報は意図せずプロセスが死亡した場合に消えても良いもの、不揮発性情報はプロセスが死亡しても残るべきものとする
125: 2017/12/26(火)23:39 ID:ef3cEapS(10/11) AAS
staticにする必要性ってどこにあるんだろう??

FCやSFCで言うところの、RAMじゃなくてROM的な機能か?
126: 2017/12/26(火)23:51 ID:ed3wWG+q(1) AAS
えっ
127: 2017/12/26(火)23:58 ID:ef3cEapS(11/11) AAS
ゲーム内で使いまわす、汎用関数を定義するとか?
128: 2017/12/27(水)00:01 ID:iZzjfAdD(1) AAS
@コンソメ
Aコンスト
Bコンビニ
129: 2017/12/27(水)00:48 ID:4kYoBCMG(1/10) AAS
>>121-122
>>124

回答ありがとうざいました。
3でやってみようと思います。
130: 2017/12/27(水)01:16 ID:2+M/n1Lm(1/4) AAS
ROM的な機能は、ScriptableObjectの方だったか

全オブジェクトからアクセスできる関数(メソッド)作成はStaticが良いかもしれない

どのスクリプトからでも
@RGB→HSL変換できるメソッド:RGBto.HSL(R, G, B, out H, out S, out L)
ARGB→HSV変換できるメソッド:RGBto.HSV(R, G, B, out H, out S, out V)
を作ってみた
131: 2017/12/27(水)01:19 ID:2+M/n1Lm(2/4) AAS
public static class RGBto {
 public static void HSL(int R, int G, int B, out int H, out int S, out int L){
  int Max = Mathf.Max (R, G, B);
  int Min = Mathf.Min (R, G, B);
 if (Max == Min) {
  H = 360;
 } else if (G == Max) {
  H = 60 * (B - R) / (Max - Min) + 120;
 } else if (B == Max) {
  H = 60 * (R - G) / (Max - Min) + 240;
 } else {
  H = 60 * (G - B) / (Max - Min);
  if (H < 0) H = H + 360;
 }
 if (Max == 0 || Min == 255){
  S = 0;
 } else {
  S = 255 * (Max - Min) / (255 - Mathf.Abs(Max + Min - 255));
 }
  L = (Max + Min)/2;
 }
132: 2017/12/27(水)01:19 ID:2+M/n1Lm(3/4) AAS
 public static void HSV(int R, int G, int B, out int H, out int S, out int V){
  int Max = Mathf.Max (R, G, B);
  int Min = Mathf.Min (R, G, B);
 if (Max == Min) {
  H = 360;
 } else if (G == Max) {
  H = 60 * (B - R) / (Max - Min) + 120;
 } else if (B == Max) {
  H = 60 * (R - G) / (Max - Min) + 240;
 } else {
  H = 60 * (G - B) / (Max - Min);
  if (H < 0) H = H + 360;
 }
 if (Max == 0){
  S = 0;
 } else {
  S = 255 * (Max - Min) / Max;
 }
  V = Max;
 }
}

Hを求めるところはもっとまとめられるかも・・・
Hのみ0〜360(360で色相未定義)
RGB,SLVは0〜255
133: 2017/12/27(水)01:47 ID:+i3zpKSn(1/2) AAS
Stackoverflowみたいでいい感じじゃないの
134
(3): 2017/12/27(水)03:01 ID:4kYoBCMG(2/10) AAS
また質問なんですけど、
シーン遷移した後って前シーンからdontdestroyで持ってきたオブジェのスクリプト内で
getcomponentってできないですか?
gameobject.findで指定したオブジェクトを見つけるまでは大丈夫なのですが
ゲットコンポーネントするとNullReferenceExceptionが帰ってきます
同じシーン内に作ったなんらかからならちゃんと動くのですが
135: 2017/12/27(水)03:07 ID:4kYoBCMG(3/10) AAS
もしかするとfindも失敗してるのかもしれませんが、
sceneをパスに指定するようなことが必要になるのでしょうか?
dontrestroyしたオブジェクトはdontdestroyの子みたいな表示になりますし
共通シーン内でしか受け渡しできないとかなのでしょうか?
136
(1): 2017/12/27(水)12:43 ID:YC5nHwtt(1) AAS
全部自作した奴が偉い君は
ガワだけ張り替えて大当たりするようなソシャゲが
天下取ってる現状に発狂してそう
137: 2017/12/27(水)12:54 ID:WZqeNEin(1/6) AAS
>>103

UnityのUIのボタンのフォーカスとフォーカス対象の設定
外部リンク:gametukurikata.com
>あらかじめボタン1つがフォーカスされていないと他のボタンの選択が出来ません
>EventSystemに最初に選択するボタンの設定は出来ます

>>89 >>91

[UI] スライダーで変更した値を取得できない現象に対処した [Unity]
外部リンク[html]:negilab-unity.com
>スライダーの変更値を float として取得するのではなく、Slider.value 変数として取得するように書き換えたところ、問題なく取得できました
>スライダーのインスペクタで、引数にスライダーのオブジェクトを指定

uGUIのSliderの値をスクリプト側で受け取る方法
外部リンク[html]:unitymemo.blog.jp
>SliderをGetComponentしてvalueを参照することでスライド値を参照できます
>OnValueChangedに定義したメソッドでスライド値を受け取る方法
>メソッドを選択する際、一番上のほうの「redSlider」を選択する事
>下のほうにも「redSlider(float)」がありますが、こちらを選んでも正しく値を渡すことは出来ません
138: 2017/12/27(水)12:57 ID:WZqeNEin(2/6) AAS
>>102

Unity : 3Dシーン内のCanvasが邪魔
外部リンク:indie-du.com
>UnityがCanvasの1ピクセルを1unitとして計算して表示
>1unitは1メートルなので、100ピクセルのUIは100メートルで描画
>Canvasの左下が原点(0, 0, 0)に合っている
139: 2017/12/27(水)14:56 ID:+i3zpKSn(2/2) AAS
見ての通り、質問せずに最初から自分でググってれば数分で解決している問題が多いな。
自分でググらないといけない事を人にググってもらってるだけなんだから。
140
(1): 2017/12/27(水)17:26 ID:u5IVM9F6(1) AAS
カンバス、そんなに邪魔?
消しちゃえばいいやん。必要な時にtrueにしてさ。
141: 2017/12/27(水)18:22 ID:WZqeNEin(3/6) AAS
>>140
そうだよね
GUIの表示だけoffにすれば済む話だよね
142
(1): 2017/12/27(水)18:41 ID:WZqeNEin(4/6) AAS
>>134
何をGetcomponentしたいの?
Sceneを指定したりはしないはず

ObjectはFindされているんでしょ?
obj内にObjectが入っている状態で、スクリプトをGetcomponentしたいなら、
スクリプト名 s = obj.GetComponent<スクリプト名>();

そのスクリプト内の変数をゲットしたいなら
s.変数名

変数は引用元のスクリプトの最初にpublicで宣言しておいて
143
(1): 2017/12/27(水)18:54 ID:fBJY1RTE(1/6) AAS
やってみたがFindもGetComponentも普通に出来るよな

検索範囲は明示がないけどHierarchyウインドに表示されてる物は
全捜索するようで、シーンが分かれていようが全く関係がない
(Updateで使うなってのは、毎回Hierarchy全捜索されたら洒落にならん)
1-
あと 859 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.016s