フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他
次スレは>>950以降にできるだけ早く(できれば回答者が回答した後にでも余裕を持って)建てて下さい。
■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
http://www24.atwiki.jp/unity2ch/
●リンク
・Unity(日本公式サイト)
http://unity3d.com/jp
・マニュアル
http://docs.unity3d.com/ja/current/Manual/index.html
・チュートリアル
http://unity3d.com/jp/learn/tutorials
・スクリプトリファレンス
http://docs.unity3d.com/ja/current/ScriptReference/index.html
・FAQ
http://unity3d.com/jp/unity/faq
・MSDN
http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
前スレ
【3Dゲームエンジン】Unity質問スレッド32
http://mevius.5ch.net/test/read.cgi/gamedev/1509307535/
【3Dゲームエンジン】Unity質問スレッド33
■ このスレッドは過去ログ倉庫に格納されています
2017/12/19(火) 09:35:55.55ID:VZwsAqll
2017/12/26(火) 00:30:03.34ID:ef3cEapS
>>88
ありがとうございます!
実は回答いただく前に色々試したところ、
2つの解決法を見つけました!
@UIの方で、ValueChangeを渡すメソッドを選ぶ時に
一覧の中にある「メソッド名(float)」を選んではダメで、
一覧の一番上の方にある、「メソッド名」のみのを選ぶと、
スクリプトでは引数にvalueがfloatで渡されるようです・・・
スクリプトの方は、「メソッド名(float a)」で定義しているので、
aにvalueが入ってきました!
Aスクリプトの方で「メソッド名(slider)」で定義して、
UIの方で、ValueChangeを渡すメソッドを選ぶ時に、
渡すオブジェクト(slider)も指定してやると、
スクリプトでは引数に指定したsliderが渡されるようです
スクリプトの方は、「メソッド名(slider s)」で定義しているので、
「s.value」で、valueがfloatで得られました!
コンポーネントをゲットする方法は、
Aに近い感じですか??
ありがとうございます!
実は回答いただく前に色々試したところ、
2つの解決法を見つけました!
@UIの方で、ValueChangeを渡すメソッドを選ぶ時に
一覧の中にある「メソッド名(float)」を選んではダメで、
一覧の一番上の方にある、「メソッド名」のみのを選ぶと、
スクリプトでは引数にvalueがfloatで渡されるようです・・・
スクリプトの方は、「メソッド名(float a)」で定義しているので、
aにvalueが入ってきました!
Aスクリプトの方で「メソッド名(slider)」で定義して、
UIの方で、ValueChangeを渡すメソッドを選ぶ時に、
渡すオブジェクト(slider)も指定してやると、
スクリプトでは引数に指定したsliderが渡されるようです
スクリプトの方は、「メソッド名(slider s)」で定義しているので、
「s.value」で、valueがfloatで得られました!
コンポーネントをゲットする方法は、
Aに近い感じですか??
2017/12/26(火) 00:36:40.89ID:/Bbw4vw9
>>87
どっちも近くないです
どっちも近くないです
2017/12/26(火) 00:39:16.44ID:ef3cEapS
オブジェクトobjAに載せたスクリプトscrA
public void OnSliderX(Slider sliderX){
float x = sliderX.value;
Debug.Log (x);
}
public void OnSliderY(float a){
float y = a;
Debug.Log (y);
}
UIスライダーSliderXにおける、OnValueChanged(Single)
スクリプト:scrA
オブジェクト.メソッド:objA.OnSliderX
渡す値:SliderX(Slider)
UIスライダーSliderYにおける、OnValueChanged(Single)
スクリプト:scrA
オブジェクト.メソッド:objA.OnSliderY ・・・リスト最上段のDynamic floatの直下
渡す値:欄なし
↑
ちなみに、リスト途中の
オブジェクト.メソッド:objA.OnSliderY(float) だと
渡す値:0 ←変数を指定できず、数値(固定値) になるようで、失敗します!
public void OnSliderX(Slider sliderX){
float x = sliderX.value;
Debug.Log (x);
}
public void OnSliderY(float a){
float y = a;
Debug.Log (y);
}
UIスライダーSliderXにおける、OnValueChanged(Single)
スクリプト:scrA
オブジェクト.メソッド:objA.OnSliderX
渡す値:SliderX(Slider)
UIスライダーSliderYにおける、OnValueChanged(Single)
スクリプト:scrA
オブジェクト.メソッド:objA.OnSliderY ・・・リスト最上段のDynamic floatの直下
渡す値:欄なし
↑
ちなみに、リスト途中の
オブジェクト.メソッド:objA.OnSliderY(float) だと
渡す値:0 ←変数を指定できず、数値(固定値) になるようで、失敗します!
2017/12/26(火) 00:42:20.20ID:aR7RHPYW
通じないと思ったらキムチか
2017/12/26(火) 00:53:20.70ID:ef3cEapS
>>88
やってみました!
こんな感じでしょうか?
B引数は指定せずに、メソッドを呼び出して、
メソッド内で、GetComponent<Slider>().value から取得してみました!
public void OnSliderZ(){
float z = GameObject.Find("SliderZ").GetComponent<Slider>().value;
Debug.Log (z);
}
UIスライダーSliderZにおける、OnValueChanged(Single)
スクリプト:scrA
オブジェクト.メソッド:objA.OnSliderZ
渡す値:欄なし
@AB、どれも動作はするようです
一番簡単なのはAかも・・・
(当初やりたかった、floatで引数を送れるから)
やってみました!
こんな感じでしょうか?
B引数は指定せずに、メソッドを呼び出して、
メソッド内で、GetComponent<Slider>().value から取得してみました!
public void OnSliderZ(){
float z = GameObject.Find("SliderZ").GetComponent<Slider>().value;
Debug.Log (z);
}
UIスライダーSliderZにおける、OnValueChanged(Single)
スクリプト:scrA
オブジェクト.メソッド:objA.OnSliderZ
渡す値:欄なし
@AB、どれも動作はするようです
一番簡単なのはAかも・・・
(当初やりたかった、floatで引数を送れるから)
2017/12/26(火) 00:54:17.47ID:yq5adPSI
そのようだな
放置で
放置で
2017/12/26(火) 01:02:14.43ID:/Bbw4vw9
>>91
getcomponentはあってるけど呼び出し元はどこでもいい
どこからでも呼び出せるため汎用性が高く使用頻度が高いので86が示してくれた
何で色んなやり方があるのかを考えずに動けばいいとしか考えてないから一向に技術が向上せず質問ばかりになる
動けばいいスタンスで前へ進むことも時には必要だがあまりにも基礎的な部分が疎かに見えるよ
getcomponentはあってるけど呼び出し元はどこでもいい
どこからでも呼び出せるため汎用性が高く使用頻度が高いので86が示してくれた
何で色んなやり方があるのかを考えずに動けばいいとしか考えてないから一向に技術が向上せず質問ばかりになる
動けばいいスタンスで前へ進むことも時には必要だがあまりにも基礎的な部分が疎かに見えるよ
2017/12/26(火) 01:05:51.44ID:/Bbw4vw9
1時間で自己解決するような内容をわざわざ書き込むんじゃねぇ
つうか半年以上Unity触ってんだよね?
それでgetcomponentがよくわかってないってもうちょっと頑張れよって思う
下手すりゃ初日で取り入れるような内容だぞ
つうか半年以上Unity触ってんだよね?
それでgetcomponentがよくわかってないってもうちょっと頑張れよって思う
下手すりゃ初日で取り入れるような内容だぞ
2017/12/26(火) 01:27:46.39ID:aR7RHPYW
まぁ、喉元過ぎればどうでもいいやり方でも構わんが、
毎回コップの使い方忘れて憶える気すらなくて人に聞くってのはどうかと思う
毎回コップの使い方忘れて憶える気すらなくて人に聞くってのはどうかと思う
2017/12/26(火) 02:57:05.75ID:PvNvbClj
メモをする習慣を付けてみたらどうだとかいうアドバイスを送る。
2017/12/26(火) 08:27:49.72ID:ef3cEapS
2017/12/26(火) 08:31:50.53ID:ef3cEapS
聞かないで試行錯誤しても効率が悪いから、質問スレに聞いてるんだけどね
実際、自己解決した方法は汎用性が低い方法で、正解まで辿り着けなったし
UI回りは、他のゲーム空間に配置するオブジェクトとだいぶ勝手が違うし
ネットで引いてもなかなか体系的に書かれているところ少なくない?
(ボタンは多いけど、スライダーとかトグルはあんまりない)
実際、自己解決した方法は汎用性が低い方法で、正解まで辿り着けなったし
UI回りは、他のゲーム空間に配置するオブジェクトとだいぶ勝手が違うし
ネットで引いてもなかなか体系的に書かれているところ少なくない?
(ボタンは多いけど、スライダーとかトグルはあんまりない)
2017/12/26(火) 08:50:28.37ID:e7BUlWI3
100名前は開発中のものです。
2017/12/26(火) 10:01:11.29ID:/Bbw4vw9 UI的に正解w
そんな意味不明なアドバイスでこの程度のパフォーマンスを気にするの?
forはi--で処理したほうが良いとか言ってそう…
そんな意味不明なアドバイスでこの程度のパフォーマンスを気にするの?
forはi--で処理したほうが良いとか言ってそう…
101名前は開発中のものです。
2017/12/26(火) 10:03:25.43ID:/Bbw4vw9102名前は開発中のものです。
2017/12/26(火) 12:45:52.42ID:hFK9SmSE 74です
>>75-76
どうもです
確認してみたら、右上にでっかいキャンバスありました
シーンビューの範囲からはみ出ていたようです
UIは解像度に合わせてピクセル単位で入力していたので、
100ピクセルの位置が、100Unitになっていました
要は、スケールが違うから、カメラの撮影範囲外にいたんですね
他の3Dオブジェクトは-10〜+10Unit単位で配置されていたので
UIと他のオブジェクトで、配置する座標基準が違うんだったら、
シーンビューはUIと他のオブジェクトで分かれていたほうが操作しやすい気がする
どちみちゲームビューじゃないと合成されて表示されないなら
>>75-76
どうもです
確認してみたら、右上にでっかいキャンバスありました
シーンビューの範囲からはみ出ていたようです
UIは解像度に合わせてピクセル単位で入力していたので、
100ピクセルの位置が、100Unitになっていました
要は、スケールが違うから、カメラの撮影範囲外にいたんですね
他の3Dオブジェクトは-10〜+10Unit単位で配置されていたので
UIと他のオブジェクトで、配置する座標基準が違うんだったら、
シーンビューはUIと他のオブジェクトで分かれていたほうが操作しやすい気がする
どちみちゲームビューじゃないと合成されて表示されないなら
103名前は開発中のものです。
2017/12/26(火) 12:51:31.00ID:hFK9SmSE もう1つ質問です
uGUIのButtonは、各々をマウスで押すのが普通だと思うんですが、
カーソルで複数から選択して、Enterで押す機能は、
デフォルトの機能で用意されていますか??
インスペクターのNavicationでVerticalを選んでから、
Visualizeすると、各ボタンを結ぶ動線の矢印が表示されるから、
キー操作でのフォーカス移動できそうに見えるんですが、
テストプレイしても、キー操作を受け付けません
uGUIのButtonは、各々をマウスで押すのが普通だと思うんですが、
カーソルで複数から選択して、Enterで押す機能は、
デフォルトの機能で用意されていますか??
インスペクターのNavicationでVerticalを選んでから、
Visualizeすると、各ボタンを結ぶ動線の矢印が表示されるから、
キー操作でのフォーカス移動できそうに見えるんですが、
テストプレイしても、キー操作を受け付けません
104名前は開発中のものです。
2017/12/26(火) 16:38:15.98ID:yq5adPSI105名前は開発中のものです。
2017/12/26(火) 16:42:11.91ID:94NCEA31106名前は開発中のものです。
2017/12/26(火) 16:44:18.50ID:yq5adPSI >>98
あと自作してるのに効率って何?
手本や人から教わらないと自作できないの?
それって自作というより盗作や真似じゃねーの?
コピーや真似してるだけなのに自作だと思い込んでるの?
自作は試行錯誤の連続
お前が今どんな物作ってるのか知らないが
見た目が綺麗なユニティちゃんがグリグリ画面走ってる物作っていても
インベーダーゲームやマリオ1やブロック崩しやテトリスを最初に作った連中より劣ってるよ
彼らは作り方を誰にも教わらずに自分でやり方に気づき形にした人達だからな
プログラムが置いてあって弄っていたら、あれ?これこうしたらゲームみたいの作れるんじゃね?
と自分で試して誰にも聞かず参考本なんてものも見ないで作ってるからな
そしてそれが本当のゲーム作りだ
わかったか!盗作やろうの勘違いやろう!
おめえみたいのはアセット組み合わせてやってろや!
あと自作してるのに効率って何?
手本や人から教わらないと自作できないの?
それって自作というより盗作や真似じゃねーの?
コピーや真似してるだけなのに自作だと思い込んでるの?
自作は試行錯誤の連続
お前が今どんな物作ってるのか知らないが
見た目が綺麗なユニティちゃんがグリグリ画面走ってる物作っていても
インベーダーゲームやマリオ1やブロック崩しやテトリスを最初に作った連中より劣ってるよ
彼らは作り方を誰にも教わらずに自分でやり方に気づき形にした人達だからな
プログラムが置いてあって弄っていたら、あれ?これこうしたらゲームみたいの作れるんじゃね?
と自分で試して誰にも聞かず参考本なんてものも見ないで作ってるからな
そしてそれが本当のゲーム作りだ
わかったか!盗作やろうの勘違いやろう!
おめえみたいのはアセット組み合わせてやってろや!
107名前は開発中のものです。
2017/12/26(火) 16:49:30.04ID:/Bbw4vw9 >>102
スケールが違うから撮影範囲外に居るってのは違う
canvasはUIに特化するためにそういう仕組みになってる
3D空間上に居たら最前面に表示すべきUIとモデルの前後関係を注意しなければならなくなる
ゲームによってはカメラが移動しまくるからそれに合わせてUIの座標を追従させるとか馬鹿らしいだろ?
だからオーバーレイ表示する仕組みになってる
ただUIが3D空間上にいてほしいこともある
キャラクタのHPバーをそのキャラの頭上に表示させるとかね
そういうタイプのcanvasも設定できる
名称は忘れた、カメラオーバーレイと対になってるやつ
スケールが違うから撮影範囲外に居るってのは違う
canvasはUIに特化するためにそういう仕組みになってる
3D空間上に居たら最前面に表示すべきUIとモデルの前後関係を注意しなければならなくなる
ゲームによってはカメラが移動しまくるからそれに合わせてUIの座標を追従させるとか馬鹿らしいだろ?
だからオーバーレイ表示する仕組みになってる
ただUIが3D空間上にいてほしいこともある
キャラクタのHPバーをそのキャラの頭上に表示させるとかね
そういうタイプのcanvasも設定できる
名称は忘れた、カメラオーバーレイと対になってるやつ
108名前は開発中のものです。
2017/12/26(火) 16:52:15.90ID:sS7DQh8C アセットを買えばいいのにね
109名前は開発中のものです。
2017/12/26(火) 16:54:39.83ID:/Bbw4vw9 スライダーの件は1も2も3も別にどれも間違いでもない
実現したいことが実装できたならまぁそれでいい
ただ今後ちょっと仕様が異なるものが必要になったとき1つの手法しか知らなければまた質問する羽目になる
だから色んな手法を知ることは大事だしUI的に1が正解なんて結論には絶対にならない
スクリプトからスライダー生成する必要が出てきたらUI的に不正解な手法を取らなければならないとかエンジンとしてどうなんだって話
実現したいことが実装できたならまぁそれでいい
ただ今後ちょっと仕様が異なるものが必要になったとき1つの手法しか知らなければまた質問する羽目になる
だから色んな手法を知ることは大事だしUI的に1が正解なんて結論には絶対にならない
スクリプトからスライダー生成する必要が出てきたらUI的に不正解な手法を取らなければならないとかエンジンとしてどうなんだって話
110名前は開発中のものです。
2017/12/26(火) 17:41:22.57ID:Rpuwe1xT111名前は開発中のものです。
2017/12/26(火) 18:26:54.92ID:/Bbw4vw9 そもそもボタンの記事があるならスライダーの記事なんて無くてもマニュアル見れば後は大体分かると思うけどね
パーツ全部個別に説明が必要な設計ってオブジェクト指向とはなんだったのかってなるし
canvasは公式に説明あるし結構深く解説してるところもいっぱいある
というかスライダーの記事だって山ほどあるでしょ
コレで少ないって言うなら何も作れる気がしないわ
パーツ全部個別に説明が必要な設計ってオブジェクト指向とはなんだったのかってなるし
canvasは公式に説明あるし結構深く解説してるところもいっぱいある
というかスライダーの記事だって山ほどあるでしょ
コレで少ないって言うなら何も作れる気がしないわ
112名前は開発中のものです。
2017/12/26(火) 18:36:04.71ID:hFK9SmSE >>107
なるほど!
UIは他のオブジェクトと違ってゲーム空間に置いているというよりも、
キャンバスごとカメラのレンズ前に貼り付けている感じですね
EventSystemで、EventSystem(Script)というコンポーネントのFirstSelectedを指定してあげたら、
カーソルで他のボタンへ移動したり、Enterで押せるようになりました!
最初の状態では、UIにフォーカスが降りてないからキー入力に反応しないみたい
なるほど!
UIは他のオブジェクトと違ってゲーム空間に置いているというよりも、
キャンバスごとカメラのレンズ前に貼り付けている感じですね
EventSystemで、EventSystem(Script)というコンポーネントのFirstSelectedを指定してあげたら、
カーソルで他のボタンへ移動したり、Enterで押せるようになりました!
最初の状態では、UIにフォーカスが降りてないからキー入力に反応しないみたい
113名前は開発中のものです。
2017/12/26(火) 18:39:08.06ID:hFK9SmSE NavigationのExplicitを選んでみたら、
カーソルを押した時に、次にどのUIへ行くかを、上下左右ごとに指定できると知って驚愕!
便利ですね〜
UI関連が話題になっていて勉強になります!
カーソルを押した時に、次にどのUIへ行くかを、上下左右ごとに指定できると知って驚愕!
便利ですね〜
UI関連が話題になっていて勉強になります!
114名前は開発中のものです。
2017/12/26(火) 18:42:20.71ID:Rpuwe1xT どう見てもキムチ
115名前は開発中のものです。
2017/12/26(火) 19:19:33.08ID:yq5adPSI 公式どころか個人がやってる初心者講座サイトの1つでもやってれば普通に分かっていておかしくない内容だよな。
どんだけ何もやってない怠けものだよコイツって感じ
どんだけ何もやってない怠けものだよコイツって感じ
116名無し@キムチ
2017/12/26(火) 19:58:50.02ID:5fo0vrRf ごく初歩的な質問ですが、何もさわってないのに、たまにシーン内でのオブジェクトの位置が変わっていることがあるのですが、それは何故でしょうか?
同じく何もしないのに、コンポーネントが外れていたり、インスペクターの値が変わっていることもあります。
これは非常に困るので、位置や値が自分で変えるまでは絶対に変わらない対処法をご教示おねがいいたします!!!
同じく何もしないのに、コンポーネントが外れていたり、インスペクターの値が変わっていることもあります。
これは非常に困るので、位置や値が自分で変えるまでは絶対に変わらない対処法をご教示おねがいいたします!!!
117名無し@キムチ
2017/12/26(火) 20:03:01.61ID:5fo0vrRf なお>>113は当方ではないですよ。当方、無意味なコテ外しはしませんw
118名前は開発中のものです。
2017/12/26(火) 20:26:13.27ID:O9PscLer シーン遷移時に引き継ぎたい変数をどの手段から選べばいいか迷ってるんですけど、
1 static変数として持つ
2 ScriptableObjectを作ってそこに一時保管しておく
3 dontdestroyで変数の入ったスクリプトがアタッチされているオブジェクトを壊さず持っていく
4 外部のdb等に一時保管しておく
辺りで迷ってるのですが、ケースバイケースだとは思うのですがどれがいいのかアドバイスお願いします。
1 なるべくstatic使わない方が初心者には良い とたまに聞きます。
似た名前のローカル変数を複数使っているので混乱する可能性もあるかなと
2 基本的に変動しない小さいマスターデータをdb代わりに使う事が多い と見ました
こういった使い方には適さないのかもと迷いました
3 普通のゲームと同じくいくつかのシーンをループして進めていくのでオブジェクトが被らないようにシングルトンにする手間や
処理は一切入れず変数入れとしてこの処理をするならScriotbleObjectでいいのかな?と思ったり
4 形式にもよるのでしょうが一時的な変数をイチイチ外部に書き出すのはどうなのかと
1 static変数として持つ
2 ScriptableObjectを作ってそこに一時保管しておく
3 dontdestroyで変数の入ったスクリプトがアタッチされているオブジェクトを壊さず持っていく
4 外部のdb等に一時保管しておく
辺りで迷ってるのですが、ケースバイケースだとは思うのですがどれがいいのかアドバイスお願いします。
1 なるべくstatic使わない方が初心者には良い とたまに聞きます。
似た名前のローカル変数を複数使っているので混乱する可能性もあるかなと
2 基本的に変動しない小さいマスターデータをdb代わりに使う事が多い と見ました
こういった使い方には適さないのかもと迷いました
3 普通のゲームと同じくいくつかのシーンをループして進めていくのでオブジェクトが被らないようにシングルトンにする手間や
処理は一切入れず変数入れとしてこの処理をするならScriotbleObjectでいいのかな?と思ったり
4 形式にもよるのでしょうが一時的な変数をイチイチ外部に書き出すのはどうなのかと
119名前は開発中のものです。
2017/12/26(火) 21:20:53.35ID:ef3cEapS 当方、キムチでも、113でも、117でもありませんがw
120名前は開発中のものです。
2017/12/26(火) 21:27:04.89ID:ef3cEapS121名前は開発中のものです。
2017/12/26(火) 21:32:11.65ID:ycBgqB9O122名前は開発中のものです。
2017/12/26(火) 21:36:26.13ID:ef3cEapS >>118
個人的には「3」を使ってます!
最初のLoad用のシーン0でフラグ管理用のオブジェクトを「DontDestroy」設定して、
その後はシーン1へ遷移して、以降はシーン0へは戻りません
(戻ると、「DontDestroy」設定を繰り返してしまうので・・・)
フラグ管理用のオブジェクトに載せたスクリプト内では、Start()内で、
ゲームを通してシーン間で共有する変数を全て「public」で宣言して初期値設定しています
そして、他のシーンの他のオブジェクトから、適宜呼び出して参照や代入して共有してますね
個人的には「3」を使ってます!
最初のLoad用のシーン0でフラグ管理用のオブジェクトを「DontDestroy」設定して、
その後はシーン1へ遷移して、以降はシーン0へは戻りません
(戻ると、「DontDestroy」設定を繰り返してしまうので・・・)
フラグ管理用のオブジェクトに載せたスクリプト内では、Start()内で、
ゲームを通してシーン間で共有する変数を全て「public」で宣言して初期値設定しています
そして、他のシーンの他のオブジェクトから、適宜呼び出して参照や代入して共有してますね
123名前は開発中のものです。
2017/12/26(火) 21:40:47.37ID:ef3cEapS >>121の言うように、
セーブありのRPGみたいな感じであれば、シーン変更前にセーブして、
シーン変更後にロードでも良い気がしますね
ゲーム終了後も保持したいなら、やはり外部保存だと思います
自分のは基本パスワード式のACTなので、
セーブシステムがないので、ゲーム内でのみ保持しています
パスワードの入力によって、フラグの初期値を変更して、
その後にゲーム開始となるようにしていますね
(まっすぐゲームスタートした場合は、全フラグを初期値で開始)
セーブありのRPGみたいな感じであれば、シーン変更前にセーブして、
シーン変更後にロードでも良い気がしますね
ゲーム終了後も保持したいなら、やはり外部保存だと思います
自分のは基本パスワード式のACTなので、
セーブシステムがないので、ゲーム内でのみ保持しています
パスワードの入力によって、フラグの初期値を変更して、
その後にゲーム開始となるようにしていますね
(まっすぐゲームスタートした場合は、全フラグを初期値で開始)
124名前は開発中のものです。
2017/12/26(火) 23:19:01.53ID:V8TVTato >>118
言うまでもないが可能不可能で言えばどれでも出来る
と言うか、シーンロードでDestroyされないヒエラルキーに依存しないものならなんでも保持は可能
適不適で言うなら
1.staticである必要性はない。staticにすることによる弊害の方が多いため不適
2.ScriptableObjectは実行時はReadOnlyなデータのバリエーションを扱うもの。使い方が間違っているため当然不適
3.揮発性の情報ならこれが最適※
4.不揮発性の情報ならこれこれが最適※
※揮発性情報は意図せずプロセスが死亡した場合に消えても良いもの、不揮発性情報はプロセスが死亡しても残るべきものとする
言うまでもないが可能不可能で言えばどれでも出来る
と言うか、シーンロードでDestroyされないヒエラルキーに依存しないものならなんでも保持は可能
適不適で言うなら
1.staticである必要性はない。staticにすることによる弊害の方が多いため不適
2.ScriptableObjectは実行時はReadOnlyなデータのバリエーションを扱うもの。使い方が間違っているため当然不適
3.揮発性の情報ならこれが最適※
4.不揮発性の情報ならこれこれが最適※
※揮発性情報は意図せずプロセスが死亡した場合に消えても良いもの、不揮発性情報はプロセスが死亡しても残るべきものとする
125名前は開発中のものです。
2017/12/26(火) 23:39:55.98ID:ef3cEapS staticにする必要性ってどこにあるんだろう??
FCやSFCで言うところの、RAMじゃなくてROM的な機能か?
FCやSFCで言うところの、RAMじゃなくてROM的な機能か?
126名前は開発中のものです。
2017/12/26(火) 23:51:22.61ID:ed3wWG+q えっ
127名前は開発中のものです。
2017/12/26(火) 23:58:03.74ID:ef3cEapS ゲーム内で使いまわす、汎用関数を定義するとか?
128名前は開発中のものです。
2017/12/27(水) 00:01:05.49ID:iZzjfAdD @コンソメ
Aコンスト
Bコンビニ
Aコンスト
Bコンビニ
129名前は開発中のものです。
2017/12/27(水) 00:48:25.95ID:4kYoBCMG130名前は開発中のものです。
2017/12/27(水) 01:16:54.26ID:2+M/n1Lm 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)
を作ってみた
全オブジェクトからアクセスできる関数(メソッド)作成は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:10.80ID:2+M/n1Lm 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;
}
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:30.81ID:2+M/n1Lm 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
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:53.25ID:+i3zpKSn Stackoverflowみたいでいい感じじゃないの
134名前は開発中のものです。
2017/12/27(水) 03:01:38.22ID:4kYoBCMG また質問なんですけど、
シーン遷移した後って前シーンからdontdestroyで持ってきたオブジェのスクリプト内で
getcomponentってできないですか?
gameobject.findで指定したオブジェクトを見つけるまでは大丈夫なのですが
ゲットコンポーネントするとNullReferenceExceptionが帰ってきます
同じシーン内に作ったなんらかからならちゃんと動くのですが
シーン遷移した後って前シーンからdontdestroyで持ってきたオブジェのスクリプト内で
getcomponentってできないですか?
gameobject.findで指定したオブジェクトを見つけるまでは大丈夫なのですが
ゲットコンポーネントするとNullReferenceExceptionが帰ってきます
同じシーン内に作ったなんらかからならちゃんと動くのですが
135名前は開発中のものです。
2017/12/27(水) 03:07:33.07ID:4kYoBCMG もしかするとfindも失敗してるのかもしれませんが、
sceneをパスに指定するようなことが必要になるのでしょうか?
dontrestroyしたオブジェクトはdontdestroyの子みたいな表示になりますし
共通シーン内でしか受け渡しできないとかなのでしょうか?
sceneをパスに指定するようなことが必要になるのでしょうか?
dontrestroyしたオブジェクトはdontdestroyの子みたいな表示になりますし
共通シーン内でしか受け渡しできないとかなのでしょうか?
136名前は開発中のものです。
2017/12/27(水) 12:43:41.61ID:YC5nHwtt 全部自作した奴が偉い君は
ガワだけ張り替えて大当たりするようなソシャゲが
天下取ってる現状に発狂してそう
ガワだけ張り替えて大当たりするようなソシャゲが
天下取ってる現状に発狂してそう
137名前は開発中のものです。
2017/12/27(水) 12:54:38.15ID:WZqeNEin >>103
UnityのUIのボタンのフォーカスとフォーカス対象の設定
https://gametukurikata.com/program/uifocus
>あらかじめボタン1つがフォーカスされていないと他のボタンの選択が出来ません
>EventSystemに最初に選択するボタンの設定は出来ます
>>89 >>91
[UI] スライダーで変更した値を取得できない現象に対処した [Unity]
http://negilab-unity.com/archives/14367667.html
>スライダーの変更値を float として取得するのではなく、Slider.value 変数として取得するように書き換えたところ、問題なく取得できました
>スライダーのインスペクタで、引数にスライダーのオブジェクトを指定
uGUIのSliderの値をスクリプト側で受け取る方法
http://unitymemo.blog.jp/archives/30226350.html
>SliderをGetComponentしてvalueを参照することでスライド値を参照できます
>OnValueChangedに定義したメソッドでスライド値を受け取る方法
>メソッドを選択する際、一番上のほうの「redSlider」を選択する事
>下のほうにも「redSlider(float)」がありますが、こちらを選んでも正しく値を渡すことは出来ません
UnityのUIのボタンのフォーカスとフォーカス対象の設定
https://gametukurikata.com/program/uifocus
>あらかじめボタン1つがフォーカスされていないと他のボタンの選択が出来ません
>EventSystemに最初に選択するボタンの設定は出来ます
>>89 >>91
[UI] スライダーで変更した値を取得できない現象に対処した [Unity]
http://negilab-unity.com/archives/14367667.html
>スライダーの変更値を float として取得するのではなく、Slider.value 変数として取得するように書き換えたところ、問題なく取得できました
>スライダーのインスペクタで、引数にスライダーのオブジェクトを指定
uGUIのSliderの値をスクリプト側で受け取る方法
http://unitymemo.blog.jp/archives/30226350.html
>SliderをGetComponentしてvalueを参照することでスライド値を参照できます
>OnValueChangedに定義したメソッドでスライド値を受け取る方法
>メソッドを選択する際、一番上のほうの「redSlider」を選択する事
>下のほうにも「redSlider(float)」がありますが、こちらを選んでも正しく値を渡すことは出来ません
138名前は開発中のものです。
2017/12/27(水) 12:57:04.12ID:WZqeNEin >>102
Unity : 3Dシーン内のCanvasが邪魔
http://indie-du.com/entry/2016/05/22/100102
>UnityがCanvasの1ピクセルを1unitとして計算して表示
>1unitは1メートルなので、100ピクセルのUIは100メートルで描画
>Canvasの左下が原点(0, 0, 0)に合っている
Unity : 3Dシーン内のCanvasが邪魔
http://indie-du.com/entry/2016/05/22/100102
>UnityがCanvasの1ピクセルを1unitとして計算して表示
>1unitは1メートルなので、100ピクセルのUIは100メートルで描画
>Canvasの左下が原点(0, 0, 0)に合っている
139名前は開発中のものです。
2017/12/27(水) 14:56:11.54ID:+i3zpKSn 見ての通り、質問せずに最初から自分でググってれば数分で解決している問題が多いな。
自分でググらないといけない事を人にググってもらってるだけなんだから。
自分でググらないといけない事を人にググってもらってるだけなんだから。
140名前は開発中のものです。
2017/12/27(水) 17:26:33.07ID:u5IVM9F6 カンバス、そんなに邪魔?
消しちゃえばいいやん。必要な時にtrueにしてさ。
消しちゃえばいいやん。必要な時にtrueにしてさ。
141名前は開発中のものです。
2017/12/27(水) 18:22:37.68ID:WZqeNEin142名前は開発中のものです。
2017/12/27(水) 18:41:34.06ID:WZqeNEin >>134
何をGetcomponentしたいの?
Sceneを指定したりはしないはず
ObjectはFindされているんでしょ?
obj内にObjectが入っている状態で、スクリプトをGetcomponentしたいなら、
スクリプト名 s = obj.GetComponent<スクリプト名>();
そのスクリプト内の変数をゲットしたいなら
s.変数名
変数は引用元のスクリプトの最初にpublicで宣言しておいて
何をGetcomponentしたいの?
Sceneを指定したりはしないはず
ObjectはFindされているんでしょ?
obj内にObjectが入っている状態で、スクリプトをGetcomponentしたいなら、
スクリプト名 s = obj.GetComponent<スクリプト名>();
そのスクリプト内の変数をゲットしたいなら
s.変数名
変数は引用元のスクリプトの最初にpublicで宣言しておいて
143名前は開発中のものです。
2017/12/27(水) 18:54:27.94ID:fBJY1RTE やってみたがFindもGetComponentも普通に出来るよな
検索範囲は明示がないけどHierarchyウインドに表示されてる物は
全捜索するようで、シーンが分かれていようが全く関係がない
(Updateで使うなってのは、毎回Hierarchy全捜索されたら洒落にならん)
検索範囲は明示がないけどHierarchyウインドに表示されてる物は
全捜索するようで、シーンが分かれていようが全く関係がない
(Updateで使うなってのは、毎回Hierarchy全捜索されたら洒落にならん)
144名前は開発中のものです。
2017/12/27(水) 18:56:13.87ID:WZqeNEin >>134
dontrestroyしたObjectに付いているスクリプト内で、
別のシーンにある他のObjectのコンポーネントを取得してみたけど、普通に受け取れたよ?
Scene0で、共有Objectをdontrestroyして、Scene1へ遷移
Scene1で、共有Objectのスクリプトから、
Scene1の別のObjectのtransfomを取得したら、普通に見れた
FindだとHierarchyにない別のSceneのObjectは検索できないはず
Objectを検索できたのに、GetComponentできないなら、
そのObjectには取得しようとしているコンポーネントがないか、
他のObjectから取得できないように保護されている(変数ならprivate宣言)かでは?
dontrestroyしたObjectに付いているスクリプト内で、
別のシーンにある他のObjectのコンポーネントを取得してみたけど、普通に受け取れたよ?
Scene0で、共有Objectをdontrestroyして、Scene1へ遷移
Scene1で、共有Objectのスクリプトから、
Scene1の別のObjectのtransfomを取得したら、普通に見れた
FindだとHierarchyにない別のSceneのObjectは検索できないはず
Objectを検索できたのに、GetComponentできないなら、
そのObjectには取得しようとしているコンポーネントがないか、
他のObjectから取得できないように保護されている(変数ならprivate宣言)かでは?
145名前は開発中のものです。
2017/12/27(水) 19:04:57.79ID:WZqeNEin >>134
Debug.Logで、FindしたGameObjectの中身を表示、
GetComponentした中身を表示してみることを勧めるよ
dontrestroyしたObjectに付いているスクリプトでも、
それ以外のもともとそのSceneにあったObjectに付いているスクリプトでも
まさか、dontrestroyしたObjectを出すためのSecneを省いて
テストプレイしているなんてことはないよね?
自分の例で言えば、Scene0からじゃなくて、Scene1からテストしているとか
テストプレイ中、HierarchyにdontrestroyしたObjectは出ているんだよね?
毎フレームdontrestroyしまくったりしていないよね??
Debug.Logで、FindしたGameObjectの中身を表示、
GetComponentした中身を表示してみることを勧めるよ
dontrestroyしたObjectに付いているスクリプトでも、
それ以外のもともとそのSceneにあったObjectに付いているスクリプトでも
まさか、dontrestroyしたObjectを出すためのSecneを省いて
テストプレイしているなんてことはないよね?
自分の例で言えば、Scene0からじゃなくて、Scene1からテストしているとか
テストプレイ中、HierarchyにdontrestroyしたObjectは出ているんだよね?
毎フレームdontrestroyしまくったりしていないよね??
146名前は開発中のものです。
2017/12/27(水) 19:40:39.07ID:fBJY1RTE >>144
>FindだとHierarchyにない別のSceneのObjectは検索できないはず
なるほどこういうことか
http://imgur.com/RGyGQa6.png
transform.FindとGameObject.Findは検索範囲が違う
俺はGameObject.Findだから取れてるみたい
>FindだとHierarchyにない別のSceneのObjectは検索できないはず
なるほどこういうことか
http://imgur.com/RGyGQa6.png
transform.FindとGameObject.Findは検索範囲が違う
俺はGameObject.Findだから取れてるみたい
147名前は開発中のものです。
2017/12/27(水) 19:49:56.88ID:y/zeZUnT 何百枚もカンバスあるの?
そんなに多くないから登録しときゃ見つかるでしょ。
そんなに多くないから登録しときゃ見つかるでしょ。
148名前は開発中のものです。
2017/12/27(水) 19:54:05.52ID:9tGAk59e みんなカンバス読みなの?
キャンバス派は少数?
キャンバス派は少数?
149名前は開発中のものです。
2017/12/27(水) 19:56:05.13ID:y/zeZUnT どっちでもいいなぁw
150名前は開発中のものです。
2017/12/27(水) 19:58:36.60ID:TaFXzcmh 英語だとカンバスが近いらしい。HowTo動画とか見てるとカンバスカンバス言われるからカンバス読みになるんじゃないの。
キャンバスは美術用語で、学校で習うのはキャンバス読みだと思う。
キャンバスは美術用語で、学校で習うのはキャンバス読みだと思う。
151名無し@キムチ
2017/12/27(水) 20:09:12.86ID:oeXBuupd152名前は開発中のものです。
2017/12/27(水) 20:12:19.02ID:9tGAk59e 別にどっちでも良いしどっちでも伝わるけど喋るときはどっちが多いのかなぁっていう素朴な疑問
ネイティブの発音はどうでも良い、カタカナ表記することが云々って話になるし
ネイティブの発音はどうでも良い、カタカナ表記することが云々って話になるし
153名前は開発中のものです。
2017/12/27(水) 20:15:02.72ID:Ojr+yz4V154名前は開発中のものです。
2017/12/27(水) 20:26:06.89ID:4kYoBCMG >>142-145
レス遅くなりました。mm
dontrestroyしたオブジェクトにアタッチされたスクリプトから
遷移後のオブジェクトがfind出来てるか確認したところ、出来ていませんでした。
上で出来ていると勘違いしたのはfindの時点でエラーが帰ってこなかったからという単純な理由でした。
遷移後のシーン内に作ったオブジェクトのスクリプトから同じコードをコピペしてみましたが
こちらは普通にfind出来ていました
public gameobjectとしてインスペクター上で両方確認しました。
うーん。
レス遅くなりました。mm
dontrestroyしたオブジェクトにアタッチされたスクリプトから
遷移後のオブジェクトがfind出来てるか確認したところ、出来ていませんでした。
上で出来ていると勘違いしたのはfindの時点でエラーが帰ってこなかったからという単純な理由でした。
遷移後のシーン内に作ったオブジェクトのスクリプトから同じコードをコピペしてみましたが
こちらは普通にfind出来ていました
public gameobjectとしてインスペクター上で両方確認しました。
うーん。
155名前は開発中のものです。
2017/12/27(水) 20:36:04.46ID:JxfZYfQR 香港人
「高卒だらけの日本人英語は、無いところにYの発音が入っちゃいます。土人丸出しです。」
「高卒だらけの日本人英語は、無いところにYの発音が入っちゃいます。土人丸出しです。」
156名前は開発中のものです。
2017/12/27(水) 20:40:05.60ID:4kYoBCMG 今試したのですが、
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
| その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
↓
シーン遷移
objB
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す → 成功
objAのヒエラルキーでobjBが格納されている
だったんですけど、これどういうことなんだろう…
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
| その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
↓
シーン遷移
objB
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す → 成功
objAのヒエラルキーでobjBが格納されている
だったんですけど、これどういうことなんだろう…
157名前は開発中のものです。
2017/12/27(水) 20:43:19.36ID:4kYoBCMG >>156だとなんか時系列変に見えますね;
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
|
↓
シーン遷移
objB
その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
↑ ↓
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功
objAのヒエラルキーでobjBが格納されている
みたいな感じです
こっちのが見づらいかもしれませんが…
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
|
↓
シーン遷移
objB
その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
↑ ↓
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功
objAのヒエラルキーでobjBが格納されている
みたいな感じです
こっちのが見づらいかもしれませんが…
158名前は開発中のものです。
2017/12/27(水) 20:44:21.74ID:y/zeZUnT 遷移処理はどこに遷移?
ところどころ足りないので補足よろ。
ところどころ足りないので補足よろ。
159名前は開発中のものです。
2017/12/27(水) 20:46:34.13ID:y/zeZUnT 今来たw
160名前は開発中のものです。
2017/12/27(水) 20:48:37.38ID:4kYoBCMG シーン1
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
|
↓
シーン2へ遷移
objB
その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
↑ ↓
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功
objAのヒエラルキーでobjBが格納されている
これで質問に答えられてますかね?
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
|
↓
シーン2へ遷移
objB
その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
↑ ↓
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功
objAのヒエラルキーでobjBが格納されている
これで質問に答えられてますかね?
161名前は開発中のものです。
2017/12/27(水) 21:03:16.65ID:y/zeZUnT 遷移したあとの間が少ないとか。トンチンカンかw
162名前は開発中のものです。
2017/12/27(水) 21:17:06.84ID:fBJY1RTE >>160
失敗しないし普通に出来る
失敗しないし普通に出来る
163名前は開発中のものです。
2017/12/27(水) 21:22:17.48ID:fBJY1RTE てか、何で相互に見れるようにする必要があるの?
無駄が多すぎるだろ
DontDestroyOnLoadしたGameObjectを一方的に参照する
データ保管庫みたいに切り分けて使えばいいだけじゃない
無駄が多すぎるだろ
DontDestroyOnLoadしたGameObjectを一方的に参照する
データ保管庫みたいに切り分けて使えばいいだけじゃない
164名前は開発中のものです。
2017/12/27(水) 21:23:12.19ID:4kYoBCMG うーん…なんでだろう
またもう一つ試したのですが、
シーン1で objA に加えて objCを作り、
objCにスクリプトをアタッチし、これもdontdestroyして中に変数を一つ入れておきました
シーン1
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
|
↓
シーン2へ遷移
objB
その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
※ ここで今回作ったobjCから参照してみる → 成功
↑ ↓
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功
objAのヒエラルキーでobjBが格納されている
と、見づらいかもしれませんが同じシーンから持ってきたオブジェクトに対しては普通にfindもゲットコンポーネントもできました
あああああああああわかんね!!!!!!!!!!!!!
またもう一つ試したのですが、
シーン1で objA に加えて objCを作り、
objCにスクリプトをアタッチし、これもdontdestroyして中に変数を一つ入れておきました
シーン1
objA dontdestroyしたオブジェクト
| これにアタッチされているスクリプト内でボタン押されたら遷移する処理
|
↓
シーン2へ遷移
objB
その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗
※ ここで今回作ったobjCから参照してみる → 成功
↑ ↓
遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功
objAのヒエラルキーでobjBが格納されている
と、見づらいかもしれませんが同じシーンから持ってきたオブジェクトに対しては普通にfindもゲットコンポーネントもできました
あああああああああわかんね!!!!!!!!!!!!!
165名前は開発中のものです。
2017/12/27(水) 21:26:43.61ID:4kYoBCMG >>163
遷移後にそのまま冒頭のイベント処理みたいなことをやりたくて
ならそのまま遷移処理の後に引き続きそのメソッド内である程度指示だして引継ぎすればよくね?
でやってみたら遷移後のシーンのオブジェクト参照ができなかったということから質問をしました
遷移後にそのまま冒頭のイベント処理みたいなことをやりたくて
ならそのまま遷移処理の後に引き続きそのメソッド内である程度指示だして引継ぎすればよくね?
でやってみたら遷移後のシーンのオブジェクト参照ができなかったということから質問をしました
166名前は開発中のものです。
2017/12/27(水) 21:33:49.05ID:fBJY1RTE 値の保持に使ってるんじゃないのかよ
何の意味があるんだそれ
何の意味があるんだそれ
167名前は開発中のものです。
2017/12/27(水) 21:39:00.89ID:4kYoBCMG 上でも書いてるのですけど本来の目的はそれですが
試してみたところエラーが出たので質問をした ということです
試してみたところエラーが出たので質問をした ということです
168名前は開発中のものです。
2017/12/27(水) 21:48:41.42ID:fBJY1RTE objAを外から読み書きできるようにしたんだよね?
なんでobjAからobjBを見る必要があるのか分からない(出来るけど)
なんでobjAからobjBを見る必要があるのか分からない(出来るけど)
169名前は開発中のものです。
2017/12/27(水) 22:33:19.52ID:UZCkhUUp >>165
シーン遷移時は、前のシーンのオブジェクトを破棄して新たなシーンのオブジェクトを構築する処理が走る
この処理が終わらないと新しいシーンのオブジェクトはFindでは見つからない
よって、新たなシーンのオブジェクトを見つけたければSceneManager.sceneLoadedデリゲートを使ってシーンのロードが完了してから処理を行う必要がある
ちなみにSceneManager.sceneLoadedはロードされたシーンのオブジェクトのAwakeが完了し、Startが呼ばれる前に呼ばれる事に注意
またこのデリゲートはどのシーンがロードされても呼ばれるから処理内でシーン毎に振り分けるかハンドラをつけ外しするなどの対処が必要
シーン遷移時は、前のシーンのオブジェクトを破棄して新たなシーンのオブジェクトを構築する処理が走る
この処理が終わらないと新しいシーンのオブジェクトはFindでは見つからない
よって、新たなシーンのオブジェクトを見つけたければSceneManager.sceneLoadedデリゲートを使ってシーンのロードが完了してから処理を行う必要がある
ちなみにSceneManager.sceneLoadedはロードされたシーンのオブジェクトのAwakeが完了し、Startが呼ばれる前に呼ばれる事に注意
またこのデリゲートはどのシーンがロードされても呼ばれるから処理内でシーン毎に振り分けるかハンドラをつけ外しするなどの対処が必要
170名無し@キムチ
2017/12/27(水) 22:59:24.99ID:oeXBuupd171名前は開発中のものです。
2017/12/27(水) 23:23:24.84ID:Y6rKayv0 なんだやっぱりキムチか
172名前は開発中のものです。
2017/12/27(水) 23:29:25.63ID:9tGAk59e プログラムが成功したり失敗したりなんて挙動するわけない
成功するのも失敗するのも理由がある
理由を理解できていないのにプログラムのせいにするプログラマー
成功するのも失敗するのも理由がある
理由を理解できていないのにプログラムのせいにするプログラマー
173名前は開発中のものです。
2017/12/27(水) 23:56:23.72ID:2+M/n1Lm >遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す
本当に呼び出せている?
Find以前の問題だったりして・・・
本当に呼び出せている?
Find以前の問題だったりして・・・
174名前は開発中のものです。
2017/12/28(木) 00:13:29.64ID:mH5YII84 ボタンからの入力を受けていないだけとかはないですか?
UIから、その該当スクリプトへのコールがかかっていないとか?
入力をInputにして、
if?(Input.GetKeyDown?(KeyCode.Space))?{
Debug.Log("Input OK");
GameObject A = GameObject.Find("objA");
Debug.Log(A);
}
を追加して、
スクリプトが機能しているかどうか、
オブジェクトを取得できているかどうかを確認してみてください
UIから、その該当スクリプトへのコールがかかっていないとか?
入力をInputにして、
if?(Input.GetKeyDown?(KeyCode.Space))?{
Debug.Log("Input OK");
GameObject A = GameObject.Find("objA");
Debug.Log(A);
}
を追加して、
スクリプトが機能しているかどうか、
オブジェクトを取得できているかどうかを確認してみてください
175名前は開発中のものです。
2017/12/28(木) 00:18:44.79ID:mH5YII84 すみません、objAからobjBの方を見たいんですね
objAのスクリプトのUpdate()内に、
if (Input.GetKeyDown (KeyCode.Space)) {
Debug.Log("Input OK");
GameObject B = GameObject.Find("objB");
Debug.Log(B);
}
を追加して、
スクリプトAが機能しているかどうか、
オブジェクトBを取得できているかどうかを確認してみてください
ボタンからの呼び出しが届いていないだけであれば、
上記でオブジェクトを取得できるはずですが・・・
シーン2では、
objA:DontDestroyによって、シーン1から持ち越し
objB
・・・が、Hierarchy上に同時に並んでいるわけですものね?
objAのスクリプトのUpdate()内に、
if (Input.GetKeyDown (KeyCode.Space)) {
Debug.Log("Input OK");
GameObject B = GameObject.Find("objB");
Debug.Log(B);
}
を追加して、
スクリプトAが機能しているかどうか、
オブジェクトBを取得できているかどうかを確認してみてください
ボタンからの呼び出しが届いていないだけであれば、
上記でオブジェクトを取得できるはずですが・・・
シーン2では、
objA:DontDestroyによって、シーン1から持ち越し
objB
・・・が、Hierarchy上に同時に並んでいるわけですものね?
176名前は開発中のものです。
2017/12/28(木) 00:34:38.37ID:mH5YII84 各オブジェクトのそれぞれのスクリプトで行っていることが良く分からないのですが、
Scene1
objA-A.cs:DontDestory
ボタン→LoadScene("Scene1")
objC-C.cs:DontDestory
↓
Scene2
objA-A.cs:DontDestory(Scene1から)
メソッド@→A = Find("objB") →NG
objC-C.cs:DontDestory(Scene1から)
Aのメソッド@→A = Find("objB") →OK
objB-B.cs
ボタン→Aのメソッド@→A = Find("objB") →OK
こういうことなのでしょうか??
A = Find("objB")は、
GameObject A = GameObject.Find("objB");のことです
メソッド@を呼ぶタイミングはどうやって遷移後に指定しているのでしょうか?
まさか、LoadScene("Scene1")と同じフレーム内で呼んでいないですよね??
Scene1
objA-A.cs:DontDestory
ボタン→LoadScene("Scene1")
objC-C.cs:DontDestory
↓
Scene2
objA-A.cs:DontDestory(Scene1から)
メソッド@→A = Find("objB") →NG
objC-C.cs:DontDestory(Scene1から)
Aのメソッド@→A = Find("objB") →OK
objB-B.cs
ボタン→Aのメソッド@→A = Find("objB") →OK
こういうことなのでしょうか??
A = Find("objB")は、
GameObject A = GameObject.Find("objB");のことです
メソッド@を呼ぶタイミングはどうやって遷移後に指定しているのでしょうか?
まさか、LoadScene("Scene1")と同じフレーム内で呼んでいないですよね??
177名前は開発中のものです。
2017/12/28(木) 00:51:12.79ID:fQL7hUYb >>169
レス遅れてすみません。
ありがとうございます。
とても参考になり、わかりやすかったです。
結果として、やったことは
SceneManager.LoadSceneの直後にSceneManager.sceneLoadedを行って
そのデリゲート処理完了後にそれぞれのテストメソッドを呼び出して参照したりしたところ
問題なく参照できました。
>>161にはレスしませんでしたが、当たりだった感じです。
>>170
なるほど。。。他の方々のレスを見る感じ、テスト環境でやっていたのかもしれないので
もしかするとオブジェクト等の量とかでかわるんですかね?
>>173
そこは上のレスを書いた時点で確認できていました
debug.log等での確認なので精度はわかりませんが
レス遅れてすみません。
ありがとうございます。
とても参考になり、わかりやすかったです。
結果として、やったことは
SceneManager.LoadSceneの直後にSceneManager.sceneLoadedを行って
そのデリゲート処理完了後にそれぞれのテストメソッドを呼び出して参照したりしたところ
問題なく参照できました。
>>161にはレスしませんでしたが、当たりだった感じです。
>>170
なるほど。。。他の方々のレスを見る感じ、テスト環境でやっていたのかもしれないので
もしかするとオブジェクト等の量とかでかわるんですかね?
>>173
そこは上のレスを書いた時点で確認できていました
debug.log等での確認なので精度はわかりませんが
178名前は開発中のものです。
2017/12/28(木) 00:56:34.32ID:fQL7hUYb >>174-176
Scene1
objA-A.cs:DontDestory
ボタン→ *A.cs内の LoadScene("Scene1") 呼び出し
objC-C.cs:DontDestory * +変数1
↓
Scene2
objA-A.cs:DontDestory(Scene1から)
メソッド@→A = Find("objB") →NG
objC-C.cs:DontDestory(Scene1から)
Aのメソッド@→A = Find("objB") →OK * Aのメソッド@→A = Find("objC") →OK です
objB-B.cs
ボタン→Aのメソッド@→A = Find("objB") →OK
A.Csの中の処理流れは
{
LoadScene2;
gameobject.find(Scene2のobjB)
}
でBが見つからない ということでした
>メソッド@を呼ぶタイミングはどうやって遷移後に指定しているのでしょうか?
まさか、LoadScene("Scene1")と同じフレーム内で呼んでいないですよね??
恐らくそういうことだったんだと思います
Scene1
objA-A.cs:DontDestory
ボタン→ *A.cs内の LoadScene("Scene1") 呼び出し
objC-C.cs:DontDestory * +変数1
↓
Scene2
objA-A.cs:DontDestory(Scene1から)
メソッド@→A = Find("objB") →NG
objC-C.cs:DontDestory(Scene1から)
Aのメソッド@→A = Find("objB") →OK * Aのメソッド@→A = Find("objC") →OK です
objB-B.cs
ボタン→Aのメソッド@→A = Find("objB") →OK
A.Csの中の処理流れは
{
LoadScene2;
gameobject.find(Scene2のobjB)
}
でBが見つからない ということでした
>メソッド@を呼ぶタイミングはどうやって遷移後に指定しているのでしょうか?
まさか、LoadScene("Scene1")と同じフレーム内で呼んでいないですよね??
恐らくそういうことだったんだと思います
179名前は開発中のものです。
2017/12/28(木) 01:23:13.78ID:GhM3Lpso デバッガ使えば5分で分かった事を22時間も掛けて
大した効率だよな
大した効率だよな
180名前は開発中のものです。
2017/12/28(木) 01:43:55.44ID:mH5YII84 以前、物理演算で、どういう処理だったか忘れたけど、
変数を物理演算に設定した直後に、
同じフレーム内でデバッグログに物理演算結果を出力しようとしたら、
変数が設定された結果が出せなくて、
Invokeで1フレーム後にデバッグログを呼び出したら、出力できたことがあるので、
一度フレームを走らせないといけないポイントで処理を連続してしまうのは、
結構ピットホールになりやすいかもしれない
変数を物理演算に設定した直後に、
同じフレーム内でデバッグログに物理演算結果を出力しようとしたら、
変数が設定された結果が出せなくて、
Invokeで1フレーム後にデバッグログを呼び出したら、出力できたことがあるので、
一度フレームを走らせないといけないポイントで処理を連続してしまうのは、
結構ピットホールになりやすいかもしれない
181名前は開発中のものです。
2017/12/28(木) 02:14:32.76ID:mH5YII84 velocityの変更、positionの変更は、同じフレーム内で取得しても変更が反映されるけど、
例えばAddForceでは、たとえ1フレームで加速するForceMode.Impulseでも、
同じフレーム内ではまだvelocityは速度変更されておらず、
次のフレームでvelocityの変更が反映されるみたい
でも、1フレームで移動を行うMovePositionは、
同じフレーム内でpositionの変更が反映されているという・・・
例えばAddForceでは、たとえ1フレームで加速するForceMode.Impulseでも、
同じフレーム内ではまだvelocityは速度変更されておらず、
次のフレームでvelocityの変更が反映されるみたい
でも、1フレームで移動を行うMovePositionは、
同じフレーム内でpositionの変更が反映されているという・・・
182名前は開発中のものです。
2017/12/28(木) 02:20:34.36ID:aEDu9yFW 全然関係ねえよ
オブジェクトの生成と破壊は1フレーム掛かるから後処理は1フレーム待てと言われただろ
シーンの呼び出しも同じって>169に言われてんだろ
オブジェクトの生成と破壊は1フレーム掛かるから後処理は1フレーム待てと言われただろ
シーンの呼び出しも同じって>169に言われてんだろ
183名前は開発中のものです。
2017/12/28(木) 02:49:46.90ID:mH5YII84 Invokeに1フレームかかるのか、1フレーム内で行う処理の量の問題なのか、
PCの性能の違いなのか、Unityのバージョンの違いなのかは不明だけど、
Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
rb.angularVelocity = new Vector3(0, 0, 180 * Mathf.Deg2Rad);
Invoke ("Log", 1);
//Invoke("Log", 1 - Time.fixedDeltaTime);
}
void Log() {
rb.angularVelocity = Vector3.zero;
Debug.Log (rb.rotation);
Debug.Log(rb.rotation.eulerAngles.z);
}
本来、Z軸回転に180度/秒を入れて1秒間回転させて止めているわけだから、
Z軸の回転角は180が返るはずだけど、183.6という結果になってしまいます
Invoke("A", 1 - Time.fixedDeltaTime)で1フレームは早く呼ぶと、180が返るから、
おそらくInvokeで呼ぶ場合は、1フレーム遅れるんでしょうね・・・
PCの性能の違いなのか、Unityのバージョンの違いなのかは不明だけど、
Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
rb.angularVelocity = new Vector3(0, 0, 180 * Mathf.Deg2Rad);
Invoke ("Log", 1);
//Invoke("Log", 1 - Time.fixedDeltaTime);
}
void Log() {
rb.angularVelocity = Vector3.zero;
Debug.Log (rb.rotation);
Debug.Log(rb.rotation.eulerAngles.z);
}
本来、Z軸回転に180度/秒を入れて1秒間回転させて止めているわけだから、
Z軸の回転角は180が返るはずだけど、183.6という結果になってしまいます
Invoke("A", 1 - Time.fixedDeltaTime)で1フレームは早く呼ぶと、180が返るから、
おそらくInvokeで呼ぶ場合は、1フレーム遅れるんでしょうね・・・
184名前は開発中のものです。
2017/12/28(木) 02:51:19.62ID:ZI2vMH5M 外様が言うのは何だが
コードも貼られて実に良スレだな
コードも貼られて実に良スレだな
185名前は開発中のものです。
2017/12/28(木) 03:22:50.01ID:mH5YII84 ごめんなさい、原因が分かったよ
Start()から、Log()を呼んでいるからでした・・・
Start()が終了するのに1フレームかかるみたいですね
Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
Start2()
}
void Start2() {
rb.angularVelocity = new Vector3(0, 0, 180 * Mathf.Deg2Rad);
Invoke ("Log", 1);
}
void Log() {
rb.angularVelocity = Vector3.zero;
Debug.Log (rb.rotation);
Debug.Log(rb.rotation.eulerAngles.z);
}
StartからStart2を呼んで、Start2でangularVelocityを設定すれば、
Start2()からLog()を呼ぶ場合は、1秒指定のInvokeで、ぴったり180でした
Start()から、Log()を呼んでいるからでした・・・
Start()が終了するのに1フレームかかるみたいですね
Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
Start2()
}
void Start2() {
rb.angularVelocity = new Vector3(0, 0, 180 * Mathf.Deg2Rad);
Invoke ("Log", 1);
}
void Log() {
rb.angularVelocity = Vector3.zero;
Debug.Log (rb.rotation);
Debug.Log(rb.rotation.eulerAngles.z);
}
StartからStart2を呼んで、Start2でangularVelocityを設定すれば、
Start2()からLog()を呼ぶ場合は、1秒指定のInvokeで、ぴったり180でした
186名前は開発中のものです。
2017/12/28(木) 03:24:48.63ID:yHTFG4+0 物理はFixedUpdateのタイムスライスで動いてるから、
Update系とは時間の流れ違うだろ
Update系とは時間の流れ違うだろ
187名前は開発中のものです。
2017/12/28(木) 04:43:29.76ID:NrJHfHro >>185
何の確認もせずに適当な思い込みで妄想しても
的外れなだけじゃないキムチ君w
毎回そんなアホな事をやってるから迷走すんだよ
だったらStartとStart2に
Debug.Log(Time.frameCount);
で実実行時のフレームカウント出してみなよ
両方とも1って出るから
何の確認もせずに適当な思い込みで妄想しても
的外れなだけじゃないキムチ君w
毎回そんなアホな事をやってるから迷走すんだよ
だったらStartとStart2に
Debug.Log(Time.frameCount);
で実実行時のフレームカウント出してみなよ
両方とも1って出るから
■ このスレッドは過去ログ倉庫に格納されています
