X



【ゲームエンジン】Unityなんでも質問スレpart5

■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
垢版 |
2021/08/27(金) 19:13:24.68ID:p8CMd57b
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。 プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他

■注意事項
特になし
■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←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。


前スレ

【ゲームエンジン】Unityなんでも質問スレpart4
https://mevius.5ch.net/test/read.cgi/gamedev/1619223275/
2021/09/01(水) 20:06:35.46ID:ZfGOzjXf
>>33
お前それ昨日のUnity本部の放送やん
material.setInt()が非推奨で
material.setIntegerになったってやつだろ?
2021/09/01(水) 20:56:25.77ID:mHIebA3r
シェーダーでカメラ位置を利用するならビルトインシェーダー関数から引っ張って来たほうが良いんでは?
C#側のカメラとシェーダー側カメラは座標が同じではないかもしれん
36名前は開発中のものです。
垢版 |
2021/09/02(木) 03:56:56.68ID:PSew7ma3
GetKeyでupにしてるのに下に行っちゃうんですけどなんでかわかりますか?
37名前は開発中のものです。
垢版 |
2021/09/02(木) 04:21:37.07ID:6ItE3Go+
Space押したのに弾出ないと思ったら日本語じゃダメなのか...
38名前は開発中のものです。
垢版 |
2021/09/02(木) 08:02:02.11ID:QRjL/PRZ
>>36
増減値が逆なんだろ。
2021/09/02(木) 12:11:23.44ID:8EDFDo/6
パッドの十字キーだけ逆らしいぞ
40名前は開発中のものです。
垢版 |
2021/09/02(木) 18:04:55.44ID:De9iV2yN
クソゲー作るぞ!
41名前は開発中のものです。
垢版 |
2021/09/02(木) 18:37:24.14ID:fFLzG+vu
スクリプトを作る際ってコピペしちゃってもいいんですか?
それとも一回じぶんで全部打ち込んだ方がいいのかな
42名前は開発中のものです。
垢版 |
2021/09/02(木) 18:41:17.74ID:MzTWK1s2
ベーマガかよw
43名前は開発中のものです。
垢版 |
2021/09/02(木) 18:57:15.45ID:X8IQsmrz
え?書籍とか見ながら自分で打ち込むだろ最初は。
そのうちコピペしかしなくなるけど
44名前は開発中のものです。
垢版 |
2021/09/02(木) 21:03:30.04ID:MzTWK1s2
>>43
コピペしちゃっても、からの、自分で打ち込んで、って言ってるからデジタル書籍の扱いをどうするかでしょ。
2021/09/03(金) 04:48:56.84ID:LGIFZOLo
>>34

そうだったですか、ただ今回はFloatを渡しているので、あまり関係はないかも知れませんよね。

>>35

アドバイスの方有り難うございます。
ビルトインインシェーダ関数の_WorldSpaceCameraPosを使っても、結果は一緒でした。
C#で渡していたのもカメラのワールド座標だったので、多分同じことをしているのだと思います。

何か解決策はないでしょうか・・・
46名前は開発中のものです。
垢版 |
2021/09/03(金) 07:56:06.02ID:bay2tjkn
メッシュ描画したいならdrawmeshじゃダメなん?
2021/09/03(金) 14:37:44.36ID:6loRjXu+
シェーダーの書き方が間違ってるのに、コードもなしにどうしてでしょうかって言われてもw
2021/09/03(金) 18:31:33.35ID:LGIFZOLo
>>47 描画用シェーダだけだと、今は最もプリミティブなものを作っているのでこんな感じです。

vs_out vert (uint id : SV_VERTEXID)
{

Out.pos = float4(float3(tubeBuffer[id]), 1);


return Out;
}

[maxvertexcount(128)]
void geom (point vs_out input[1], inout TriangleStream<gs_out> outStream)
{
gs_out o;

float4 pos = input[0].pos;

o.pos = pos;
outStream.Append(o);



}

fixed4 frag (gs_out In) : COLOR
{
return _Color;

}
2021/09/03(金) 18:34:05.75ID:LGIFZOLo
計算は、コンピュートシェーダーでやっています。
_Origin_x, _Origin_y, _Origin_z
は、予めC#の方で計算しておいた、カメラのワールド座標とベクトルから求めた、カメラから一定の距離にある、カメラ正面の座標です。


[numthreads(64,1,1)]
void tubeAl (uint id : SV_DispatchThreadID)
{
float3 position;
for (int i = 0; i < 16; i++)
{
float radius = 1.0 + (0.5 * i);
for(int j = 0; j < 7 + (6 * i); j++)
{
float a = radius * cos(j * 0.785 * (1 / (i + 1 )));
float b = radius * sin(j * 0.785 * (1 / (i + 1 )));
position.x = a + _Origin_x;
position.y = b + _Origin_y;
position.z = _Origin_z;
}


}
tubeBuffer[id] = position;

}
2021/09/03(金) 18:37:08.93ID:LGIFZOLo
法線等考慮していないので、もし形成できたとしてもカメラに向かって円状にはなりませんが、
今はとにかくカメラの移動に伴ってメッシュが生成されていけば
2021/09/03(金) 18:38:05.81ID:LGIFZOLo
OK、という段階です。
C#の方は、多分問題なくコンピュートシェーダーの初期化、バッファの宣言、初期化、ディスパッチや描画命令等出来ていると思います。
2021/09/03(金) 18:45:02.87ID:LGIFZOLo
あとフラグメントシェーダですが、シェーダのプロパティで

Properties{
_Color ("Color", Color) = (1,1,1,1)
}

を差し当たり直に設定しています。
53名前は開発中のものです。
垢版 |
2021/09/03(金) 19:08:19.48ID:bay2tjkn
コンピュートシェーダとか専門的なことはわからんけどメッシュの描画はdrawmeshでやって
シェーダーの処理はマテリアルで渡してあげたらダメなの?

そっちの方がカメラの位置とかやりやすいんじゃね
しらんけど
2021/09/03(金) 19:15:20.16ID:LGIFZOLo
>>53

そうですね、GPUベースでやってみたかったですし、できるはずだと思いますが、
大量のパーティクルと違ってそこまで処理も重くないでしょうから、C#の方でメッシュ形成した方が、結局は早いかも知れませんね。
2021/09/03(金) 19:47:31.54ID:Sst/B9Re
Unityを日々勉強していて、何故、学生時代にいろんな小説や歴史を読んだり
数学や物理学をもっとしっかり学ばなかったんだろうと涙が溢れ出た
後悔先に立たず
56名前は開発中のものです。
垢版 |
2021/09/03(金) 21:28:51.62ID:bay2tjkn
>>54
多分知ってると思うけど、DrawMeshInstancedだとバッチング減らせるらしいよ
2021/09/03(金) 22:49:56.20ID:6loRjXu+
float3 worldPos = UnityObjectToClipPos(float4(v.vertex.xyz, 1) + float4( ( _WorldSpaceCameraPos.xy) , 0 , 0) ).xyz;
o.vertex = float4(worldPos, 1) ;

コンピュート抜きに常にカメラど真ん中に表示されるオブジェクトをシェーダーで描くならこれでできたけど
シェーダー入れてるオブジェクトのワールドZが999じゃないといけなかったり、カメラ回転すると外れたりする。
もっと複雑な計算が必要な印象。ググっても出てこないのでわからない。
カメラにオブジェクトを親子付して、カメラが動くとシェーダーを更新するスクリプト書いた方が早そう
2021/09/04(土) 08:12:11.34ID:mpxWyr/l
>>56

そんなんですか、情報ありがとうございます!

>>57

わざわざ実装まで試みて頂いてありがとうございます。
ビルトインシェーダ関数をそのように使った場合、カメラの座標が、例えば正面に進んだとして、
新しく形成されていますか?

もし良かったら、ジオメトリシェーダ部分を参考にさせて頂けませんか?


あとはビルトインシェーダ関数でなく、カメラにアタッチしたスクリプトから取ってきた座標は、カメラの現在座標と向いている方向とを計算した結果なので、
回転の問題は軽減されそうな気がします。
2021/09/04(土) 08:17:56.83ID:mpxWyr/l
貼っていただいた実装も試みたのですが、最初の1フレームに描写されるだけで、
カメラの座標を変えても、新しくメッシュが形成されないのです。
2021/09/04(土) 08:34:02.52ID:mpxWyr/l
[maxvertexcount(128)]
void geom (point v2g input[1], inout TriangleStream<g2f> outStream)
{
    g2f o;
UNITY_INITIALIZE_OUTPUT(g2f, o);

float4 pos = input[0].vertex;




for (int i = 0; i < 16; i++)
{
float radius = 1.0 + (0.5 * i);
for(int j = 0; j < 6 + (6 * i); j++)
{
float a = radius * cos(j * 0.785 * (1 / (i + 1 )));
float b = radius * sin(j * 0.785 * (1 / (i + 1 )));
pos.x = a + pos.x ;
pos.y = b + pos.y;
pos.z = SimplexNoise(pos.z);
o.pos = UnityObjectToClipPos(pos);
//o[i].col = input[0].colWorld;
outStream.Append(o);

}
}
}

今だとこんな感じです。
特にRestartStripしていません。
61名前は開発中のものです。
垢版 |
2021/09/04(土) 13:00:35.84ID:uilkUsx1
いきなり失礼します
超初心者なのですが

if (Input.GetMouseButton(0))
{
○○○○
}

だとマウスのボタンを押してるときに○○○○を実行すると思うのですが、ボタンを押してないときに○○○○を実行したときはどういう風に書いたらいいでしょうか…?
2021/09/04(土) 13:16:31.62ID:4s/Kvr8z
InputGetButtonUpか
毎フレーム行われていいならelseでよいのでは
63名前は開発中のものです。
垢版 |
2021/09/04(土) 13:22:23.54ID:uilkUsx1
>>62

ありがとうございます
やってみます
2021/09/04(土) 14:15:39.51ID:KuP8pcA2
>>60
UnityObjectToClipPosはv2g vert(appdata v)?内に書かないといけない
65名前は開発中のものです。
垢版 |
2021/09/04(土) 17:50:05.06ID:9nO9+S2f
ゲームマネージャーの仕組みがわからないよぉ
2021/09/05(日) 03:41:25.98ID:UhGmA0IN
>>64

ありがとうございます。
頂点シェーダの方に書きましたが、結果的には望んだ結果が出せませんでした。
しばらく寝かせておきます。

アドバイスくださった方々ありがとうございました。
67名前は開発中のものです。
垢版 |
2021/09/05(日) 09:41:33.52ID:RWBX860i
質問します
今Androidアプリを作ってていよいよストアに申請しようという段になりました
ここで必要になるのがアプリのアイコン画像やフィーチャー画像ということになります
これらの画像を作る時ゲーム中のスクリーンショットを使いたいのですが
unityのアセットってスクリーンショット化をしてストアで使っていいものなのでしょうか?
68名前は開発中のものです。
垢版 |
2021/09/05(日) 14:26:13.10ID:RWBX860i
質問です
今Androidアプリのビルドをしててapi level30にしてビルドするのに手間取っています
本アプリでAndroid SDKのアップデートがうまく行かないので空のプロジェクトで
実験することにしました
空のプロジェクトでビルドをAndroidに変えてターゲットAPIを30にしてビルドしました
そうしたら「sdkをアップデートしますか?」というダイアログが出てきて
okを押したところ次のようなエラーで終了してしまいました
https://i.imgur.com/UgYyWP3.png
Android sdkを30にアップデートする簡単な方法はないでしょうか?
Android studioを今はインストールしていません
69名前は開発中のものです。
垢版 |
2021/09/05(日) 15:24:31.35ID:RWBX860i
>>68
これは自己解決しました
結局Android studioをインストールしました
横着したらダメですね
70名前は開発中のものです。
垢版 |
2021/09/05(日) 15:30:01.99ID:ryvtC8Yy
質問です
GameObject A = 「○○の範囲にあるオブジェクト」
としたいとき、「」の中はどういう風に表現したらよいでしょうか?
71名前は開発中のものです。
垢版 |
2021/09/05(日) 15:47:00.77ID:RWBX860i
>>70
https://docs.unity3d.com/jp/current/ScriptReference/Physics.OverlapBox.html
戻り値違うけど
2021/09/05(日) 17:07:53.16ID:BHbWJBb7
VROID→Blender(cats処理後改造してfbx)→Unity(vrm化済み)に持ち込んだヒューマイノイドタイプのオブジェクトの質問です
シーンには上記のヒューマノイドと地面のplaneオブジェクトだけです
ヒューマノイドの足を短くすると宙に浮きます
そこでヒューマノイドのポジションのY軸を調整して接地させてみましたが、シーンビューでは接地しててもゲームプレイ画面では浮いてしまいます。
試しにplaneのポジションを上げて接地させてみましたが、やはりゲームプレイ画面では浮きます。
どうすれば接地させることができるのでしょうか?

ググってみると導入モデルのInspectorのConfigureからHipsボーン(ルートボーン)のポジションを変える解決法が乗っていますが
なぜか当方のプロジェクトでは導入したモデルvrmが喪失しておりいじることができません

いままで行った処理は
・fbxのヒューマノイド設定やマテリアル・シェーダー指定でvrm出力後、vrm読み込みしシェイプシフター設定
・ダイナミックボーンによる髪の毛やスカート揺れ設定
・メッシュスプリッターでメッシュをマテリアルごとに
・マジカメッシュクロスで2重スカートのクロス設定
・足を含むAmatureのサイズ変更

以上となります
2021/09/05(日) 18:46:21.26ID:AW+7mbmL
同じシーンテンプレートから作成したシーンの一つに変更を加えると、その他のシーンにも反映されてしまうのですが、これは仕様でしょうか?
他のシーンには反映されないようにする方法も教えて頂けると嬉しいです。
2021/09/05(日) 19:21:02.97ID:CbOnRBVt
オープンワールドゲームみたいな広大なマップを作るとき
ヒエラルキーがものすごい数になって分かりにくくなるんですが
これは頑張って管理しないといけないんでしょうか
2021/09/05(日) 19:45:36.34ID:rNGz2Hxf
>>74
地形はTerrain以下に子オブジェクトとして紐づければ
それで町とか
カメラ
プレイヤーとかで区切ってべつべつにかんりすればすっきり
76名前は開発中のものです。
垢版 |
2021/09/05(日) 20:12:23.35ID:mOtP5aKb
>>68
コンソールからAPIー30取って来て使ってるUnityバージョンのAndroidengineフォルダのプラットフォームフォルダに置けば通せるよ
2021/09/05(日) 20:54:58.88ID:RWBX860i
>>76
ありがとうございます
Android studioでインストールしました
2021/09/06(月) 01:16:26.89ID:xpf1Rk4L
>>75
ありがとう
なるほど子オブジェクトにして管理ですか
79名前は開発中のものです。
垢版 |
2021/09/06(月) 11:29:48.52ID:o0Omy+ef
>>74
広大なマップ全部初めからインスタンスなのか?
スゲーメモリ食いそう
80名前は開発中のものです。
垢版 |
2021/09/06(月) 14:11:27.63ID:Lkt7e4IY
ある程度の位置に来たらシーン合成とかで管理すれば
2021/09/06(月) 18:13:35.33ID:tj7E+ylM
ひどく初歩的な質問で申し訳ありません
タイムラインでヒューマノイドオブジェクトをMixamoでダウンロードしたwalkやrunのfbxを使って移動させるアニメーションを組みたいのですが、
ヒューマノイドオブジェクトがその場で足踏みして移動しません。
どうすれば移動させられますか?
2021/09/06(月) 19:07:16.20ID:xpf1Rk4L
>>79
最初から全部配置しといても
Unity様が良きに計らってくれる…
みたいなことしてくれないかな
83名前は開発中のものです。
垢版 |
2021/09/06(月) 19:11:44.81ID:MV+9GB6N
>>81
その説明では何とも。
記述できないなら、せめて動画でアップして。何かわかるかも。
84名前は開発中のものです。
垢版 |
2021/09/06(月) 22:00:30.40ID:I2NTygQ0
>>81
まずUnityのアニメーターのApply Root Motionを理解してからの方がいいかも
85名前は開発中のものです。
垢版 |
2021/09/07(火) 04:23:23.50ID:p7zX6a/Y
インスペクターにOnClickイベントが表示されないのですが解決法わかりますか?
86名前は開発中のものです。
垢版 |
2021/09/07(火) 04:34:25.32ID:dhAJ3i3B
すみません解決しました
2021/09/07(火) 11:43:03.68ID:lngHOnsy
>>30
絵やらデザイン系は右脳で
プログラミングはゴリゴリの左脳・計算脳だからな
2021/09/08(水) 05:13:48.17ID:HhX017v4
>>33
もう質問主も寝かせてる話なのかとは思うけど、これメッシュ生成し続けるって上限とかないの?
あってジオメトリシェーダー使うならテクスチャバッファにリングバッファ的にポジションCPUでかいてそれを元にジオメトリシェーダーでモニョモニョすればと思うました
89名前は開発中のものです。
垢版 |
2021/09/08(水) 19:49:20.75ID:svnqeWoz
ブログとかでUnityの解説してて分かりやすくて
その人が出してるアプリを見に行くと
DL数も少なくてとてもヒットしそうになくて
ちょっとびっくりということが結構あるな
ああいう人は受託で稼げてるから
アプリは自分の趣味に特化してるとかかな
2021/09/08(水) 20:32:19.47ID:E9pnqJxx
仕事と趣味でしているのって違うよね

俺はちっともゲームは作れないけど一部分に関してはいろいろ頑張って理解できたので解説サイト作ってみたいと考えてしまう
もし俺がバリバリに現役売れっ子ゲームクリエイターなら解説なんて他方でやってられないとか手間のかかることうんざりだよ

たとえば仕事で通訳している現役バリバリ英語できるひとが只でゲーム開発を和訳してくれるわけがなく
英語わかんないやつが必死こいて翻訳してたりSNSで他人に教えてあげたりしている

そんな感じだよ
という俺の持論
2021/09/09(木) 07:33:02.20ID:3HZ1vFNV
プログラミング技術と面白いゲームを作る技術は全く別物じゃん。

ピアノ習ったら全員作曲家になれるの?って話。
2021/09/09(木) 08:40:16.07ID:MK0Q4A21
>>91
正論やな
2021/09/09(木) 13:15:36.11ID:AdVsFyJh
気が強くてプログラミングでマウントしてくる職場の人が
個人で出してるゲームをプレイストアでダウンロードしたけど
微妙だった
94名前は開発中のものです。
垢版 |
2021/09/09(木) 13:29:43.60ID:cgru5Bh9
ゲームの面白さはプランナーの仕事だからな、プログラミングが凄くても面白さには比例しないし
ある程度ストレスなくプレイできるなって思われるだけで
2021/09/09(木) 13:33:03.93ID:ZgyA5AvK
そりゃそうだろ
プログラマーなんて建設現場の土方といっしょ
決して建築家にはなれない
2021/09/09(木) 13:55:42.26ID:ljl/wd4k
最低でもプログラマーの常識、可能なら一端のプログラマーでないとシステムエンジニアにはなれんぞ
下を理解してないやつが上に立つことなどできない
将来エンジニアになりたいならプログラマーになることは俺は必要だし無駄ではないと思う
2021/09/09(木) 18:23:12.94ID:3HZ1vFNV
無駄かどうかって話じゃなくね
2021/09/09(木) 18:37:04.68ID:xAN09TPv
プログラマーが建築家(エンジニア、デザイナー)になれないって言うからんなわけねーだろって言ってるだけだろ
2021/09/09(木) 18:37:08.72ID:JOhyguQB
結局個人制作なら本人のセンスによるんだよな
職業がどうとかは関係ない
自称元ゲームプランナーの無職が作ったゲームが面白いとは限らないし
2021/09/09(木) 18:52:10.18ID:YtpvGyxn
>95は定義がいろいろ謎だな
プログラマをカースト最下級だと揶揄するのは分からなくはないが
肉体労働者はホワイトカラーになれない的なニュアンスなら
プログラマに関しては的外れじゃないかな?

どっかから連れてきた天下りの門外漢が管理職になっても
何もできない木偶にしかならんだろ
2021/09/09(木) 20:14:39.82ID:RaqSITdl
スクリプトA
public static class A
{
 public struct B
 {
  public float c;
 }
}

スクリプトD
public class D
{
 void UpDate()
 {
  float e = A.B.c;
 }
}

スクリプトDのeにスクリプトAのcを代入したいのですが、代入する行でcs0120のエラーが出てしまいます。
どうすれば代入出来ますか?
スクリプトAはGitHubから導入したスクリプトなので変えられません。
2021/09/09(木) 20:43:35.24ID:jpCh8LST
public static float c;
staticクラスの変数はstaticで宣言するとOK
2021/09/09(木) 20:50:13.07ID:3HZ1vFNV
スクリプトAは変更できないって前提では?
2021/09/09(木) 20:51:03.37ID:jpCh8LST
変えればOK
2021/09/09(木) 20:51:38.82ID:3HZ1vFNV
変えれないって前提では?
2021/09/09(木) 20:53:36.16ID:xAN09TPv
コントか?
2021/09/09(木) 21:00:18.91ID:jpCh8LST
変えられないほど底辺ならインスタンス化すればOK
2021/09/09(木) 21:12:06.73ID:7NvRTw1V
インスタンスの無い変数の値を受け取れるわけ無い
宣言しているだけで存在しない変数なんだから
2021/09/09(木) 21:12:07.61ID:RaqSITdl
>>102
staticクラスの変数もstaticで宣言するのですね、ありがとうございます。
取り敢えず変えてみたらエラーは消えました。
また壁にぶち当たったら来ます。
2021/09/09(木) 21:17:06.41ID:7NvRTw1V
変えられないとなると難しい
俺にはわからん
よく見るとAはスタティックなのか
でもBはインスタンスどうなっているんだ
2021/09/09(木) 23:14:57.48ID:DkN/DjRB
ユー、変えちゃいなよ!
112名前は開発中のものです。
垢版 |
2021/09/09(木) 23:46:24.62ID:eBBeKhK/
わざわざクラスや変数staticにせんでも
static関数作って値返せばいんじゃね
113名前は開発中のものです。
垢版 |
2021/09/09(木) 23:47:05.46ID:eBBeKhK/
あ、いや変数もstaticだ
2021/09/10(金) 07:54:37.91ID:tB+Td/Tq
>>109
>取り敢えず変えてみたらエラーは消えました。

変えれない前提を自ら無視するとはひどいw
2021/09/10(金) 07:57:45.45ID:4dX6AStO
まあスクリプトだろうとなんだろうと変えられないはずはないからね……
2021/09/10(金) 07:58:46.78ID:AZowF18M
そもそもUnity関係ないところもコント感ある
117名前は開発中のものです。
垢版 |
2021/09/10(金) 09:40:34.69ID:MoID+ieY
インスタンスにしないのとアクティブにしないのとでは
どういう違いがあるんですか
2021/09/10(金) 10:18:15.97ID:Vrqrsvlj
実体化しないのと有効にしないのとでは
どういう相違点があるのか?→相違点しかないのでは?
2021/09/10(金) 12:05:58.85ID:cEznrE1I
>>117
インスタンスがなかったら存在しないからパラメタ設定しておいたり別のオブジェクトから参照して操作などできないじゃん
それともそういう意味ではなくて?
2021/09/10(金) 12:09:18.95ID:cEznrE1I
>>119
別にやり方を強制している訳じゃないよ
121名前は開発中のものです。
垢版 |
2021/09/10(金) 12:27:14.67ID:OdLnlLsa
Unityの習得度(プログラマー向け)をレベル分けしてみたけどこんな感じかな(だいぶザックリしてるけど)

入門レベル
・本とかネット見ながらUnityの基本操作ができる
・球転がしとか作れる

初級者
・簡単なゲーム(2Dシューティングとか)なら一人で作れる

中級者
・大体の思い描いたゲームが作れる
・この辺りからEditor拡張にハマり始める

上級者
・Editor拡張等を用いて大体の思い描いた開発支援ツールを作れる
・Unityのこと質問したら大体答えが返ってくる。歩くリファレンスと化している

賢人
・Storeに売り出した自作アセットが多くの人に利用されている
・Unityに関する書籍を出版している


・Unityの中の人で、エンジンの開発に携わっている
・自作アセットがUnityの標準機能として搭載された
2021/09/10(金) 15:57:29.41ID:Gfu2twQX
リア中
・unityなんて、何それうまいの?
・結婚して子育て、年収800万以上
123名前は開発中のものです。
垢版 |
2021/09/10(金) 16:49:05.50ID:ikshz76a
>>119
いえそういうことです
インスタンスしてあってアクティブになってない
124123
垢版 |
2021/09/10(金) 19:50:40.01ID:ikshz76a
なんかミス

ありがとうございます
インスタンスしてあるとアクティブになってなくても
メモリは消費してるってことですね
2021/09/10(金) 22:11:01.23ID:UOSQuWkZ
失礼します。c#とウニティ初学者です。
皆様はコンテナクラスのコピーはどうやって実装されてますか?
コピー代入だとシャロコピーにしかならないんですよね?

私は敵クラスを格納するコンテナを作り、そこで一括に敵を管理しております。
そこで、とあるリストenem_1から別なとあるリストally_1に敵をまるっと移したい。
そういった場合にディープコピーで実装したい次第であります。
敵はInstantiate関数で実体化させたMonobehavior継承プレハブクローンで、enem_1は再利用する予定です。
なのでenem_1をDestroyするかList.clear()したいのですが、その場合はディープコピーの方が良いですよね?
トンチンカンなことを聞いているかもしれませんがよろしくお願いします。
126名前は開発中のものです。
垢版 |
2021/09/10(金) 22:15:39.78ID:dhskHfd/
Unable to check errors listed in `Temp/ApiUpdater_CheckMovedFromd7eab44652aabb2458fea1d7810a4b6a`. File contents:
2697508544448
こんなかんじのエラーが出てきてしまったのですがこれはどういう意味なのでしょうか?
2021/09/10(金) 22:42:06.68ID:gyv6yBUw
>>125
ディープコピーしたら敵が二倍に増えないか?
質問をよく読んでないので検討外れな回答かもしれないけど
2021/09/10(金) 22:52:13.56ID:gyv6yBUw
>>125
内容と使い方によるんじゃない
ちゃんと把握して管理できてれば
2021/09/10(金) 22:59:58.72ID:3ogDeoii
ポインタ渡しただけだと実体の値が変わってしまうって事なんだろうけど
ScriptableObjectでいいような
2021/09/10(金) 23:37:31.22ID:UOSQuWkZ
>>129
これは初めて知った機能でした。
ありがとうございます。
しかし私が実装したい機能はポケモンの個体値を個別に設定するタイプなので、敵AIを記述するのには使えるかもしれませんが、各実態ごと移すのには向かないのではないだろうか……

皆さんディープコピーはしない感じなんでしょうか?
参照コンテナを保存する場合はどうやって範囲外の生存を担保しますか?
デストロイ使わない感じ?
書き出したいコンポーネントをリストからforeachで書き出して、実体化するときに再アタッチするのかな……?
2021/09/10(金) 23:47:55.59ID:0hasLUzi
おそらくあなたがしたいことは、
各モンスター個体の能力値を個別に管理したいんだと思うけど、そうかな?
そしてそれを管理してるのが>>125の「敵クラスを格納するコンテナ」ってやつ?
そうなると、そのコンテナはクラスを格納してるんじゃなくて、
敵インスタンスの参照を保持してると思われます

C#の仕様ですと、数値のような一部のプリミティブな変数を除き、
通常のコピーではインスタンスへの参照がコピーされます
そして自動でガベージコレクションが走り、
参照が生きていればインスタンスも生き続け、参照を失うとインスタンスは解放されます

つまり、「敵クラスを格納するコンテナ」に参照を保存しおけば、
個別キャラとしてのデータ、つまりインスタンスは生存し続けます
C#の仕様です

補足情報としては、ガベージコレクションが走るタイミングは任意なので、
参照を失った瞬間に解放されるわけではない…はずです
2021/09/11(土) 00:09:35.53ID:rXFpArPO
デフォルト値は持ちたいが個別にHPやLvの値は一次的に保持したい(シーン単位で)
という用途にはScriptableObjectは合致するよ(永続的な保存は出来ない)

コンテナはしらんけどC#のDB系は何か使いづらいんで
SQLiteに丸投げしてる
2021/09/11(土) 00:22:29.84ID:X3KGMt+u
>>131
ありがとうございます!
私のつたない説明でここまでクリティカルな返答されるとか、えすぱーか何か?

ガベージコレクションが実体の照会をし続けて、リファレンスが一個も無くなった場合以降に実体がdeleteされるのですね?!
それならば、任意のコンテナに参照を保持し続けていれば、実体が消去されることがないのでシャロコピーを使い回すことで十分ですね!
私の想定する使用法なら、コピーしたあとでforeachデストロイではなく、コンテナ.クリア()で移動元の配列を空にすればいいと思います。

私はc丼の初歩的な仕様もよくわかっておりませんでした。しかしこの件についてはあなたの説明で得心しました!
ありがとうございます。多謝!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況