3月, 2016 のアーカイブ

Unityでアニメーションの遷移や変数の設定を付けたり、消したり、移動したりしていると、”Null transition in state ‘AnyState’ ” と言うエラーが出てきたり、遷移画面でも”Not found”と言う遷移が一覧に出てきます。

これを手で一つづつ消していくのは面倒なので、一括で削除する為のエディタ拡張を紹介します。

(さらに…)

アセット紹介第2弾!今回はuFile Browserと言うアセットを紹介します。

uFile Browser

uFile

(さらに…)

今回はUnityでCSVファイルを読み込む方法を紹介します。

CSVファイルは中身がスプレッドシート(エクセルとか)みたいなデータが文字として入っています。各セルに当たる箇所は”,”と段によって区切られています。

例を上げるとエクセルではこう表示されるファイルがあるとして:

excel0
それの中身がこうなっています:
15,15,1,15,15,15,

15,15,6_u0,15,15,15,

15,15,6,15,15,15,

4_s,5,13_v0_u0,5,5,2_g,

ですので、読み込み方としましては、Resource.Load()でテキストデータとして読み込んでから、StringReaderに渡して、セル毎にデータを分けてListに保存します。

 

ではさっそく実装に入ります。まずクラス宣言です。

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;

/// <summary>
/// CSVファイルを読み込み、データを保持するクラス
/// </summary>
public class CSVReader
{
    /// <summary>
    /// CSVファイルの拡張子
    /// </summary>
    public const string _EXTENSION = ".csv";

    /// <summary>
    /// セルを区切る為にキャラ
    /// </summary>
    public const char _SPLIT_CHAR = ',';

    /// <summary>
    /// 行がコメントだと言う事を表す文字列
    /// </summary>
    string m_commentString = "//";

    // 読み込んだデータ
    List<List<string>> m_data = new List<List<string>>();
    TextAsset m_textAsset = null;

    /// <summary>
    /// コンストラクタ
    /// </summary>
    /// <param name="comment">コメントの文字列</param>
    /// <param name="isReadFromDisc">Resourcesでなくディスク(フルパス)から読み込むか</param>
    public CSVReader(string comment = "//")
    {
        m_textAsset = null;
        m_data = new List<List<string>>(10);
        m_commentString = comment;
    }

区切りで使用する”,”も宣言しておきます。List<>の中にList<string>を宣言する事で、入れ子的にして2次元配列の変わりにしています。別に2次元配列を作っても大丈夫です。

次に読み込み処理です。まず、テキストファイルをResourcesから読み込んで、TextReaderを返す処理を作ります。

    private TextReader CreateTextReader(string fileName)
    {
        m_textAsset = Resources.Load<TextAsset>(fileName);
        return new StringReader(m_textAsset.text);
    }

それでは実際の読み込み処理です。やる事としましては、上記の処理を呼んでデータを読み込んだ後に、1行ずつ拾っていき、それを各セル毎に区切って保存します。

    public bool Load(string fileName) 
    {            
        m_data.Clear();
        TextReader reader = CreateTextReader(fileName);

        int counter = 0;
        string line = "";
        while ( ( line = reader.ReadLine()) != null ) 
        {
            // コメントが入っている時はスキップする
            if ( line.Contains( m_commentString ) )
            {
                continue;
            }
            
            // 今の列をマス毎に区切る
            string[] fields = line.Split( _SPLIT_CHAR );
            m_data.Add( new List<string>() );

            foreach ( var field in fields )
            {
                if (field.Contains(m_commentString) || field == "")
                {
                    continue;    
                }
                m_data[ counter ].Add( field );
            }
            counter++;
        }

読み込みが終わりましたので、リソース開放をしておきます。

        // 読み込んだリソースを開放する
        Resources.UnloadAsset(m_textAsset);
        m_textAsset = null;
        Resources.UnloadUnusedAssets();
        return true;
    }

これでデータは準備出来ましたので、後はデータを獲得する処理を宣言していきます。

データは全部文字列として保存しておりますが、CSVの中で数値等を扱う事が有りますので、様々な取り出し方を作っておきます。

    public string GetString(int row, int col)
    {
        return m_data[ row ][ col ];    
    }

    public bool GetBool(int row, int col)
    {
        string data = GetString(row, col);
        return bool.Parse( data );
    }

    public int GetInt(int row, int col)
    {
        string data = GetString( row, col );
        return int.Parse( data );
    }
        
    public float GetFloat(int row, int col)
    {
        string data = GetString( row, col );
        return float.Parse( data );
    }

後は実際にCSVReaderのインスタンスを作ってデータを使うだけです。

        string path = "WordTable"; //今回はResources直下の想定
        CSVReader reader = new CSVReader();
        reader.Load(path);

        // 取り出し例
        reader.GetString(0, 2);

以上になります。

 

微妙に中身が違いますが、今回のソースです:

– https://github.com/ookumaneko/Blog_Unity/blob/master/CSVReader.cs

 

今回はちょっと書きたくなる事情が有ったので、宴でタイトル画面を設定する方法を紹介します。内容的には、新規プロジェクトは作ってある前提で描きます。

 

宴においてタイトル画面等のUI等は基本Unityで操作します。もしかしたらエクセルとかで操作する機能が追加されているかもしれませんが、今回はUnity上での操作を紹介します。

 

書いてみたら無駄に長くなってしまいました・・・

(さらに…)

今回はUnityアセットストアでMikiSoftwareさんが販売している「Action Voice Pack Nami Vol.1」と「Action Voice Pack Nadeshico Vol.1」を紹介します。

Action Voice Pack Nami Vol.1:
actionNami

Action Voice Pack Nadeshico Vol.1:
actionNadesico

この二つのアセットは、ゲームで汎用的に使用出来る音声がNamiは34種類、Nadeshicoは33種類入って$15で販売されています。Namiの方は16歳の女の子、Nadeshicoの方は25歳の女性というキャラ設定で、主に戦闘系で使うボイスが収録されています。

説明するまでもないかもしれませんが、キャラが出てくるゲームに音声を入れたい時が有っても声優さんがチーム居る時はまれ(だと思う)で、さらに仕事をお願いするにしてもどうするんだろうとか、そもそも予算が無いと言う時が有ると思います。

そんな時に1キャラ$15(2000円以下?)で汎用性が有って、幾つかのゲームに使えるボイス系のアセットは結構役に立ちます。まあ、$15もプライベートや学生のプロジェクト、もしくはニート(自分)には払いにくいかもしれませんが・・・。
購入して使用した後、別のゲームじゃ声被るから使えないかもしれませんが、仮の素材としても便利です。

入っている音声の種類は下記になります:

Nami Vol.1:

– 挨拶、戦闘前の一言等 x 3

– セリフ系 x 5

– 攻撃、気合、叫び声、技的な叫び x 12

– ダメージ x 11

– 勝ち、負け、引き分け x 1個ずつ

Nadeshico Vol.1:

– 挨拶、戦闘前の一言等 x 3

– セリフ系 x 5

– 攻撃、気合、叫び声、技的な叫び x 11

– ダメージ x 11

– 勝ち、負け、引き分け x 1個ずつ

2015年のデジゲー博で配布した「ブロックバスター」ではこの二つのアセットを使用しました:

 

ちなみに、両方とも同じ方がキャラを演じています。
紹介以上です。始めてアセット紹介しましたが、今後も気が向いたらやる・・・かもしれません。使っているアセットがワンパターンになりつつあるので、あまり数紹介出来ませんが orz

Action Voice Pack Nami Vol.1:

– https://www.assetstore.unity3d.com/#!/content/44457?aid=1100lGd9

Action Voice Pack Nadeshico vol.1:

– https://www.assetstore.unity3d.com/#!/content/44458?aid=1100lGd9