質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

1765閲覧

Unity(2D)でマップスクロールを軽くする方法

yrema

総合スコア286

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2018/10/21 04:14

正方形のスプライト(森や平地ブロック)を敷き詰めて広大なマップを作成しています。
全スプライトを表示するとスクロールが重すぎるので、
カメラの中心からある程度の範囲内のみGameObjectをsetActive(true)しています。
しかし、そうすると逆にsetActive(false)にした範囲の正方形がコライダーが使えないので判定処理できない(例えば、敵が岩スプライトの上だと移動不可になるとか)のでどうしたものか困っています。
何かスクロールを軽くする良い方法はないでしょうか?

◆環境
Unity2017 3.1f1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

どれぐらい効果があるか分かりませんが、アイデアだけ。

GameObjectのアクティブではなくコンポーネントを無効化する

コンポーネント.enabled = false;のようにすると、GameObjectはオンでもそのコンポーネントだけオフに出来ます。
オフの時は描画用コンポーネント(SpriteRenderer)なら描画されませんし、
スクリプトは一切のメソッドが呼ばれず「Updateが呼ばれる負荷」も無くなるので効果的かもしれません。

表示範囲を広げる

「表示する・消す」という判定自体が負荷になっている可能性があるので、逆に一度で大きめに表示してしまい、切り替え頻度を下げた方がスムーズになる可能性もあります。
Profilerで調査・検証しつつ最適値を探すといいかと。

Colliderを使わない

マップチップ方式ということは、「左からX番目、下からY番目のブロックは岩」などの地形情報の配列と考えることが出来ます。
つまりわざわざ衝突判定するのではなく、「このキャラは(X,Y)にいる→その座標のブロックはAである」という位置ベースの判定が出来ます。
物理演算は負荷が高いので、このようなシンプルな判定にする&判定頻度を減らす(移動する時のみ実行するとか)にすると負荷軽減出来るかと。

敵を動かさない

そもそも描画外の敵は何もしない、という割り切り。
雑魚敵は固定・特殊な敵だけ動くとかにするだけでも数が多い場合効果的かと。
(まぁゲーム性やスクロール頻度によってはどうしようもないかもしれませんが、動く頻度を減らすとか工夫は出来そう)

投稿2018/10/23 02:06

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yrema

2018/10/23 03:19

ありがとうございます。試してみて効果があればまた回答させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問