「 開発 」一覧

【Unity3D】【VS2010】IDEを2つ立ち上げてコピペでソース管理する時のメモ1

そもそも何故2つ立ち上げているかと言うと、

 

片方はゲーム本体(Unity)で、もう片方はアプリケーションサーバーな訳です。

 

で、この時に共通の情報(パケット処理周り)を持たせてる共通クラスファイルが1個だけあるんですが・・・

何が面倒かと言えば、

 

Unityのコンソール出力は「Debug.Log」に対して

鯖側が普通にWindowsフォームなので「Console.WriteLine」であること。

なので共通クラスファイルにこういうコードを書いて・・・

    namespace UnityEngine
    {
        public class Debug
        {
            public static void Log(string s)
            {
                Console.WriteLine(s);
            }

            public static void LogWarning(string s)
            {
                Console.WriteLine(s);
            }
        }
    }

コンソール出力はDebug.Logで統一。

ソースを変更して、鯖からUnityにコピペした時はこれをコメントアウト
Unityから鯖にコピペした場合はコメントアウトを外す・・・とやってましたがちょっと面倒くさい(‘A`

 

#if で何とかならんかなあ・・・と思ってた結果

 

1. 鯖側のプロジェクトのプロパティ > ビルド > 条件付きコンパイルシンボルに任意の文字列を追加

kk001

※セミコロン区切りで複数定義可能。

2. ソースをこのように書き換える

#if IsM2Server
    namespace UnityEngine
    {
        public class Debug
        {
            public static void Log(string s)
            {
                Console.WriteLine(s);
            }

            public static void LogWarning(string s)
            {
                Console.WriteLine(s);
            }
        }
    }
#endif

これで無事にUnity側にコピペしてもこのDebug.Logモドキはコンパイルされないことに。

シンボルの定義を今更知った次第でありました(汗

 

そもそもこれ以外にも方法あるよ!とか管理の仕方からおかしい!

とかいう話だったら申し訳無い(‘A`


【Unity3D】XMLSerializerでシリアライズ→デシリアライズした時に特定の型(List<int[]>)がnullに

正確には以下の環境で発生。

シリアライズ: .Net Framework 4.0
↓(TCPで送信)
デシリアライズ: Unity 4.1.2 f1

 

・・・そもそもそこでXMLSerializer使うのはどうなのという点は置いといて。。

 

とりあえず結論としては、monoのバグか何かのようで・・・

 

まず、.Net Framework4でシリアライズしたクラスの出力がこちら。

<?xml version="1.0"?>
<MyPacket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PacketType>N_Debug2MatchingInfo</PacketType>
  <Data xsi:type="N_Debug2MatchingInfo">
    <MatchineKeyNumber>1</MatchineKeyNumber>
    <IsHost>false</IsHost>
    <UnitPartes>
      <ArrayOfInt>
        <int>0</int>
        <int>0</int>
        <int>0</int>
(以下略)

続いてUnityで同じクラスをシリアライズしたクラスの出力がこちら

<?xml version="1.0" encoding="shift_jis"?>
<MyPacket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PacketType>N_Debug2MatchingInfo</PacketType>
  <Data xsi:type="N_Debug2MatchingInfo">
    <MatchineKeyNumber>1</MatchineKeyNumber>
    <IsHost>false</IsHost>
    <UnitPartes>
      <ArrayOfInt1>
        <int>0</int>
        <int>0</int>
        <int>0</int>
(以下略)

違いはencoding指定がついてるのと・・・ArrayOfInt1?なにこれ?

 

なおこの「ArrayOfInt」となるUnitPartesという変数の型は、List<int[]>です。

List<bool[]>とかList<byte[]>も同じようになるのかなあ・・・

 

まあ他の方法で代用すれば良いので、早速修正するか。。

余談ですが、int[ , ] も「2Dimensionはサポートされていません」みたいなこと言われてシリアライズ出来ないのでご注意。


がっくり

何か忙しそうと見せかけて相変わらずLoL三昧・・・と言う訳でもなく最近は若干ながら頻度が落ち気味。

やはガチ対人ゲーは個人的にはちょっと苦手だなあと思う今日この頃。。

 

さてさて、この場ではまだ言ってなかったですが

 

 

ここ最近は頑張って日本語化とかしようとしてた次第です。

ある程度慣れた身としては、正直しなくても良いかなーとは思うけどやはり新規でやる方にはあると便利でしょうし。
何だかんだ言って全て英語だと敷居が高いものです。

まあ逆に英語スキルが伸びないとか、日本語化が用意されてないゲームを余計しなくなるとかそういう弊害が微レ存…?(‘A`;;

 

ちなみにloljpmodという物が既にある事は知っていましたが、もう開発していないという事ですので
個人でなんとなく出来たらなあーと作業してます。

 

loljpmodを公開されているサイト様はこちら。

○loljpmod
https://sites.google.com/site/loljpmod/home

 

 

 

 

で、肝心の作業ですが・・・かなり難しいです。。

 

 

 

LoLにはAirクライアントと、実際のゲームで使うクライアントとの2種類があるのですが、

 

後者の日本語化はかなり簡単です。fontconfig_en_US.txt というファイルに
プレーンテキストでまんまデータが入ってます。

それを翻訳すればおっけー。ただし翻訳自体はとにかく力作業

 

で、問題はAirクライアント。

 

 

上の画像を見るに、日本語化出来ているように見えますが、

チャンプの情報を表示するページ部分しか日本語化出来ません。その他の大半の項目は

RADS/Projects/lol_air_client/releases/最新バージョン/deploy/assets/locale/resources-en_US.swf

の中に埋まっているようです。

Flashに関する知識は乏しいのですが、解析してプレーンテキストで出ないかなあと思って試したけどそんな事は無かった。
-> 取り出せたのはActionScriptのバイトコードだった
–> バイトコードを書き換えるのはアリかも知れないが、かなり危険な気がする。。

 

ちなみにチャンプの情報は

RADS/Projects/lol_air_client/releases/最新バージョン/deploy/assets/data/gameStats/gameStats_en_US.sqlite

に埋まっています。SQLiteを編集出来るソフトで普通に書き換えられます。

 

 

ただ、Airクライアントのインターフェースの方が日本語化する意味があると思っているだけに

メインの部分が触れなくてだいぶガックリ来てます(‘A`

 

土日ずっと作業してたのに!
途中でLoLやったりもしてましたが(

 

 

 

 

 

 

 

というわけで対人戦や作業に疲れた私は

 

 

 

 

 

 

 

 

 

 

 

エリンへと帰っていくのでした・・・
実は3年半ぶりにログイン。たまにはこういうゲームも良いね。