【ゲームエンジン】Unityなんでも質問スレpart12at GAMEDEV
【ゲームエンジン】Unityなんでも質問スレpart12 - 暇つぶし2ch750:名前は開発中のものです。
23/12/18 19:20:48.61 791LJWa5.net
まぁ好きにしてくれ。

751:ドーンおじ
23/12/18 19:37:17.69 PYe56igk.net
諸君!トランジスタ技術の圧縮が世にも奇妙な物語23秋の特別編で放送されるぞ!
トランジスタ技術を分解して広告部分を取り除いて再度製本するのが競技になってる世界を描いたSF短編小説のドラマ化だ!
Unityスレにぴったりの物語だろ!?お前が最後にトラ技買ったのいつだよ!?11月11日放送だ!見逃すなよ!m9⎛˶◜◡◝˶⎞ドーン!

752:名前は開発中のものです。
23/12/19 00:00:29.86 7SuYCp/2.net
Randomクラスを扱う場合に、
"参照があいまい"的なエラーが出るじゃないですか?
SystemとUnityEngine両方にRandomクラスが定義されているから、という理屈はわかりました。
で、その対処方が
UnityEngine.Random.Rangeと名前空間ごと指定するで、
それをすれば問題なく動きました。
ただ、調べるともうひとつ対処法があって、
スクリプトの一番最初に書いてるusing System;を削除、というのがあったんですよ。
実際そうしてもエラーは出なくなりました。
しかし、using System;を削除って、なんか支障が出そうなんですが
そんなことないんでしょうか?
これはぜんぜん使われる対処法なんでしょうか?
Randomクラスを使うことはよくあると思うんです。
みなさんは、どちらの対処法をやってますか?
名前空間ごと指定、ですよね?

753:名前は開発中のものです。
23/12/19 00:28:34.39 x10mevWK.net
削除後じゃなくて別名指定できるよ

754:名前は開発中のものです。
23/12/19 00:34:42.90 errhc0zQ.net
こんばんはいつもお世話になります
>>717の件は自己解決しました
大義であった

755:名前は開発中のものです。
23/12/19 00:58:35.07 rcHhGP0s.net
>>754
どういたしまして

756:名前は開発中のものです。
23/12/19 01:35:05.39 zHZdEhB3.net
>>754
ワシに感謝しろよ

757:名前は開発中のものです。
23/12/19 16:22:37.21 7SuYCp/2.net
すみません、自分でも調べまくってるんですが
その原因を突き止められず困り果ててるんでお知恵をお貸しください。

無数のブロックを次々生成している状況で、
そのブロックにはすべて判定のためのbox collider2dを子オブジェクトで作っており
プレイヤーがその判定枠と接触したらアイテムを生成する処理になってます。
接触判定にはOnTriggerEnter2Dを使っています。

現在テスト中で
そのブロックを次々作ってプレイヤーと接触させては
アイテムを出現させて、を繰り返してるんですが
ブロックを数十個生成してる途中、稀にひとつほど
プレイヤーを接触する前にアイテムを生成するブロックが生まれます。
プレハブのブロックなのでスプリクトは同じはずだし、
アイテム生成には条件式にOnTriggerEnter2Dの判定を入れているので
毎度ひとつのブロックだけそうなるのも意味不明ですし、
プレイヤーが接触してないのにアイテム生成されるのも意味不明です。

熟練者の皆様ならもしかしたら推測できるのかなと思って、、
このバグの原因を調べる術を教えてください。
(コードを貼れば早いかもしれませんがすでに膨大な量ですのでそこは割愛させてください)

758:名前は開発中のものです。
23/12/19 16:26:37.16 7SuYCp/2.net
個人的には、アイテム生成の判定に
OnTriggerEnter2D==trueを使ってる時点で
なにも接触してないのにアイテムが生成されるのは
ありえないと思っています。

しかし、別の中にかの作用でまったく関係ない場所で
バグが発生する、というのもよくある話なので
先輩方ならなんか推測できるかなと思って相談させて頂きました。

759:名前は開発中のものです。
23/12/19 16:31:25.76 7SuYCp/2.net
あ、すみません。解決しました。
書き込んだあと、すぐ原因突き止めました。

760:名前は開発中のものです。
23/12/19 18:19:10.15 x10mevWK.net
書き込むと何故か解決する
あるある

761:名前は開発中のものです。
23/12/19 18:43:48.04 jor50pa0.net
マジでこれあるんだよな

762:ドーンおじ
23/12/19 18:45:25.31 OAl8ngR0.net
ワイの環境は明窓浄机という言葉が相応しい!m9⎛˶◜◡◝˶⎞ドーン!
URLリンク(i.imgur.com)

763:名前は開発中のものです。
23/12/19 18:47:48.54 AbGIjmnR.net
rigidbody2dの判定回数を連続にすればいいと思いますとまぁ
解決してるだろうけど書いておく

764:名前は開発中のものです。
23/12/19 19:08:28.74 zkgZfzRE.net
なんで解決法を書かないの?

765:名前は開発中のものです。
23/12/19 21:36:05.95 JdOvXqXW.net
そりゃ問題提起のため言語化して整理してるから。

766:名前は開発中のものです。
23/12/19 21:42:18.46 x10mevWK.net
解決法?そりゃお前らにかんかーねーから

767:名前は開発中のものです。
23/12/19 22:14:57.80 Mib7bgnr.net
あるあるすぎてこわい

768:名前は開発中のものです。
23/12/19 23:34:13.74 zkgZfzRE.net
俺らに関係なくても
同じような悩み持った人が>>757の質問にたどり着くかもしれないだろ

769:名前は開発中のものです。
23/12/20 07:03:42.63 rcYWDYRg.net
すみません、
public GameObject targetObj;

[SerializeField] GameObject targetObj;
このどちらの記述方法でもインスペクタにtargetObjの枠が生成されますよね?
なにか違うんでしょうか。
使い分けとかあるんでしょうか?

770:名前は開発中のものです。
23/12/20 07:44:58.98 ggPGSH2z.net
>>769
上のはオブジェクト指向においてそのメンバが他のクラスにも公開されることを
意味してて
下のはオブジェクト指向においてそのメンバが公開されていない、つまり
「隠蔽」されていることを意味してる
下のは「隠蔽を維持したままインスペクターに表示させたい」という仕様
エキスパートのコードを見ると下のコードが書かれることが多い
そういうのはオブジェクト指向といって主に複数人開発で用いられる
俺はぼっち開発なのでそんなの気にしたことない
余裕で上のやり方を使っている

771:名前は開発中のものです。
23/12/20 07:51:51.43 C7Jnfw35.net
>>769
パブリックは他のスクリプトからでもそのプロパティを使えるようになる
シリアライズフィールドはインスペクターで値を変更できるようになる他のスクリプトからは使えない
プロがシリアライズフィールドを使う理由は他のスクリプトからそのプロパティを変更されて悪影響を及ばされる可能性があるから
外部に出すプロパティとそのスクリプトでしか使わないプロパティをきちんと分けてる

772:名前は開発中のものです。
23/12/20 08:38:24.68 tcfIGz3i.net
>>768
大丈夫。>757の質問が意味不過ぎて例題にならない

773:名前は開発中のものです。
23/12/20 09:17:17.08 C7Jnfw35.net
Unityのエディター拡張で3DViewPortって作れるんだっけ?

774:名前は開発中のものです。
23/12/20 09:22:10.77 wQ4ITWMI.net
コードをうまく言語化して説明できないという事は
考えが整理できてないからまず書き出して整理してみよう
というあるあるだろ

775:名前は開発中のものです。
23/12/20 09:26:03.26 wQ4ITWMI.net
>>773
できるよ
でも拡張で作ると基本的にインスペクタでいじれないから結局あまり意味ない

776:名前は開発中のものです。
23/12/20 09:34:46.40 wQ4ITWMI.net
レベルエディタレベルのものをもう一画面追加できるならむしろ聞きたいけど

777:ドーンおじ
23/12/20 10:57:43.83 z+oVE4GA.net
裏コード777!m9⎛˶◜◡◝˶⎞ドーン!

778:名前は開発中のものです。
23/12/20 12:06:03.92 C7Jnfw35.net
>>775
どうやってやるか知ってる?
まだ構想段階だけどプレハブモデルを開いてそれだけ表示するビューを作りたいなぁと思ってる

779:名前は開発中のものです。
23/12/20 12:12:41.81 C7Jnfw35.net
プレハブビューみたいな感じ

780:名前は開発中のものです。
23/12/20 16:21:49.58 rcYWDYRg.net
>>770
>>771
皆様、丁寧に教えてくだってありがとうございます。
なんとなく理解できました。
触らせたくないなら別に前者でもprivate GameObject targetObj;とすればいいんじゃないかと思ったんですが
なるほど、privateで宣言するとインスペクタに表示されないんですね。。
つまり、後者はInspectorからアクセスしたいけども
他のスクリプトからは触れさせたくない、要はインスペクタで触りたいけど、privateでお願いって時には
[SerializeField] を利用するんですね。
だとすると自分の様な初心者にはprivateであるべき状況というのが
まだ出くわしたことないし、その想像もできないんで
>>770さんみたく前者の方法で問題ない感じですね。自分もぼっち開発ですし。
またひとつ成長できました、ありがとうございます!

781:名前は開発中のものです。
23/12/20 16:22:37.10 2Ax+7Ufb.net
>>780
おうがんばれ

782:名前は開発中のものです。
23/12/20 16:23:13.46 rcYWDYRg.net
早速、今まで理由もわからず[SerializeField] 型名 変数名; と宣言してたものを
すべてpublic 型名 変数名;に置き換えてみましたが
今の所何も変わらず正常に動いてくれています。
基本的に、[SerializeField] で宣言してたものをpublicに変更しても
そのアタッチしたものが他所から触れる様になるだけで
それ以外は別に一緒で支障が出ることなく変更できる認識でいますが
それで問題はないですか?
[SerializeField] じゃないとインスペクタに表示されないとか
宣言できないとかいうケースないですよね??

783:名前は開発中のものです。
23/12/20 16:25:34.25 rcYWDYRg.net
例えば「ゲーム制作してるならセーブのシステム作る時とか、絶対[SerializeField]使うことになるから」、とか。

784:名前は開発中のものです。
23/12/20 16:36:51.90 2Ax+7Ufb.net
問題ないよ
上でも言った通り他のスクリプトから触れちゃうから取り扱い注意しないと変な値を入れて不具合出るかもって感じ

785:名前は開発中のものです。
23/12/20 16:41:48.63 rcYWDYRg.net
>>784
ありがとうございます!

786:名前は開発中のものです。
23/12/21 00:28:30.61 2yqws0uM.net
>>778
先に言っとくけどsceneビューで表示した方が速いし軽いし便利
public class Interactive3DViewport : EditorWindow
{
private Camera viewportCamera;
private GameObject prefabInstance;
private string prefabPath = "Assets/Path/To/Your/Prefab.prefab"; // プレハブのパス
[MenuItem("Window/Interactive 3D Viewport")]
public static void ShowWindow()
{
GetWindow<Interactive3DViewport>("3D Viewport");
}
void OnEnable()
{
GameObject cameraObj = new GameObject("Viewport Camera");
viewportCamera = cameraObj.AddComponent<Camera>();
viewportCamera.clearFlags = CameraClearFlags.SolidColor;
viewportCamera.backgroundColor = Color.gray;
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
prefabInstance = Instantiate(prefab);
}
void OnGUI()
{
if (viewportCamera != null)
{
Rect camRect = new Rect(0, 0, position.width, position.height);
viewportCamera.pixelRect = camRect;
Handles.DrawCamera(camRect, viewportCamera);
}
}
}

787:名前は開発中のものです。
23/12/21 00:29:32.69 2yqws0uM.net
無茶評判悪くて使ってくれない

788:名前は開発中のものです。
23/12/21 06:24:35.71 /spufi4i.net
>>786
めちゃくちゃ助かります!
ありがとうございます!

789:名前は開発中のものです。
23/12/21 08:30:53.17 2yqws0uM.net
>>788
あと
void OnDestroy()
{
if (viewportCamera != null)
{
DestroyImmediate(viewportCamera.gameObject);
}
if (prefabInstance != null)
{
DestroyImmediate(prefabInstance);
}
}
しないと解放されないしいい事なんかない
モーション再生したりとか色々自力になるし

790:名前は開発中のものです。
23/12/21 08:32:41.26 /spufi4i.net
>>789
なるほど
それはそのウィンドウ閉じたときで良いんですよね?

791:名前は開発中のものです。
23/12/22 06:47:26.04 BHw2hwhe.net
すみません、素朴な疑問なんですけど
Input.GetKey("space");って今のUnityじゃエラーになるんですか?
Input.GetKey("KeyCode.Space");なら動きました。
どういうことでしょう?

792:名前は開発中のものです。
23/12/22 07:31:08.46 5SOhTIkJ.net
そりゃエライコッチャ

793:名前は開発中のものです。
23/12/22 07:58:17.85 2bdzIp1f.net
>>791
下のコードは何かの間違いじゃないか?
俺の知識では動く道理がない

794:名前は開発中のものです。
23/12/22 08:24:48.28 OLG1WtwV.net
KeyCode.Spaceという名前をつけたんだろw

795:名前は開発中のものです。
23/12/22 09:16:45.04 bOlEfo0c.net
役所とかの記入例に
山田太郎
ってあるとそのまま書いちゃうタイプとか

796:名前は開発中のものです。
23/12/22 09:46:30.94 E/2yW4GT.net
ジェンダーレスの観点から最近の記入例の名前って、、、


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch