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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

Q&A

解決済

2回答

6911閲覧

【Unity】キャラの成長とともに見た目が変わるゲーム

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

0グッド

2クリップ

投稿2018/03/19 23:51

Unityを使ってゲームを作ろうと思っています。
最終的にはAndroid,iPhoneのゲームアプリにする予定です。
キャラの成長と共に見た目が変わるもので、
マップ自体も変更を加えようと思っています。

とりあえず試作段階のため、キャラの見た目変更から行おうと思っています。
・個数が増える
・細長くなる(シェイプで変更予定)
・色を変更する
・全然違うもの(三角形)などに変化

上記のような作業を考えています。
この場合、全然違う見た目になってしまう場合は
別で3Dモデルを作ったほうが良いのでしょうか?

最終的には、100体の3種類の成長を考えてます。(300モデル必要?)
その上で気になっていることが2点あります。

・Instantiate、Destroyを繰り返すことで重くならないか
(何か対処法はありますか?)
・3Dモデルを300体用意することで重くならないか

3Dモデルを作る場合は
色の数を減らす、ポリゴン数を減らすことを念頭に置いて作ろうとおもっています。

質問が分かりにくくなったのでまとめると
・違う見た目のキャラになる場合は別の3Dモデルを作るしか方法は無いか
・Instantiate、Destroyを繰り返すことで重くならないか
・3Dモデルを300体用意することで重くならないか

Unityのバージョンは5.6.5を利用しようと思っています。
以上、よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

モデルやオブジェクト(見た目)の話として説明します。

■「細長くなる」「色を変更」
これはScaleやRenderの色変更で対応出来るので複数作る必要はありません。

■「個数が増える」
何の個数が増えるのか分かりませんが、ディグダがダグトリオになるようなイメージであれば(=そのオブジェクトが全てほぼ一緒であれば)、親オブジェクト以下に同じモデルを複数追加するだけでいいのではないかと思います。

■「全然違うものに変化」
これは普通は別モデルにします。
が、シルエット(ボーン)が近くてパーツだけが増えるような場合は「オブジェクトのオンオフ」で対応出来るケースもあります。
例)進化前:人間→進化後:天使(ボディ部分は同一で翼が生えるだけ)
この場合、進化前は翼ボーンと関連メッシュをオフにしておくことでモデル1つで済みます。

また、「メッシュが同じだがテクスチャが違う」場合は、テクスチャと(マテリアル)だけ複数作って差し替えれば、モデル1つで複数キャラが出来ます。
(形状は同じだが、表情や模様の違う「属性違い」のモンスターとか。上記のオブジェクトオンオフと組み合わせれば更にバリエーション増)

ちなみに、外見が違ってもボーンの名前が同一で、配置がほぼ同一であれば、別モデルでも同じモーションを使い回せます。
もしモーション制作も行うなら覚えておくと作業が減るかと思います。


■Instantiate、Destroyを繰り返すことで重くならないか
頻発すると重くなります。シューティングの弾なんかでは「オブジェクトプール」が使われます。
が、キャラ成長で進化する程度なら大したことは無いのではと思います。
(ゲームの仕様によるので実装してみて動作確認するのが確実です)

■3Dモデルを300体用意することで重くならないか
モデル数が多い程、当然ながらアプリの全体サイズは上がります。
この場合「アセットバンドル」などを使って、アプリ起動後に必要に応じてロードするといいです。

また、一度に大量のモデルを画面に表示するのも重くなる原因です。
(どれぐらい出すと重くなるかはモデルの内容と端末スペックによる)
この辺は色々な技法があるので「Unity 軽量化」「Unity 高速化」などで調べてみてください。

投稿2018/03/20 04:38

sakura_hana

総合スコア11427

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

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

退会済みユーザー

退会済みユーザー

2018/03/20 07:33

回答ありがとうございます! >進化前は翼ボーンと関連メッシュをオフにしておくことでモデル1つで済みます。 >外見が違ってもボーンの名前が同一で、配置がほぼ同一であれば、別モデルでも同じモーションを使い回せます おぉお、ありがとうございます!そうなんですね! 羽が生えるだけでも別々に作らないといけないのかと思ってました。 (メッシュ結合も考えてましたが、良い方法なのかは不明です) 教えて頂いた方法を使えば、100体くらいで済むかもしれません! いや、もっと少なくなるかも… >アセットバンドル サーバー上に置いて、必要なものを取って来る手法ですかね? >この辺は色々な技法があるので「Unity 軽量化」「Unity 高速化」などで調べてみてください。 そうですね!ありがとうございます!! 現状困っている点、疑問点としては解決したのでベストアンサーとさせて頂きます! また何かあればお願いします!
sakura_hana

2018/03/20 08:19

>メッシュ結合 オンオフするのは基本メッシュ単位です。なのでオンオフするパーツとそうでないパーツは分割しておくといいと思います。 (回答の例で言うと、人間部分は全部結合してもいいが、翼部分は分離しておく) >アセットバンドル そうです。 ただ、現在だとiOSで150MB、Androidで100MBを超えないならアプリ内に入れちゃっても問題無いとは思います(Wifi無し、分割ファイル無しで落とせる上限です)。
guest

0

Unityは使ったことないので的外れな回答をする可能性がありますが。

私なら、ポリモーフィズムを利用します。

継承を使って行うものです。

インターフェース

方法1: Charaインターフェースをつくり、これを継承して NezumiChanクラス, ChuchuChanクラス...と定義します。それで最初はNezumiChanクラスから生成し、レベルがLv.10に来たら等でキャラを変更する場合はChuchuChanクラスで生成する。

例:

// C++でもないし、C#でもないかも知れない。 // あくまでイメージ Chara monster1 = new NezumiChan(); ... // レベル上げ等 if( level > 10 ) monster1 = new ChuchuChan();
方法2: 方法1 をクラスにコンポジションする

例:

// 同じく class CharaEx{ private Chara ch_; // コンポジション public CharaEx( chara c ){ ch_ = c; } public bool levelUp(){ ch_ = new ChuchuChan(); } }
方法3: Chara クラスを作り、それを継承して、「最大」のキャラ用クラスを定義し、それを継承して 前のレベルのキャラを...と継承していくごとにレベルを下げていく。( 逆でもいいが。 ) ( この方法は苦肉の策か? 本来の使い方からすれば邪道中の邪道。だって、逆になっているし。 )

例:

// 同じく // NezumiChan -> ChuchuChan -> GiantChuchu へ進化するとする。 // すべてのキャラはこれを継承している class Chara{ // メンバを持っているが省略 } class GiantChuchu : Chara{ // メンバを持っているが... } class ChuchuChan : GiantChuchu{ // メンバを持っているが... } class NezumiChan : ChuchuChan{ // メンバを持っているが... } // ---------- // main関数等のような呼び出し側にて Chara nezumi = new NeznumiChan(); // レベル上限に達した等で進化 nezumi = new ChuchuChan(); // 同じく nezumi = new GiantChuchu();
方法4: 方法3を方法2のようにコンポジションして...

が思いつきました。

これならすべてのキャラを生成しなくても済みますからメモリの使用量も少なく済むはずです。

ただし、メモリリークにはご注意を。

C# ( Unity ) なら GC ( ガーベージコレクタ ) があるはずなので、たぶん勝手にやってくれると思うが。

投稿2018/03/20 03:39

編集2018/03/20 03:54
BeatStar

総合スコア4958

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

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

退会済みユーザー

退会済みユーザー

2018/03/20 07:19

回答ありがとうございます! 実際に動作させる際のプログラムの組み方でしょうか? メモリリーク怖いですね…。 教えていただいたことを参考に頑張ってみます!
BeatStar

2018/03/20 07:33

ロジック部分っていう感じですかね。 こういう風に考えるとメモリが少なく済むし、修正も楽になるっていう。 メモリリークは必ず起こるとは限りませんが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問