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

■ このスレッドは過去ログ倉庫に格納されています
2023/11/06(月) 16:50:23.83ID:aWH6Xwln
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。 プラットフォームサポートは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なんでも質問スレpart11
https://mevius.5ch.net/test/read.cgi/gamedev/1691129256/l50
273名前は開発中のものです。
垢版 |
2023/11/26(日) 17:30:21.75ID:J5rQpI/4
すみません、
>>243さんのコード試してみてるのですが
GameObject obj = Instantiate(prefab); // プレハブから複製オブジェクトを生成・配置する
で、
「インスタンス化したいオブジェクトが null です」とエラーが出ます。

自分もコードみてて気になってたんですが、
自分が書いてたコードの時でいうところの
GameObject obj = (GameObject)Resources.Load("プレハブの名前");みたいに
どこかでプレハブ化しているオブジェクトの名前を記述しなければならない気がするんですが
違いますか?
例えば、
public GameObject prefab;
void Start()
{ GameObject obj = Instantiate(prefab); }
これでは、prefabにはなにも入っていません。
記述漏れかな?とか。
2023/11/26(日) 17:37:44.06ID:sKe5WX7u
パブリックなんだからインスペクタで指定してるんでしょきっと
275名前は開発中のものです。
垢版 |
2023/11/26(日) 17:49:39.47ID:ap8K17/p
>>273
MonoBehaviourを継承したスクリプトがアタッチされたオブジェクトが予めシーンのどこかに配置されてる前提になるけど、このオブジェクトを選択するとInspectorにpublicの変数が表示されてそこにオブジェクトを指定したりできるようになる
243はその前提のコードになってる
276名前は開発中のものです。
垢版 |
2023/11/26(日) 17:56:54.74ID:wJ4Ewbd+
(0,0,0)にあるオブジェクトの情報を取得する方法が知りたいんですが、
レイを飛ばすのとコライダーを使う以外に手っ取り早い方法ってないのでしょうか?
オブジェクトを(0,0,0)ちょうどに置くので余計なことをしないでgameobject関数に入れたいのですが…
277名前は開発中のものです。
垢版 |
2023/11/26(日) 18:17:53.87ID:J5rQpI/4
>>275
ほんとだ、ゲームマネージャーのスクリプトのインスペクタに
prefabの枠ができてました!

初歩的なことかもしれませんが
プレハブ化したオブジェクトをその枠にドラッグしようとしたら
プレハブクリックしたらプレハブのインスペクタに切り替わっちゃうんですが
これ、どうすればいいんですか?^^;
278名前は開発中のものです。
垢版 |
2023/11/26(日) 18:19:48.20ID:J5rQpI/4
あー、すみません。
ドラッグじゃなくて、枠のほうで選べるんですね
すみません。解決しました。
279名前は開発中のものです。
垢版 |
2023/11/26(日) 18:21:25.49ID:nqSny9Yy
みんなはどんなPCでゲーム制作してるの?
MacBookかWindowsPCかで悩むわ
どっちにしてもデスクトップは置き場ないから
ノートPCになる
2023/11/26(日) 18:21:35.61ID:sKe5WX7u
>>276
シーンにあるobjectを一覧にしてそのトランスフォームが原点か否か見ればよくね?
281名前は開発中のものです。
垢版 |
2023/11/26(日) 18:32:14.78ID:J5rQpI/4
うおおおおおおおおおおおおお!!!
すごいっす!!!!
>>243さん、すごいっす!!!
update()内にGetComponent無しで
完全に一緒の状況になりました!!!

これで前より軽くなってるってことですよね!
すごいっす!感動です!
2023/11/26(日) 18:42:25.15ID:vo5TLBjQ
ID:J5rQpI/4のおかげでこのスレのレベルが格段に上がった!褒めて使わす!m9⎛´・ω・`⎞ドーン!

ID:sKe5WX7uのせいで低クオリティになってる!消えろ!死ね!m9⎛´・ω・`⎞;y=ー(゚д゚)・・∵. ドーン!
283名前は開発中のものです。
垢版 |
2023/11/26(日) 18:52:37.05ID:kOB5vzh5
>>279
ノートpc は向いてない
デスクトップで4Kテレビにつなげて製作してる
284名前は開発中のものです。
垢版 |
2023/11/26(日) 19:21:28.97ID:wJ4Ewbd+
>>280
すいません、スクリプトで取得したいんです
gameobject関数に入れた自作変数に(0,0,0)にあるオブジェクトはこれだよってしたいんですよね
(0,0,0)は実際には動かすんですけどややこしいので説明省きました
285名前は開発中のものです。
垢版 |
2023/11/26(日) 20:04:29.42ID:wJ4Ewbd+
>>284
chatGPTに聞いてもPhysics.OverlapSphereかRaycast使えって言われるんですよね
指定された座標のオブジェクト情報を取得したいだけなんで「そんなことせなあかんか?」って思ったんですけど、調べてもそれしか無さそう?
2023/11/26(日) 20:13:44.84ID:uqB1fo0P
シーンに直置きしてるならシリアライズフィールド使うかStartで自分から登録されに行けばよくないか?
287名前は開発中のものです。
垢版 |
2023/11/26(日) 20:25:02.75ID:nqSny9Yy
>>283
まじかあ
絶対にノートPCはダメってワケじゃないでしょ?
TVに繋げる方法あるの初めて聴いたわ
2023/11/26(日) 20:29:11.75ID:YEGARdnY
いわゆるグリッド移動ならインデックス管理しておいて、そのインデックスにオブジェクトを格納しておけばいいけど
指定したグローバル座標にあるオブジェクトを取得するのはRayかOverlap~しかないんじゃないかな
いや、これらが取得するのは厳密にはColliderだからObjectに変換する必要あるけど
タグかレイヤーで目的以外は弾けば無駄が少ない
289名前は開発中のものです。
垢版 |
2023/11/26(日) 20:39:15.05ID:ap8K17/p
Physics.Raycastを嫌う理由がGC発生によるパフォーマンスの低下だとするなら、Physics.RaycastNonAllocを使えばいい
使ったことないけどOverlapSphereも同様らしい
GC発生を嫌ってるわけではないとなると目的が不明瞭なので適切な提案ができない
290名前は開発中のものです。
垢版 |
2023/11/26(日) 21:06:45.28ID:wJ4Ewbd+
>>286,288,289
まとめての返信で失礼します
288さんの言うようにグリッド移動ですね。語彙力無くてすいません
GCとか後々のことを意識してのことではありました。初心者知識ですがわざわざ余計な処理を走るのを避けたかったんです。
なんか、もうちょい軽い処理でいけそうだなぁ…って考えたんですけどね…
インデックス管理もなんとなくやることは分かってる程度で実行したことないんで…例えば10×10×10の立体的な碁盤を用意したりしたらそれはそれで全て管理したら処理が重そうだし
とりあえず教えていただいた関数使ってみます!ありがとうございます
2023/11/26(日) 21:12:43.41ID:sKe5WX7u
>>284
スクリプトだよそれくらい調べろや
シーンにいるobject一覧なんかすぐ取れるから


>>287
今ならミニデスクトップあるから
モニターにぶら下げられるよ
でもマック使いならマックブックでええやん

>>289
パフォーマンス低下?
どれほど低下するのか知らん奴らが、その言葉で騒いでるだけやね
2023/11/26(日) 21:14:07.82ID:sKe5WX7u
>>290
10×10×10

それぐらいで遅くなるほど今のパソコン舐めるなよ
2023/11/26(日) 21:25:02.28ID:vo5TLBjQ
>>291-292
なんだその回答は!?低クオリティすぎんだろ!?死ねよ!m9⎛´・ω・`⎞;y=ー(゚д゚)・・∵. ドーン!
294名前は開発中のものです。
垢版 |
2023/11/26(日) 21:27:08.12ID:wJ4Ewbd+
>>292
舐めてました?すいません。笑
まぁ軽く出来るならやっとこうぐらいの精神ですかね。出来ないなら出来ないってきっぱり分かっときたかったんですよね。自分で調べる分だと悪魔の証明になっちゃいそうだったんで
プレイヤーが1,0,1にいるなら正面の1,0,2のオブジェクトは何か?ってのをやりたかった。でもまぁ後は自分で試行します。
295名前は開発中のものです。
垢版 |
2023/11/26(日) 22:08:54.91ID:kOB5vzh5
>>287
ディスプレイなんて何でもいいけど小さいと使いにくいだけ
2023/11/26(日) 22:24:40.93ID:uqB1fo0P
そういうのはアルゴリズム組んだほうがええんちゃうか
物理空間上でうにゃうにゃするとUnityの癖に悩まされたりバグの温床になったりする
2023/11/26(日) 22:25:46.37ID:sKe5WX7u
ドーンおじの正体はこれな

141 ドーンおじ sage 2023/10/08(日) 09:20:11.70 ID:FDh2RFJV
あーうぜぇ!製品レベルのもん見せたらサークルがバレんだろ!
このエロゲの作者は5chで初心者虐めてる嫌な奴って噂になったら売れなくなるだろ!m9?´・ω・`?ドーン!
2023/11/26(日) 23:05:24.43ID:vo5TLBjQ
>>297
やっぱりお前が低クオリティ野郎じゃねーか!コテ外すなや!m9⎛´・ω・`⎞ドーン!
299名前は開発中のものです。
垢版 |
2023/11/27(月) 02:36:36.68ID:BoRbbeFq
ID:sKe5WX7u
あれだけ宗派云々で盛り上がった後なのに
世界には俺以外の宗派は存在しないし認めないと思ってるアホやね
300名前は開発中のものです。
垢版 |
2023/11/27(月) 09:04:30.48ID:jh8FMahn
ドーンおじとやらもきっと、最初は真面目に質問に答えてたけど、292みたいなのがいるからマジレスするのがアホらしくなって荒らしに転向したんだろうなあ
そう考えるとなんか可哀想
2023/11/27(月) 11:41:20.00ID:wHJ3vaA9
URPで2Dのレンダラーを使用中に3Dのライトを表示する方法、
もしくは複数のレンダラーを同事に使用する方法はありますか?
2D Lightと普通のライトを合成して使いたいです
2023/11/27(月) 11:56:05.86ID:aMnFU6g7
>>294
指定座標からraycast出してhitしたオブジェクトをGetComponentしたらいいよ
303名前は開発中のものです。
垢版 |
2023/11/27(月) 12:09:35.21ID:noS+cgi4
こんにちは質問です。
プレハブにアニメーションをつけて、いくつかの状態を切り替えて使おうとしました。
たとえばトイレ便器のフタがしまった状態から、フタが開くアニメ、フタ開いた状態、便座も開いた状態、というようにキーフレームが作ってあります
で、再生時の初期状態として欲しい状態が60フレームにあるとして
ロード後に自動で60フレームにするにはどうしたらよいでしょうか
かってに全フレーム再生してラストで止まるか、何も再生されず1フレームのままか、の2パターンはやれるのですが。
2023/11/27(月) 12:26:46.66ID:aMnFU6g7
>>303
Startに
Animator animator;
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
animator.Play(stateInfo.fullPathHash, 0, 1);
1のところが0~1でどこらへんから再生させるか調整するって感じです?
60フレーム目とかで判別できないので
小数点いれて調整してみてねってことで
2023/11/27(月) 12:29:51.25ID:KkPr08oo
次の質問する前に回答してくれてる人には最低限のマナーとして返信はしましょう
306名前は開発中のものです。
垢版 |
2023/11/27(月) 12:42:50.33ID:jh8FMahn
>>303
https://qiita.com/ntkgcj/items/29cc215f248a5f4721cd
AnimationClipの最初から再生するのはこれでできるとして、この第3引数で再生位置を指定できる
再生中のAnimationClipが変数clipで、0.5秒の位置から再生したければ第3引数は 0.5f / clip.length
307名前は開発中のものです。
垢版 |
2023/11/27(月) 13:24:07.06ID:noS+cgi4
>>304-306

うーん、実は外部スクリプトはassset書き出しのときに排除されてしまうんです
セキュリテの都合ですね
後出しでこんな言ってすみません
インスペクターでの設定は動作します
2023/11/27(月) 13:43:13.65ID:FJPYb+2K
>>252
いいねこのバイブル
今まで疑問だったことがいろいろ解消したり、知らなかったこともたくさんあって勉強になったわ
貼ってくれてありがとう
309名前は開発中のものです。
垢版 |
2023/11/27(月) 14:01:23.70ID:/j0+2mxV
>>303
そういう時はそれぞれ別のアニメーションクリップで作るのがunityの作法だよ
310名前は開発中のものです。
垢版 |
2023/11/27(月) 16:23:02.57ID:HmVHwFbH
すみません、駄目元でお尋ねします。
Random.Range( 最小値, 最大値 )の乱数関数なんですが

例えば、「0〜10までのどれかが出るが、0は出にくい」
って感じの設定はできませんか?
もし出来るなら大変ありがたいんですが
んな都合の良い乱数まではできませんよね?
311名前は開発中のものです。
垢版 |
2023/11/27(月) 16:29:23.99ID:vSro46YA
 Random.Range(0, 100)
なら出る数字は0〜99のどれか(100は含まれない)で、0が出る確率は1%になるけど、これの応用だと無理?
312名前は開発中のものです。
垢版 |
2023/11/27(月) 16:32:22.43ID:vSro46YA
if (rand == 0)
{
 // 1%の確率で発生する処理
}
else if (10 <= rand && rand < 20)
{
 // 10%の確率で発生する処理
}
else if (20 <= rand && rand < 30)
{
 // 10%の確率で発生する処理
}
……(以下略)

馬鹿正直に書くとこうなる
もっとスマートにできそうだね
313名前は開発中のものです。
垢版 |
2023/11/27(月) 16:37:07.06ID:/j0+2mxV
>>310
返すのがintならできる

if(Randam.Range(0.0f,1f)>0を出したい確率){
Return Randam.Range(1,11);
}else{
Return 0;
}

実際にゲームを作るとfloat返しでやりたくなるはずだと思うんだけど
それはややこしいな
314名前は開発中のものです。
垢版 |
2023/11/27(月) 16:53:02.98ID:noS+cgi4
>>309
わかりましたプレハブを小分けにしてやってみますありがとうございます
315名前は開発中のものです。
垢版 |
2023/11/27(月) 17:16:14.23ID:/j0+2mxV
>>314
プレハブ?
アニメーションクリップファイルはアニメーションクリップファイルだが
316名前は開発中のものです。
垢版 |
2023/11/27(月) 17:22:55.31ID:HmVHwFbH
>>311,312,313

皆さま、ありがとうございます。確かにそれらの工夫次第で
0だけの確率を下げることを知りました、勉強になります!
317名前は開発中のものです。
垢版 |
2023/11/27(月) 18:39:13.12ID:noS+cgi4
>>315
うーむ、ロード時にどのanimが再生されるかの、あの線で繋ぐUIのやつ、あれってどこに保存されてるんですかね?シーンファイル?
318名前は開発中のものです。
垢版 |
2023/11/27(月) 19:18:54.48ID:BkO9IT7E
>>302,296
回答ありがとうございます。アルゴリズム組むのも都合が悪そうなので結果レイキャストで処理しました。
319名前は開発中のものです。
垢版 |
2023/11/27(月) 19:50:17.45ID:/j0+2mxV
>>317
それはアニメーションコントローラーファイル
320名前は開発中のものです。
垢版 |
2023/11/28(火) 00:31:52.76ID:hSn23D6b
>>319
なんとか計画通りに作れました皆さんありがとうございます
321名前は開発中のものです。
垢版 |
2023/11/28(火) 21:44:10.27ID:+pwcdcfH
プログラマーとアーティストのための新しいUIツールキットのデモ | Unityブログ
https://blog.unity.com/engine-platform/new-ui-toolkit-demos-for-programmers-artists
322名前は開発中のものです。
垢版 |
2023/11/29(水) 09:07:08.53ID:8Z5oyTA+
すみません、rigidbody 2dについて教えて欲しいのですが
例えば、ファミコンのスーパーマリオやロックマンで
崖ギリギリでも1ドットさえ乗っていれば
プレイヤーは立ったりすることできるんですが
現状、半分くらい崖から身を乗り出すとプレイヤーが傾いて
落ちてしまいます。
rigidbody 2dの設定で済む話なのかわかりませんが
どこかのチェックや数値の問題なのでしょうか?

あと、その落ちる時にもドット絵のオブジェクトが物理法則に則って
前のめりに回転して落ちるんですが角度がついたときに
ご丁寧に斜め状態のドット絵を強制的に作ってしまうんですが
これもSprite Rendererとかのどこかのチェックの有無で解決しそうですが
違いますか?
323名前は開発中のものです。
垢版 |
2023/11/29(水) 09:14:12.75ID:oA7FsBQ7
>>322
https://futabazemi.net/unity/constraints-freeze-rotation

これ3Dの記事だけど2Dでも大体同じだから
324名前は開発中のものです。
垢版 |
2023/11/29(水) 09:33:25.13ID:8Z5oyTA+
>>323
ありがとうございます!Unity、すごいですね!
知識をつけてってるんですが楽しいです!
325名前は開発中のものです。
垢版 |
2023/11/30(木) 00:19:57.27ID:toSL22aW
Yokohara_h(@Hirokazu Yokohara)さんがポストしました:
え?Unityが以前買収したweta全員解雇するの?出すって言ってたツールは?同じく買収されてるZivaとかspeedtreeはどうなるんだろ?
https://x.com/yokohara_h/status/1729663063568036108?s=51&t=v_xy-gl7y1zQf182MLmXWg
うっわ...Unity完全にオワタやんこれ
wetaは虎の子やったんちゃうんかwあんだけ喧伝しといてもうゲームエンジンはUE一強やんけこれじゃ
326名前は開発中のものです。
垢版 |
2023/11/30(木) 00:22:03.65ID:toSL22aW
Weta Digital閉鎖とか冗談にもなってないわ
327名前は開発中のものです。
垢版 |
2023/11/30(木) 00:25:28.15ID:toSL22aW
更にまだ色々と削減するつもりみたいやな
2023/11/30(木) 10:50:42.51ID:CMyAP9YG
質問です。2Dゲーム制作においてですが
オブジェクト自体の当たり判定とは別にトリガー用の判定エリアも設けたい場合
ひとつのオブジェクトにBox Collider 2Dを2個つけるということをしている人がいます。
これはなんら普通のことでしょうか?それともあまりお勧めできることではない感じですか?
2023/11/30(木) 11:13:55.62ID:VyxU6IGx
複数コライダーは索敵の基本だよ!敵が近くに居たら撃つ!弾が近くにきたら避ける!そのためのコライダーだね!m9⎛´・ω・`⎞ドーン!
2023/11/30(木) 11:22:10.62ID:2rFXTlkJ
>>328
普通によく使うかな
CompositeCollider2Dという専用機能もあるくらい
MeshColliderよりもこっちの方が捗ることも多い
331名前は開発中のものです。
垢版 |
2023/11/30(木) 11:29:53.09ID:CMyAP9YG
>>329 >>328
そうなんですか、2つどころか複数つけても問題ないのですね
わかりました。遠慮なくつけようと思います。

ちなみに、今、Box Collider 2Dを2個つけてみたんですが
両方ともBox Collider 2Dという名前のままなんで
区別がついてないですよね?
名前の変更もできない感じですが
これ、スクリプトの方で
bc = GetComponent<BoxCollider2D>();とかする場合に
<BoxCollider2D>ではどう区別して指定するのですか?
332名前は開発中のものです。
垢版 |
2023/11/30(木) 11:39:41.86ID:CMyAP9YG
え?あれ?
自分今勘違いしているかもです。
これは、追加するBoxCollider2Dにはそれ用のオブジェクトを作って
そこに貼り付けたスプライトで管理するのか?
それなら確かに、BoxCollider2Dは区別しなくてもいいわけですが。。。

ひとつのオブジェクトのスプライトの中で2つのBoxCollider2Dを管理できると思ってるんですが。。。
333名前は開発中のものです。
垢版 |
2023/11/30(木) 11:44:29.52ID:CMyAP9YG
つまり、ひとつのオブジェクトに
当たり判定とトリガー判定のためのBoxCollider2Dが必要だと思ったら
そのオブジェクトでは当たり判定のBoxCollider2Dをつけて、
もうひとつはトリガー用のBoxCollider2Dを貼り付けたオブジェクトを別につくって
そのふたつのオブジェクトをいちいち合わせて考えるってことですかね?
自分のイメージだとぜんぜん違うんですが。効率悪そう。。。

普通に、ひとつのオブジェクトに2つBoxCollider2Dをくっつけて
スプライトの中で、それぞれのBoxCollider2Dから反応の関数をもらえると思ってました。
334名前は開発中のものです。
垢版 |
2023/11/30(木) 11:53:58.64ID:CMyAP9YG
あー、ついに来たか。
親オブジェクト、子オブジェクトとか、それかー。それ使うんですね。
鬼門じゃないんですか、これは。理解できるかなー。
335名前は開発中のものです。
垢版 |
2023/11/30(木) 12:01:32.79ID:CMyAP9YG
ゲームオブジェクトには複数のコライダーを配置できますが、
その場合、個別にどのコライダーがヒットしたかを検出することができません
しかし、解決策はあります
ゲームオブジェクトの子オブジェクトを作成してそこに各コライダーをアタッチすること、
コライダーがアタッチされているゲームオブジェクトにさらに検出用のスクリプトをアタッチすることで実現することができます


これですよね?

コレダーに名前つけてそれぞれを区別したらいいだけだと思うんですけど
Unityはそれを採用してないってことですよね
2023/11/30(木) 12:32:21.42ID:kx/hSsho
>>335
unityのバージョンが新しいとlayeroverrideという機能ついてるから
複数つけてそれぞれに
除外レイヤーと有効レイヤー設定できるので
それでどれにあたるか変えればいけるよ。
337名前は開発中のものです。
垢版 |
2023/11/30(木) 12:54:18.87ID:CMyAP9YG
>>336
>Unity2022.2からCollision Layer Overrideという
>オブジェクトごとに特定のレイヤーと衝突するかの設定が出来る機能が追加

うおおおおおおおおおおおおおおおお!!
自分osの問題で2021なんです、、、泣きます!!!!!
338低クオリティでごめんねごめんね
垢版 |
2023/11/30(木) 13:10:24.45ID:Iy36Ltve
これでどのコライダーがぶつかったかはとれるよ
https://i.gyazo.com/4ea1df0c0dda8be8b040fa3ce288babc.png

例えばこの時
https://i.gyazo.com/cc78c5164b830dbe38390a69645837b2.png
これは3が返る

この時
https://i.gyazo.com/01bfc6172a9fc81147bd5342ef72b4bd.png
これは2が返る

動きはこんな感じ
https://i.gyazo.com/879e10b2ce566bb4a25e9fac83cb91bf.mp4

入れ替えて見ると
ちゃんとぶつかりも反応してる
339低クオリティでごめんねごめんね
垢版 |
2023/11/30(木) 13:14:39.04ID:Iy36Ltve
入替えた場合
https://i.gyazo.com/2a510821978a271e2ccea1dc3d1db514.png
https://i.gyazo.com/35b1c1ee66d4cef385f1ef15b5a48b7a.png
340名前は開発中のものです。
垢版 |
2023/11/30(木) 13:42:59.93ID:CMyAP9YG
>>338
ありがとうございます。
複数のコライダーを順番に配列にいれといて管理するんですね?
foreachで回してカウントしてトリガーを返してきたカウントからどのコライダーか判別すると。

これ、配列に入るコライダーの順番は、インスペクタの並び順ですか?
つまり、例えば、一部のコライダーのインスペクタを触りたいときは
c2ds[1].isTrigger = true;とかでいけますよね?
341名前は開発中のものです。
垢版 |
2023/11/30(木) 13:56:27.19ID:CMyAP9YG
というのも、自分の作ってるゲームでは
オブジェクトのBoxCollider2DのisTriggerのon,off
ちょくちょく切り替えるようにしてるんで
>>338さんのを導入するとしたら
今のBoxCollider2Dを配列入れ込む話になるんで
ちょっとどうなるんだろう、って。
今はBoxCollider2Dひとつだけなんで、BoxCollider2D bc;で
void Start()内でbc = GetComponent<BoxCollider2D>();やってるんですよ。
それを変えるわけですよね
2023/11/30(木) 14:12:00.62ID:n4imjDK6
インスペクタで触る?
コードでやるならenableでいけるでしょ
343名前は開発中のものです。
垢版 |
2023/11/30(木) 14:34:34.68ID:CMyAP9YG
enableてオブジェクトのアクティブ、非アクティブ化にだけ使用してるみたいです。
例えば「Unity isTrigger 切り替え enable」でぐぐってみましたが
enableでBoxColliderのisTriggerを切り替えてるケースが見当たらず
みんな、だいたいGetComponent<Collider>().isTrigger = false;的なことやってるみたいです。
344名前は開発中のものです。
垢版 |
2023/11/30(木) 14:40:55.06ID:CMyAP9YG
自分で調べた感じですがenableはGetComponent<Renderer>().enabled = false;とか見るに
コンポーネントまるごとチェックをはずしたり、したい場合に使うんじゃないでしょうか
BoxCollider2Dのアクティブのチェックを外したい場合とか。

自分はBoxCollider2Dの、isTriggerのチェックを外したいとかなんで
enableは使わない感じじゃないでしょうか
345名前は開発中のものです。
垢版 |
2023/11/30(木) 14:48:45.12ID:CMyAP9YG
あと、>>338のコードを読み解こうと頑張っているんですが
ContactFilter2Dってどんなものなのか、どなたか教えて頂けないでしょうか。

なにが返ってくるのか検索してもぜんぜん解説が無いのです
利用しているコードはあるんですが、どういうものなのかの説明がされてなくて
リファレンスも英語のものだけ?しか見当たらず、ちょっとなんなのかわからず
検索結果からしても、これマニアックなんですかね、使うの。
346低クオリティでごめんねごめんね
垢版 |
2023/11/30(木) 14:52:15.27ID:Iy36Ltve
簡単なのなので、自分でテストするだけ
https://i.gyazo.com/5d5f60e3f6147f4530d4d4f9365175b5.png

c2ds[2].isTrigger = false;
c2ds[2].enabled = false;

片方をコメントアウトしてどちらが機能するかみればいいだけだよ
10秒あればできるから、わざわざぐぐるとか無駄じゃね?
2023/11/30(木) 14:54:45.69ID:n4imjDK6
>>345
マニアックというか英語で使い方分からないから広まってないだけだよね
んでとにかく出来るやり方が広く広まってそれを真似て、、

自分で確認しない風潮だよね
348低クオリティでごめんねごめんね
垢版 |
2023/11/30(木) 14:57:08.73ID:Iy36Ltve
>自分はBoxCollider2Dの、isTriggerのチェックを外したい

という事は、ぶつかりは取りたいという事?
であればenableは不要になるけど
isTriggerのチェックを外すことがどういうことなのか分からんので、なんとも・・・
2023/11/30(木) 15:17:19.00ID:n4imjDK6
元々、どのコライダーが当たったのか?
が欲しかったんだよね?

なら読み解くとかいらんことしないで使えばいいんじゃね?
その内わかるようになるでしょ
350名前は開発中のものです。
垢版 |
2023/11/30(木) 18:16:16.06ID:CMyAP9YG
>>349
>元々、どのコライダーが当たったのか?
>が欲しかったんだよね?
>なら読み解くとかいらんことしないで使えばいいんじゃね?

そうです。しかし、読み解けない状態、つまりはブラックボックス状態だと
うまく機能しない場合自分でどういう状況かわからないので、使わせて頂いても危険なんですよね。

例えば、現在記載してもらった>>338のコードを導入して
動いているですが、思った結果を吐いてくれてなくて、
「これは、なぜだ?」状態で悩ませています。
なるべく検索して調べているんですが、やはり解説がないので。

>>338のOnTriggerEnter2Dですが、
どのBoxCollider2Dのtriggerに触れたかわかるってことですよね?
例えば、print(_count );で毎回「1」と「2」が必ず同時にコンソールに表示されます。
でも、BoxCollider2Dの2個目のtriggerにしかチェック入れてないんですよ。
自分のイメージでは、コンソールには「2」だけが表示されなきゃならないイメージなんですが
毎回「1」と「2」が必ず同時にコンソールに表示されます。
なぜ?ってなってます。
351名前は開発中のものです。
垢版 |
2023/11/30(木) 18:31:12.78ID:CMyAP9YG
_countは、どのBoxCollider2Dかを教えてくれる役割ですよね?

if(_bc1.IsTouching(_bc2)){
print(_count );
}

print();をココだけに記述している状態。
で、地面のオブジェクトにはふたつのBoxCollider2Dのつけており
上部のBoxCollider2Dはtriggerにチェックを入れていて通り抜ける。
下部のBoxCollider2Dは当たり判定有りなので、プレイヤーは上から落ちてきたら
まず上部のBoxCollider2Dを通過します。
自分のイメージでは、print();は上部のBoxCollider2Dに接触した時だけ
コンソールに表示されるべきなんですが、その時の_countの値で
どちらのBoxCollider2Dか判別できるんですよね?
ですが、現状、地面に降り立った時には
print();が2度表示されます。1、2と。
2023/11/30(木) 18:38:03.93ID:n4imjDK6
相手もいずトリガー状態やろ
2023/11/30(木) 18:39:20.39ID:n4imjDK6
せめて画面のSSとか出そうよ
相手に伝えたいならさ
2023/11/30(木) 18:44:33.81ID:n4imjDK6
でもまぁそのコードならぶつかった相手のいずトリガーが付いてるか否かで判定できそーだけど
今風呂だし此の後酒飲むから検証はできん

あとコライダーのoffsetトル手もあるよ
まどんなプロパティあるか見て、何があなたのゲームに使えるか取捨選択すりゃいい
2023/11/30(木) 18:50:48.84ID:kx/hSsho
なんだか、ややこしくなってるので
やりたいこと書いたほうがいいかもせれませんね。
自分ならBoxcastとかunity platform effector 2dとか使いますかねえ。
356名前は開発中のものです。
垢版 |
2023/11/30(木) 20:00:59.02ID:gX6pmMx6
作ってる画面とどうしたいか出すだけで、すぐ解決する問題だろうね。
357名前は開発中のものです。
垢版 |
2023/11/30(木) 20:06:03.76ID:CMyAP9YG
>>352
>相手もいずトリガー状態やろ
いいえ、違います。
そんな見落としは致しません。。。

>あとコライダーのoffsetトル手もあるよ
Offsetから判断させるってことですね?
最悪その方法ですよね。。

>>355
>やりたいこと書いたほうがいいかもせれませんね。

やりたいこと自体は2Dアクションではよくあることで、、、
地面のオブジェクトが並んでて、プレイヤーが一部の地面の上を歩くと
アイテムが下からせり出してくるって、だけです。。。
そのせり出してくるトリガーとして、地面のオブジェクトには
プレイヤーとの当たり判定とは別にBoxCollider2Dで見えない判定枠を作りたいのです。
それがイズトリガーにチェックしているすり抜ける当たり判定です。
2023/11/30(木) 20:13:38.87ID:n4imjDK6
それ地面にスイッチ置くだけやない?
2023/11/30(木) 20:18:10.12ID:kx/hSsho
>>357
地面のオブジェクトとは別に透明な当たり判定つけて踏んだらInstatiateもしくはsetactiveでインスペクターから紐づけるのはダメです?
360名前は開発中のものです。
垢版 |
2023/11/30(木) 20:25:34.02ID:CMyAP9YG
>>358
そうです。そのスイッチとして地面の当たり判定とは別に
もう一個BoxCollider2Dをつけようかと。
地面のオブジェクトにこのスイッチをつけとくのは大前提です。

>>359
>地面のオブジェクトとは別に透明な当たり判定つけて
はい。当初は調べる中で、
別の透明な当たり判定を作って子オブジェクトにして
くっつけるつもりでしたが
>>338さんが、そんことせんでもこれでいける、と
案を出してくださったんで、>>338でいこうとしているところです。
で、詰まったと。が、自分にとってはブラックボックスなので
対処ができずにいる、と。

素直に、別オブジェクトを作ってくっつけるほうがいいのですかね。
2023/11/30(木) 20:28:56.84ID:kx/hSsho
>>360
自分ならそれでプレハブ作っちゃうと
置いて出したいアイテム選ぶだけで
使い回しがきくので普通にInststiateさせるほうほオススメします
362名前は開発中のものです。
垢版 |
2023/11/30(木) 20:45:29.48ID:CMyAP9YG
>>361
そうですよね。素直にそうします。
>>338さんのコード、なんか画期的っぽくて
解読したかったのですが。
363名前は開発中のものです。
垢版 |
2023/11/30(木) 20:47:02.50ID:gX6pmMx6
例のプログラムを解析する気ならそれをしてから。
やりたい事進めたいなら解析などせずオブジェクト追加で。
指南はすでに示されてるのでお好きな方で。
364名前は開発中のものです。
垢版 |
2023/12/01(金) 00:20:46.54ID:gKngTs7T
すみません!
ゲーム中に発生するプレハブ化オブジェクトに子オブジェクトをつけたい場合
なにか普段の流れと違うことをしてないとダメですか?
生成させるときのコードが違うとか。
というのも、なんかヒエラルキーのとこでプレハブのオブジェクトに子オブジェクトくっつけといても
ゲーム中に発生するそのプレハブのオブジェクトには子オブジェクトがついてくれてないんです。
365名前は開発中のものです。
垢版 |
2023/12/01(金) 00:26:48.46ID:gKngTs7T
ちなみにその子オブジェクトもプレハブ化してます。
癖でプレハブ化しましたが、もしかしてプレハブ化してる親オブジェクトに
つけたい子オブジェクトはプレハブ化しないほうがいい感じですか?
366名前は開発中のものです。
垢版 |
2023/12/01(金) 00:42:50.51ID:gKngTs7T
んー、オブジェクトのプレハブ化を最初からやり直し、
その時に子オブジェクト(プレハブ化していない)をつけてから
プレハブ化したら、そのオブジェクトを複製しても子オブジェクトがついている。。。
これで正解なのですか?

ややこしすぎ、、、
367名前は開発中のものです。
垢版 |
2023/12/01(金) 00:59:31.92ID:gKngTs7T
いや、やっぱり再生してからの
親オブジェクト生成後には子オブジェクトはくっついてないです。
scene上でオブジェクトに子オブジェクトつけてても意味ないってことですか?
2023/12/01(金) 02:50:27.01ID:602WDQfP
>>367
出したオブジェクトを親オブジェクトにsetparentしてあげるだけだと思うけど
2023/12/01(金) 02:55:16.30ID:602WDQfP
var obj=Instantiate(出したいゲームオブジェクト);
obj.transform.SetParent(親にしたいオブジェクト);
370名前は開発中のものです。
垢版 |
2023/12/01(金) 03:06:43.96ID:gKngTs7T
>>369
親オブジェクトのスクリプトの中でそれ書いちゃダメですか?
自分のイメージでは各親オブジェクトが生まれた時に
各オブジェクトが子オブジェクトを生成して自分の子オブジェクトにする、
みたいなのが理想なんですが。。。

それともゲームマネージャーの中で親オブジェクトを生成するとして
同時にそこに書くもんなんですか?
371名前は開発中のものです。
垢版 |
2023/12/01(金) 03:19:23.71ID:gKngTs7T
ていうか、そもそも
子オブジェクトつきの親オブジェクトをプレハブ化した場合
そのプレハブを生成するときは毎度一緒に子プレハブが生成されてもいいと思いませんか
意味がわからない。。
2023/12/01(金) 03:19:52.70ID:602WDQfP
>>370
なら生成されたオブジェクトにStartでそれを記述すればいいのでは
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。