質問: 作りたい2Dゲームがあり、ただ作っただけだと味気ないと思ったので、演出を入れたいと思ったわけですが、 particleを使ったところシーン上には存在するものの表示されない謎現象が起きました。 そこで、考え方を変えて3Dゲームに2Dオブジェクトを配置する方法を試みましたが そもそもスプライトが配置できませんでした。想定はしてましたけど...。 何かいい方法はありませんでしょうか? 2018/11/1 23:18 追記 あれからいろいろいじっているうちに、 原因は`sakura_hana`さんの言う通り **「配置されているが見えていない」** ことがわかりました。 しかし解決したわけではありません。 実はUIに子オブジェクトとしてParticle Systemをつけていたのですが、 UIはCanvasの影響を受けますが、 Particle Systemはこれを受けないためゲームシーンに映らなかった ...という超当たり前の理由でした~!!超にわかでしたすみませんでした~!が 質問は続けさせていただきます。 問題はその解決方法なんですね 原因が分かった後、試しにCanvasのスケールいじって ゲームの画面に合わせることをしました。 なんと変化しない!!つまり、いじれなかったんです(いじってもリターンキー押すと既定値に戻る) するとやはりスクリプトでポジション指定するしかないのか?! つまり子オブジェクトとすることはやはり諦めなければならないのか!! どうですか? --- あと、3Dゲームに2Dオブジェクト配置はどうしてもできません。 こちらもいろいろ試していて、まあ最初は普通にimport new Assetでダウンロード。 もちろんそれで失敗して困ってるんですがね 次はPCのファイルいじるところでコピペした。 結果同じ ここまでだめなので、だめもとででしたが Resources.Loadでダウンロードして SpriteRendererコンポーネントつけただけのゲームオブジェクトに Sprite変更させるように書きましたがエラーも出ずに変化一つ見せなかった ...エラーは出てもいいんじゃないですかね~??なにが悪かったのか分からない。 すると今度は一度2Dゲームを作成して、スプライト付きのゲームオブジェクトを作成し そしてシーンを保存してから そのシーンをPCのファイルいじるところで3Dゲームにコピペです。 その後3Dゲームを開くとSpriteRenderer.spriteはMissing!と表示されていて ヒエラルキーにコピーできません (2018/12月 追記) [ 2Dゲームからスプライトをアセット ↓ そのスプライトをエクスプローラーなどでMETAファイルと一緒にコピー ↓ 3Dゲームにペースト で出来ました。なにも、シーンごとコピペするのはばかでした。 ] 自分にはこれが限界です ちなみにjpg,png,gifを試して共にこうなりました unityのバージョンは 2018.2.1.f1でした
回答: uGUIの子にパーティクルを配置しても位置は正しく設置されます。 その上で、以下の点に注意すると表示されると思います。 * CanvasのRender Modeを`Screen Space - Camera`か`World Space`にする * パーティクルの発射方向を画面手前方向にする(初期状態だと画面奥に発射されると思うんで、例えばRotationのYを180にする) * その他の設定の参考→【Unity5】uGUIの手前にパーティクル(Particle System)を表示する方法 - Qiita 実はUnityで3Dゲームと2Dゲームの違いってプロジェクト視点で言えば**無い**です。 新規プロジェクト作る時に選択項目がありますが、あれは初期設定(ライティングとかカメラとか)が切り替わるだけで、後から自由に変更可能です。 原理としては「3D空間上に2D用コンポーネント(SprieRendererとかRigidbody2Dとか)を置いて作る」ので3Dの場合と大差ありません。 (ちなみにSceneビュー左上の「2D」ってボタンをオフにすると、uGUI等も3D視点で見られます。上記のパーティクル設定時に試すとやりやすいかも) それはそれとして、Unityの外(例えばエクスプローラー)でファイルをコピペしたり削除するのは基本的にはご法度です。(理解した上でやるならOK) Unityは内部でアセットとアセットの繋がりを記憶していますが、下手にコピペしただけだとこいつは移行されません。「このSpriteRendererにはこのSpriteが入っているよ」というデータが欠落するのでMissing!になります。 なので今回の場合、 `プロジェクト開く→Projectパネルに使いたい画像をインポート→シーン上にSpriteRenederer付きのオブジェクト作成→SpriteRenedererのSpriteにインポートした画像をセット→オブジェクトの位置調整` だけで表示可能なはずです。 ちなみに「Resources.LoadでダウンロードしてSprite変更させるように書いたが変化が無かった(エラーも無い)」というのは、そのスクリプトをどこにも付与していないか、その部分が呼び出されていない可能性が濃厚です。 こいつはスクリプト見れば分かるかもしれないので、気になるならソースコードを記入した上で別の質問として投稿してください(今回の本題から逸れるので)。