FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    カテゴリ: ゲーム

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ゲーム開発は時間がかかります。やみくもに作ってみると、完成しなかったり延期になったりするのが普通です。開発時間の長い規模の大きいものほどそれは起こりやすいです。長い時間を管理するのは難しく、せいぜい把握できるのは数日くらいです。

    ゲームを作るときに数週間先に何の作業をやっていて、どれくらい完成しているかという予想ほど役に立たないものはありません。予定というのは目標であると理解してください。あなたがゲームを作ったことのないスポンサーだったら、「なぜ予定通りに進まないのか」と憤慨することでしょう。それはゲーム開発における予定というのがあやふやなものだからです。
    通常、予定というのはやるべきことが分かっています。 多くの場合、同じ作業の繰り返しです。したがって、1回の作業にかかる時間がわかるにつれてどれくらいの時間がかかるのかがはっきりしてきます。また、過去に行ったことであれば予定が立てやすいでしょう。わかりやすい例で言えば、事務作業です。定型的な作業であり、同じようなことを繰り返すものです。作業同士が関係が希薄になっているというのも重要です。これとこれは順序立ててとかセットであるというように関係があると、制限がつくのでやりにくくなります。
    やるべきことが明確でなく場当たりてきな対処の連続であり、過去の成果に影響され続けるというのがゲーム開発です。このような特性はスケジュールを立てるということに対し無理があります。おおまかな予想と少し先のことをどうするか決めるのが現実的なところでしょう。

    開発の初期はゲームは動きません。困ったことにゲームの一連の流れを確認できるのは始まってからずっと先のことです。こういったものを作りたいという仕様があり、実装できたのが1カ月後ということも普通です。その時に確認してみると、微妙なものになっているということもあります。他の部分の挙動の変更や予定通りにできなくなってしまったことがあったというように原因は様々です。当然これでは無意味な作業だったことになり、作り直しとなります。
    今あるゲームに何をすれば面白くなるのかというのは、ある程度形になってから最後まで悩まされ続けます。この通りに作れば面白くなるということは大抵ないです。最初から言うとおりに面白くはならず、ちょっとずつ加えたりなくしたり変更したりして、徐々に面白くなることが多いです。試行錯誤というのはスケジュールを遅延させます。品質のためには必要だと思いますが、非常に時間がかかることを許容できなければなりません。

    ゲームを作るのが難しく、またそのスケジュールを立てるのが難しいというのも理解できると思います。やるべきことがわかり、それが細分化されていくことでスケジュールは正確になります。細分化は一人で数日以内で終わる量の作業という程度までわけると見積もることができます。実際の作業はイラストを描いたり、BGMを作成したり、プログラムしたりと専門の人が見積もることになります。大きすぎる単位では見積もりができずあてにならないものになります。

    もしチームなど複数の人数で組んでゲームを作るなら、スケジュールの管理をあまり厳しくならないようにした方が良いです。スケジュールの管理を厳しくすることは、単純にやれることを減らしていくことになるだけだからです。
    作業にどれくらいの時間がかかるか聞かれた場合は、自分の見積もりの2倍程度(もっと多くても良い。少ないのはまずいです。)申告するのが良いでしょう。その作業に専念することは稀なので、それくらいはかかるものです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ゲーム会社に就職してゲームを作りたいと思っている人は、ゲームをしたことがある人なら希望することが多いと思います。そんなわけでゲーム会社に応募する人はそれなりに多いです。会社の規模を考えたら倍率が高いことが多く、新卒なら100倍とかもありえるでしょう。

    ゲームを作りたいという人が多い(少なくともゲームが嫌いだと言う人はゲーム会社にいない)ため、仕事がきつい割に待遇が悪いです。この待遇というのも外からわかりづらいというのも問題です。
    内部にいる人に聞く機会があったら、必ず聞いておいた方が良いことを挙げてみます。
    • 給料
    • 残業時間
    • 休日の労働
    • 有給休暇の使用率
    • 職場環境
    とりあえず上記のことは聞いておくべきです。

    基本的にゲームというものはおもしろくさせるためにあるものなので、どう作れば良いという決まった方法がありません。工業製品でもありながら、芸術作品的な性質も持つものです。作ってみておもしろくなければ、やり直しとなります。それを繰り返しやすいので、働く時間は増えていきます。働く時間が増えると、健康に対する悪影響は加速度的に上がりますが、給料は大した割合では増えません。仮に給料が倍になったとしても、残業が100時間を超えるような労働を続けるのは割に合いません。(人によっては死にます。若いころは体力があるから大丈夫と言っていてもダメージは蓄積しています。視力だったり、腰だったり……)
    給料を聞くといっても「年収はいくらですか?」と聞いても気分を悪くさせるだけなので、「成果に見合った報酬を得られていると感じるか」とかでうまく聞きだしましょう。

    休日に働くというのは何の言葉遊びなのだろうかと思います。おかしくなってしまった人は、何連勤なのかを自嘲気味に自慢し始めます。

    日本は有給休暇の消化率が悪いそうですが、ゲーム会社もそうです。取ると他の人に迷惑だとか、作業が滞るだの言って取らない人が存在しますが、そういった人がどれくらいいるのかというのが大事です。そのような人が大勢いると非常に面倒です。有給休暇は働かないで給料がもらえる日です。使わないというのは実質給料が減っているのと同じです。手元に残るお金が減っているのではないため、なくなってもあまり文句を言う人がいないのかもしれません。

    職場環境は外部からは最もわかりづらいことです。具体的な例を質問するとかである程度は把握できるでしょうが、正確なことはわからないです。雰囲気が暗いとかは、現場に行ってみないとわからないことです。

    ゲームが好きだから、ゲーム会社で働くというのは素晴らしいことだと思います。ただ、ゲームが好きでもその会社が好きになれるかは関係ないです。
    知っておいた方が良いのは、労働条件を悪くしても人が多く集まってくる会社は労働条件を悪くすることがほとんどだということです。会社は営利目的なので、人件費を安くするというのが多くの経営者の考えるところだからです。(ごく稀に従業員の待遇を良くすることで生産性を上げるという経営者もいます。口だけの可能性もあるので、数値で見て待遇を良くしているか判断することが大事です。)

    最後に私の経験を元にした主観が入っているので、絶対に正しいとは言いません。異なる意見もあるでしょうし、それが正しいとも思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ゲームは一般的にセーブが存在します。セーブとは何らかの方法でメモリにある情報を保存する仕組みです。
    プログラムはメモリの情報を見て動作するので、通常は前回の実行には全く関係なく実行されます。プログラムの実行を終えたら、メモリの情報は破棄されます。メモリから情報が消されるので、再開とかは不可能なわけです。電源を落としたら最初から遊ぶようなゲームはごく普通のことなのです。

    そうはいっても今のゲームは続きから遊べるようになっています。以前遊んだステージをクリアしていたり、取得したアイテムを持っていたりするのが普通です。これは前回までのことが記憶されているということです。
    メモリに保存ができないなら、どこか別のところに保存すればいいということでセーブというものがあるのです。セーブにメモリのデータをしまっておいて、次のときにセーブからデータを読み込んでメモリ上に復元します。そうすると以前の続きから遊べるようになります。

    セーブの仕組みは端末によります。PCで言えばテキストファイルかバイナリファイルを実行ファイルのあるフォルダに作るとかになります。
    このデータをセーブ(データ)とも呼んだりするので、セーブが機能を表しているのか実体としての保存されているデータ形式を表しているのかを気をつけなくてはいけません。
    セーブデータを作る機能は扱う端末によりわかれます。ファイルの読み書きなどはOSに依存する低レベルの処理なので、かなり面倒なものです。このあたりは取り扱いが非常に面倒でありゲーム内容に依存しにくいことなので、ゲームエンジンには端末ごとの処理を書かずに何らかのAPIを呼び出すだけでセーブができるようになっています。 

    UnityではPlayerPrefsという関数でセーブが作れます。 
    PlayerPrefs.GetIntとPlayerPrefs.SetIntがセットであり、GetIntでセーブからの取得を行いSetIntでセーブへの書き込みを行います。(SetIntは厳密には書き込みではなく、書き込みのときの値を設定しているものです。しかし書き込みと考えていても基本的には問題ありません。)
    PlayerPrefsはキーバリュー型の保存方法であり、簡単に使うことができます。キーは文字列でGetInt、SetIntで同じ文字列を使うことでキーに対応する値(バリュー)を読み書きできます。
    別の値を表すのにも関わらずキーが同じものを用いてしまうと、値が上書きされます。エラーが発生することはないようです。SetFloatやSetStringで同じキーを用いても問題なく動作し、最後に呼ばれたものだけがセーブに残るみたいです。

    PlayerPrefs.SetInt("test", 100);
    PlayerPrefs.SetFloat("test", 0.5f);
    PlayerPrefs.SetString("test", "hello");
    というように同じキーで3回セットを呼んでいますが、3つ目のみがセーブされます。この後にPlayerPrefs.GetInt("test")を呼んでも、デフォルト値の0が返り100が返ることはありません。保存する型が異なってもそれらはキーによってしか区別されないということに注意が要ります。
    PlayerPrefsを使う時に最も重要なのは、意図せずキーを重複させないということにつきます。実はセーブにデータ(キーとバリューのペア)が存在してなかったみたいなことが起きても、PlayerPrefsのGet系の関数はデフォルト値を返すためにバグに気付きづらいのです。デフォルト値をいじれるので、明らかな無効値を返すようにしてしまうとかがバグを防ぐ唯一の方法な気がします。その方法も無効値が存在しないデータだと検出できないです。名前の通りキーの取り扱いにはご注意をということなら、良いネーミングセンスです。

    PlayerPrefsを直接呼び出すことで非常に簡単にセーブ機能が作れますが、セーブが大きくなってくると管理クラスなどを作った方が良いでしょう。

    オートセーブを使うゲームの増加によりユーザーにはその存在がわかりにくくなっていますが、 開発者にはセーブの存在は大きいままです。セーブに関する話題は結構あって、正解ってなんだろうかと考えさせられます。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    多くのゲームでは対戦相手がいるはずで基本的にはその行動をプログラミングしなければいけません。この行動処理をゲームではAIと呼んだりします。

    実のところAIは考えているわけではなく、決まった処理を行っているだけです。ルール上決まった行動を自分の置かれた状況に合わせて実行することで考えているように見えるのです。状況というのはゲーム内で知れる情報の集まりです。自分の持っている手札であったり、すでに捨てられたカードが何かといったものです。イカサマがありなら、本来知りえない情報も追加できます。(個人的にはつまらないのでやめた方が良いと思いますが、強くするのが簡単でしょう。)
    状況が決まったら、あとはひたすら状況ごとにどうするかを書いておけば良いです。大富豪とかなら、自分の番であり最後の一枚を持っていて出せる状況であれば、とにかく出すべきです。そういったことをプログラム的に表現していくと大量のif文とswitch文によって場合分けしていけば良いでしょう。
    この場合分け(状況の種類)が多くなると、細やかな対応が可能なためAIがより人間らしく強くすることができます。場合分けが少ないと同じ行動を取りやすくなるので、なるべく状況を細かく分けるのが良いです。

    上に書いたことは言うのは簡単ですが、やるのは非常に難しいです。まずゲームのルールを熟知しなくてはなりません。どのようにしたときが最も良いのか、どうすることが悪いのかがわからなければ勝つための行動を作ることはできないからです。 
    特にゲームの序盤などは情報が少ないためにどういった行動をとるべきかは作り手の考えに大きく左右されることでしょう。終盤は取れる選択肢自体が少なくなることが多いので、そこまで悩むこともないはずです。

    こういったAIは固定された行動をとります。処理は早いし、プログラムの更新でAIが変更できるのが利点です。現在までのゲームではほとんどのゲームがこのような方法で作られています。

     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    以前、同じ内容で記事を書いたのですが、より良い方法がUnity5.3では行えるようです。

    rn-custom_coroutine
    Unity5.3で新しく使えるようになったカスタムコルーチンというものを使います。 公式の説明を見るとCustomYieldInstructionクラスを継承して、keepWaitingプロパティのgetをオーバーライドすれば新しいyieldオペレーションが作れます。
    yieldオペレーションとは、yield return ~とするときの~の処理のことを言っているのだと思います。(この記事ではそうだと思って書くことにします。)
    keepWaitingがtrueであればyieldオペレーションが処理を返さず継続し、falseになると処理を抜けます。このプロパティにDebug.Logを仕込んだところ毎フレーム呼ばれていたので、コルーチンで無限ループ内にyield return 0;というような書き方で行うのと同じと考えて良いでしょう。

    以前の方法のあまり良くない点は、処理をクラス内に書いていなければいけなかったため、あるクラスのstaticメソッドにするかクラス内での利用しかできないようになっていたことです。色々なところから自由に呼び出すということを考えると、その処理は独立した1つのクラスになっている方が見通しが良いのでそうすべきだと思っていました。
    メソッドに処理がある場合は、呼び出し方がStartCoroutineを介するというのもいまいちだと思います。StartCoroutineを使うと、渡すパラメータの個数の制約があること、わずかにコードが増えること、文字列での呼び出しだとエディター上で編集しにくいことが良くないです。
    新たな方法では導入が手間ですが、その後の作業を減らしてくれるため良い方法だと思います。WaitUntilやWaitWhileを使っても同じことができますが、よくある同じ処理をいちいち書くのは無意味なので、以下のようにカスタムコルーチンを作りました。

    上のソースは、ある時間処理を待たせるがスキップも可能であるというyieldオペレーションになります。使い方は
    yield return new SkippableWaitForSeconds(10, () => Input.GetMouseButtonUp(0));
    のようにします。この例だと10秒待つ処理であり、もしその間にマウスの左ボタンが上げられたらスキップするということになります。
    スキップするかの判定を外から渡せるため、色々と使えるようになっています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Google Playのカテゴリーで言うとトランプはゲームのカードというカテゴリに属します。主にトランプとトレーディングカードゲームが集まっています。
    カードのカテゴリはそれほど活発ではないという特徴があります。新着無料トップという新しいアプリの中でのランキングがありますが、そこに載っているアプリは50くらいです。
    新着無料のアプリのランキングが少ないということは、新しく作られているアプリの数が少ないということです。新着有料トップというランキングもありますが、この記事を書いているときは1件も登録されていませんでした。つまりカードでは新しい有料のアプリがかなり少ないということです。

    トランプは色々なゲームがありますが、知られているようなゲームはごく一部です。日本では大富豪、ポーカー、7並べ、ババ抜き、神経衰弱、ダウトといったものがよく知られているように思います。これらは基本的に2~7人くらいで遊ぶものです。おそらくは家庭や友達の間で遊ばれるものが好まれているのでしょう。
    こういった人気のあるゲームを題材としたアプリは既にリリースされています。特に大富豪はよく見かけます。大富豪は最も人気が高い気がするし、知っている人も多いと思います。そのため大富豪のアプリはたくさんあるのでしょう。
    実のところトランプのアプリのほとんどは複数人でやるゲームではなく、1人用のゲーム―ソリティアです。特に有名なのがフリーセルとクロンダイクです。パソコンに付属していたりするのでなんとなく知っているかもしれません。暇つぶしとしても良いし、じっくり考えるゲームなのでそういうのが好きな人には良いゲームです。
    ルール自体はそれほどバリエーションがある方ではないので、いくつもアプリが出ても意味がないような気はします。いくつもあるのはそれだけ需要があるということと作りやすいということがあると思います。ソリティアのプレイヤーは当然一人なので、ゲームのルールをきちんと処理すれば作れます。難しいのはルールの処理とUIです。

    ソリティアを作るのが難しいといっても複数人で遊ぶ大富豪や7並べほどは難しくありません。複数人で遊ぶゲームを作るのが難しい最大の原因はAIです。人間であるプレイヤー以外の対戦相手をどのようにプログラミングするかが非常に困難です。強すぎても駄目ですが、弱すぎるよりは強い方が良いです。強い理由が相手のカードを盗み見るといったイカサマでは困ります。イカサマしていると遊んでいる人が感じてしまったら、とたんにつまらなくなってしまうからです。
    自分の手札や相手のカードの出し方、今までの流れといったことから判断してAIを作る必要があります。これがどうして難しいかというのは、どんな状況に対しても判断をしなければいけなくてしかも強いということが求められるからです。(一番簡単なのは出せるカードをランダムで出すという方法です。)
    自分が大富豪をやっていることを想像してみてください。自分が出すカードをどうしてそう選んだのかを論理的に説明できるでしょうか?どっちでもいいやという場面もあるでしょうけど、AIがどっちでもいいやというように結論づけるまではどういったことから判断すればいいでしょう?
    トランプのAIとは、ゲームのルールの知らない人にマニュアルを渡して、その通りに遊んだら勝てるようなっているマニュアルを作ることです。

    ソリティアがいっぱいあるのは人気だからということと作るのが比較的簡単だからだと思います。

    複数人で遊ぶゲームにも需要があるのは間違いないので、作ればそれなりに遊ばれるはずです。
    ゲームを作りたいけれど、アイディアがない。でもプログラミングはそこそこできるという人はトランプゲームを作るというのが向いているのではないでしょうか。素材の用意もカードの絵くらいで十分なので、非常に楽です。

    私は今後トランプのアプリをいろいろ作っていくのも良いと思っています。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    アニメを作る方法はいくつかありますが、ここではコルーチンを使った方法を想定しています。コルーチンは逐次的に進んでいく処理を作ることが簡単なので、アニメーションを実装するには便利な方法です。無限ループを持つことで毎フレーム処理することも可能です。

    アニメを作った後でスキップしたいということがあると思います。特に頑張って作ったアニメは時間がかかりがちなので、ゲームのテンポを悪くしてしまいます。画面をタップしたり、タッチしている間はアニメをスキップするといったことを望まれることでしょう。
    スキップ処理はかなり面倒なことが多いです。本来処理すべき内容を行わないのですから当然です。
    処理を先に行い、表示だけを変化させるアニメを作る設計がふつうかと思います。アニメする状態とアニメが終わったときの状態を作り、最後にはアニメが終わったときの状態を通るように設計すれば、スキップの実装はそれほど難しくはありません。アニメ状態中に強制的にアニメが終わった状態に遷移させれば、スキップになります。
    単純なアニメはそれで可能ですが、色々絡み合ってしまうと非常に難しくなります。

    最も単純なアニメーションは待つことです。表示して、少し待つということを繰り返すだけでも躍動感は出ます。結果表示とかでよくあるものです。
    これを簡単に作るにはWaitForSecondsを使います。
    anime


    上のコードでは、WaitForSecondsを呼び出し1.0秒待機しています。表示するというコメントのところに何らかの処理を書けば良いわけです。
    WaitForSecondsを呼び出すと処理が止められてしまうので、これではスキップができません。スキップを行うには入力の受付が必要なので、毎回処理するところが必要なのです。

    スキップを行えるよう入力を受け付けるコルーチンを書いてみました。 
    コルーチンの中で新たなコルーチンを呼び出すということをしています。yield returnにStartCoroutineを渡すと、渡したコルーチンが終わるまで処理が遅延されます。SkippableWaitがスキップが行える「待ち」の処理です。WaitForSecondsと同じように使えるので、使いやすいと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ゲームを遊んでいると、自分にとって非常に楽しいものに出会うことがあります。また逆につまらないものに出会うこともあります。色々なゲームを遊んでいるうちに自分の好みがわかってきて、遊ぶ前からこれはおもしろそうだとかつまらなそうだということがなんとなくわかるようになります。
    そんな風になると、自分にとって面白いゲームがないかと探すのですが、そう簡単に見つかることはありません。作っている方の都合では、ある一人の人を楽しませるためだけに作っているわけではないからです。商業的な家庭用ゲームなどは最たるもので売れなければならないという前提があるために本来あるべき姿で売られることは稀です。

    ゲームで遊んでいると行きつくのは、自分でゲームを作ってみたいというところです。作ること自体は楽しいことも辛いこともあるのですが、始めてみようという人はそんな実情は気にせずやってみることをお勧めします。 どうやったらできるのかというのは一言では述べることができず、ひたすら完成までの流れを説明することになります。そして、やり方は決まったものがあるわけではないです。
    大まかにいえば、どのようなものを作るかという企画を決め、リソース(絵、サウンドなど)を用意し、プログラムで企画を実現できる範囲でゲームを作成します。とりあえず遊べるようになったゲームを遊び、バグの発見と修正、難易度の調整などを行います。十分な質まで高められたと思ったら、リリースをします。

    自由に作って良いという場合、いつまでも作り続けてしまい結局完成しないということが起こります。初めてゲームを作るなら、例えば1カ月で作るというように期限を決めて作った方が良いです。最低限どんなゲームでも必要なのがプログラミング技術です。あなたが作りたいゲームが既に存在するものと同じでなければ、その動作をさせるプログラムは新たに作らなければならないからです。
    初めて作るゲームは単純なものの方が完成しやすいです。RPGを作ろうと思ったら、1年とかかなり長い期間作業することを計画しなくては完成しません。 作りたいゲームを初めからやるよりは小さなものを確実に作れるか試した方が良いと思います。まずそれができなければより複雑なものを作って挫折してしまうでしょう。

    ゲームを完成させることは本当に難しいのです。
    これは個人の趣味だけの話ではありません。企業で作るものも完成に行きつかないことも多いのです。作ってみたが面白くないとか、こんなものは売れないと社内からの批判で開発中止ということもあります。
    個人の場合はやる気の継続が難しいと思います。作り始めのときは勢いよく進んでいたのにしばらくすると進みが遅くなり、いつになったら完成するのだろうかと思い始めます。 そうなってくると作っているのにあまり変わらずイライラしてくるでしょう。それで作るのをやめてしまうのです。
    少しでも作り続けるしかありません。もしくは作っているものを小さくするのです。全部を作るのではなく最低限必要なところを作ります。一度完成したものを変更していけないわけではありません。これで完成とした後で更新するという方法もあります。

    ゲームを一人で作ったことがある人は少しはいるものです。
    その中で完成までさせたという人はごくわずかです。 ゲームを作ったら、完成させてください。そうしないと誰も作ったかどうかわかりません。完成させることは無意味にさせないために必要なのです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    音楽ファイルはフリー素材を使うことがあるのですが、ゲームに使う上で困ったことがありました。それは先頭部部分に入っていた無音です。

    mp3やwavといった音楽ファイルの先頭に無音の部分が入っていることがあります。作る都合上発生するのか、何らかの理由があってそうなっているのかわかりませんが、そのようなものが存在します。

    この無音部分はゲームで使う上で面倒です。ボタンを押したときのSEなどレスポンスが要求されるUIにおいて頭に無音があるSEを流してしまうと、反応が悪く感じられます。少し遅れて再生されるような印象なので、ずれていて一度気になると気持ち悪いものです。

    下のように左端から少しの間無音になっていのがわかります。
    ほんの0.1秒くらいですが、再生するとわずかに遅れる感じがします。

    nosound

    Unity Editor上の画面でも無音部分があることを確認できます。
    調べたい音声ファイルを選び、インスペクタ―の下の方にあるプレビュー画面を見ると波形が表示されています。左側の方を良く見ると、波形が一直線上になっていて無音であることがわかります。
    pre-nosou

    解決方法は2通りあります。
    素材を加工して無音部分を削除する方法とプログラムで再生開始位置をずらす方法です。

    素材を加工するにはその素材が加工しても良くなくてはいけません。フリー素材といっても商用利用が可能なのか作者の情報を載せることが必要なのかといった利用規約についてはそれぞれ異なるため、必ず確認しましょう。加工可能と明記していない素材である場合は、作者に連絡するか使わないのが賢明です。

    素材が加工して良ければ、Audacityというフリーのツールを使って無音の場所を消します。Audacityは色々なファイル形式に対応しているのですが、MP3、WAV、Ogg Vorbisに対応しているのが非常に使いやすいです。
    どのような音楽ファイル編集ソフトでも大抵切り取りは入っているようなので別の編集ソフトを使っても同じ作業はできます。

    編集作業は先頭部分の無音と思われるところを選択して、削除するだけです。Audacityでの編集操作をgifでキャプチャーしたので下の動画を見れば操作がわかると思います。
    無音の領域を消した後に「オーディオの書き出し」というコマンドを選び、保存することで修正を行った音楽ファイルが得られます。

    pre-nosou


    もうひとつの解決方法のプログラムでやる場合は、マニュアルに載っているようにAudioSource.timeに再生場所をセットした状態でAudioSource.Playを呼びます。こうすると自由に再生位置を変えられるため、素材を変更しなくても無音を飛ばして再生することができます。 
    私の場合はSEの再生にAudioSource.PlayOneShotを使っていたので、AudioSource.timeを変更しても再生位置を変えることができませんでした。おそらくはAudioSource.Playだけが設定を反映されるのでしょう。

    プログラムで無音をなくす方法はお勧めしません。調整が非常に難しく時間がかかってしまいます。リソースを編集する方法は専用のツールということもあり、意外と簡単に精度良く加工できます。

    このページのトップヘ