昨日の記事に書いたように、とりあえず標準のConsoleより便利なオレオレConsoleの作成記録です。
1. Debug.Logを拾える事
2. メッセージをクリックしたら外部のエディタに飛べる事
3. 出力が(ほぼ)リアルタイムである事
4. 検索を使えるようにしたい
5. タグを使えるようにしたい
まずは、「1. Debug.Logを拾える事」の実装から。
これは至って単純で、Application.RegisterLogCallbackというメソッドで、ログ出力へのコールバックを設定してやればいいだけ。
ただ、この方法で登録できるコールバックは一つだけというのが痛い。
ので、Application.RegisterLogCallbackで登録するコールバックは、分配器的な役割にしたい。
ということで、そういうのを実装したのが、こちら
いろいろごちゃごちゃと書いてあるものの、やってることは大したことではなくて。
LogEventDistributor.Initメソッドで `Application.RegisterLogCallback (OnLogEvent)` してOnLogEventメソッドを登録。
OnLogEventメソッドは、登録されている他のコールバックへイベントを更に通知、と。
それだけです。
実装予定のオレオレConsoleで、 `LogEventDistributor.AddLogCallback(オレオレConsole.オンろぐ)` とでも書いてやればログを拾えるようになる、はず?
あとは、拾ったログをEditorWindow当たりを継承して表示してやれば、見れるものになる、かな?
そんなわけで、次回は「3. 出力が(ほぼ)リアルタイムである事」あたりを攻める予定です。
お疲れ様です。
// -------- 追記 -------
本当は、そもそもAppliction.RegisterLogCallbackを使いたくないのですが、何かいい方法って無いんでしょうか。
混ぜるAssetによっては、コールバックの上書きしまくり・・・なんて状況も起こりうるわけですよね。
コレ以外には、ログファイルをFileWatcherでごにょる、とかでしょうか。
ぐぬぬ。
ここ半年弱、Unityに触っています。
Cocosから一転、Unityへ。
Unity、GUI上でぽちぽち配置するだけでいろいろできてくの、楽ですね。
もっとも、さらにいろいろしようとすると、結局なかなかいい量のコードを書くことになるのですが、
まぁ、C#とは付き合いが長いので、それなりにどうにかできそうです。
それよりも、僕としてはUnityの「作りやすさ」より、「確認のし安さ」が気に入ってます。
なんか狂ったら、一旦pauseして、一つ一つオブジェクトの状態をGUI上から確認、ってのがやりやすいなと。
(ただ、本当に根が深いときはちゃんとデバッガ使わないとしんどいし、どうせデバッガに頼るならUnityじゃなくても一緒じゃん、とか、むしろUnityはデバッガ接続すると不安定になるし、とか、とかとか、思わなくもないですが)
省略。
そんな感じでおっかなびっくりしながらUnityにさわっている状態です。
Unityの環境にそんなに不満は無いのですが、一点だけ、Console、ここだけはどうにかしたい。これが本題。

具体的には、
1. 検索を使えるようにしたい
2. タグを使えるようにしたい というか、Info,Warning,Errorの三種類にしか表示分けできないの、しんどい
ので、この辺をどうにかしたオレオレConsoleを作ろうかなって思っています。
ただ、Console自体は拡張できるようになっていないので、全部自分で実装しないといけない。
それは、面倒くさいので、標準Consoleのなくしちゃいけない部分だけ抜き出して実装しようとおもいます。
たぶん、次に上げるものが重要なのではないかと。
1. Debug.Logを拾える事
2. メッセージをクリックしたら外部のエディタに飛べる事
3. 出力が(ほぼ)リアルタイムである事
この3点と、先に上げた2点を達成したいですね。(同じメッセージをまとめる機能は・・・まぁ。)
これからこんな感じで、オレオレConsoleの開発を行なっていくので、その制作過程も記事にしていく予定です。
お疲れ様です。
Cocosから一転、Unityへ。
Unity、GUI上でぽちぽち配置するだけでいろいろできてくの、楽ですね。
もっとも、さらにいろいろしようとすると、結局なかなかいい量のコードを書くことになるのですが、
まぁ、C#とは付き合いが長いので、それなりにどうにかできそうです。
それよりも、僕としてはUnityの「作りやすさ」より、「確認のし安さ」が気に入ってます。
なんか狂ったら、一旦pauseして、一つ一つオブジェクトの状態をGUI上から確認、ってのがやりやすいなと。
(ただ、本当に根が深いときはちゃんとデバッガ使わないとしんどいし、どうせデバッガに頼るならUnityじゃなくても一緒じゃん、とか、むしろUnityはデバッガ接続すると不安定になるし、とか、とかとか、思わなくもないですが)
省略。
そんな感じでおっかなびっくりしながらUnityにさわっている状態です。
Unityの環境にそんなに不満は無いのですが、一点だけ、Console、ここだけはどうにかしたい。これが本題。

具体的には、
1. 検索を使えるようにしたい
2. タグを使えるようにしたい というか、Info,Warning,Errorの三種類にしか表示分けできないの、しんどい
ので、この辺をどうにかしたオレオレConsoleを作ろうかなって思っています。
ただ、Console自体は拡張できるようになっていないので、全部自分で実装しないといけない。
それは、面倒くさいので、標準Consoleのなくしちゃいけない部分だけ抜き出して実装しようとおもいます。
たぶん、次に上げるものが重要なのではないかと。
1. Debug.Logを拾える事
2. メッセージをクリックしたら外部のエディタに飛べる事
3. 出力が(ほぼ)リアルタイムである事
この3点と、先に上げた2点を達成したいですね。(同じメッセージをまとめる機能は・・・まぁ。)
これからこんな感じで、オレオレConsoleの開発を行なっていくので、その制作過程も記事にしていく予定です。
お疲れ様です。
今日は久しぶりにプログラミングのお話です。
最近、Cocos2d-xなるゲーム制作フレームワークに触れています。
ちなみにバージョンは3.0です。正式リリースがつい最近ありましたね。
情報も多くない上に、そもそもC++が苦手なんですが、なんとかぼちぼちやっています。
このタグでは、備忘録を兼ねて、Cocos2d-xについて学んだことを掲載していきたいと思います。
あやふやな知識で頑張りますので、間違いがあってもご愛嬌ということでお願いします。
まず今回は、視点操作。
以前のバージョンでは
"[cocos2d-x] CCCamera を使用してスターウォーズのオープニングシーンを再現"
こんな感じで視点操作ができたらしいですが、3.0からはカメラが独立したクラスとして用意される事になってます。
使えそうなのはActionCameraクラスとその派生のOrbitCameraクラスですね。たぶん。
OrbitCameraについてはまだ扱い方が理解できてないので、ここではActionCameraについてです。
こっちは使い方が簡単で、
まず、
void startWithTarget(Node* target)
というメソッドが用意されているので、カメラを使いたくなったSceneやLayerのインスタンスを引数としてこのメソッドを呼び出します。
その後、
void setEye(const kmVec3 &eye)
で視点の位置を設定するだけです。
フリックイベントに合わせて視点が変わるサンプルを作成しました。

記事の下部に、ソースコード(HelloWorld.h, HelloWorld.cpp)をまるごと載せました。
9割方、自動生成されたコードですね。
変更点としては、
"void HelloWorld::changeCameraAngle(cocos2d::Touch *touch, cocos2d::Event *unused_event)"メソッドの追加と、"bool HelloWorld::init()"メソッドの75行目以降への追加だけです。
上記の部分を3枚目のhoge.cppに抜き出しています。
視点変更は、cameraのgetEye()の結果に、フリックでの変化量を追加して、setEye(eye)しているだけです。
Cocos2d-xの視点操作、簡単ですね。
ただ、これ、常に中心方法を向いているので、斜めになるんですよね。
自分としては、正面を向いたままスライドして欲しかったんですが・・・うまく行きませんでした。
そのうちOrbitCameraにチャレンジしてみようと思います。
お疲れ様でした。
追記:
なんだかgistのスタイルシートが適応されていませんね。
また仕様が変わったようで。
プラグインの修正をします。
追記・追記:
修正完了。githubから帰ってくるjsonの仕様、ころころ変わります。
最近、Cocos2d-xなるゲーム制作フレームワークに触れています。
ちなみにバージョンは3.0です。正式リリースがつい最近ありましたね。
情報も多くない上に、そもそもC++が苦手なんですが、なんとかぼちぼちやっています。
このタグでは、備忘録を兼ねて、Cocos2d-xについて学んだことを掲載していきたいと思います。
あやふやな知識で頑張りますので、間違いがあってもご愛嬌ということでお願いします。
まず今回は、視点操作。
以前のバージョンでは
"[cocos2d-x] CCCamera を使用してスターウォーズのオープニングシーンを再現"
こんな感じで視点操作ができたらしいですが、3.0からはカメラが独立したクラスとして用意される事になってます。
使えそうなのはActionCameraクラスとその派生のOrbitCameraクラスですね。たぶん。
OrbitCameraについてはまだ扱い方が理解できてないので、ここではActionCameraについてです。
こっちは使い方が簡単で、
まず、
void startWithTarget(Node* target)
というメソッドが用意されているので、カメラを使いたくなったSceneやLayerのインスタンスを引数としてこのメソッドを呼び出します。
その後、
void setEye(const kmVec3 &eye)
で視点の位置を設定するだけです。
フリックイベントに合わせて視点が変わるサンプルを作成しました。

記事の下部に、ソースコード(HelloWorld.h, HelloWorld.cpp)をまるごと載せました。
9割方、自動生成されたコードですね。
変更点としては、
"void HelloWorld::changeCameraAngle(cocos2d::Touch *touch, cocos2d::Event *unused_event)"メソッドの追加と、"bool HelloWorld::init()"メソッドの75行目以降への追加だけです。
上記の部分を3枚目のhoge.cppに抜き出しています。
視点変更は、cameraのgetEye()の結果に、フリックでの変化量を追加して、setEye(eye)しているだけです。
Cocos2d-xの視点操作、簡単ですね。
ただ、これ、常に中心方法を向いているので、斜めになるんですよね。
自分としては、正面を向いたままスライドして欲しかったんですが・・・うまく行きませんでした。
そのうちOrbitCameraにチャレンジしてみようと思います。
お疲れ様でした。
追記:
なんだかgistのスタイルシートが適応されていませんね。
また仕様が変わったようで。
プラグインの修正をします。
追記・追記:
修正完了。githubから帰ってくるjsonの仕様、ころころ変わります。
配属先では、
「某スマホ用フレームワークを使いこなせるように自己学習する」
という研修の続きに近い事が行われています。
そんなわけで僕は今日一日、ずっとC++の勉強をしていました。
これまで僕が扱ってきたのはJavaやRuby等、メモリを意識せずにすむ言語ばっかりだったので、
ポインタとかメモリ管理とかが飛び交うC++に苦戦中です。
それでも、
「ヘッダーとクラスの実装ってどうやってわけるの?」
というレベルから始まって、
どうにか明日には本格的に某スマホ用フレームワークに触れそう?
というところまでは持っていけました。
・・・デストラクタや参照等など、いろいろ飛ばし過ぎたので、すぐに躓く事になりそうです。
ほぼ知識の無い言語で、知らないフレームワークに触れるってのは、かなり怖いモノがありますね。
それでも、心強い同期たちが居るので何とかなりそうかなと楽観的ですが。
これから同期と協力したり、競争したりしながら、技術を身につけて行けたらいいなと、そう思います。
それと。
今日はもうひとつ、今月の活躍した社員の表彰会のようなイベントに参加してきました。
しっかり数字として成果を出して、評価されて、表彰されてるところを見ると、こう、テンションがあがりますね。
そして、上がったテンションの分、まだ何も会社に貢献できていない自分にもどかしさも感じます。
早く一人前と認められるためにも、着実に毎日スキルアップしないといけませんね。
がんばります。
こんな感じで配属1日目が終わりました。
お疲れ様でした!
--
どこまでオープンにしていいのかわからないので、過剰なくらいにぼかしてます。
「某スマホ用フレームワークを使いこなせるように自己学習する」
という研修の続きに近い事が行われています。
そんなわけで僕は今日一日、ずっとC++の勉強をしていました。
これまで僕が扱ってきたのはJavaやRuby等、メモリを意識せずにすむ言語ばっかりだったので、
ポインタとかメモリ管理とかが飛び交うC++に苦戦中です。
それでも、
「ヘッダーとクラスの実装ってどうやってわけるの?」
というレベルから始まって、
どうにか明日には本格的に某スマホ用フレームワークに触れそう?
というところまでは持っていけました。
・・・デストラクタや参照等など、いろいろ飛ばし過ぎたので、すぐに躓く事になりそうです。
ほぼ知識の無い言語で、知らないフレームワークに触れるってのは、かなり怖いモノがありますね。
それでも、心強い同期たちが居るので何とかなりそうかなと楽観的ですが。
これから同期と協力したり、競争したりしながら、技術を身につけて行けたらいいなと、そう思います。
それと。
今日はもうひとつ、今月の活躍した社員の表彰会のようなイベントに参加してきました。
しっかり数字として成果を出して、評価されて、表彰されてるところを見ると、こう、テンションがあがりますね。
そして、上がったテンションの分、まだ何も会社に貢献できていない自分にもどかしさも感じます。
早く一人前と認められるためにも、着実に毎日スキルアップしないといけませんね。
がんばります。
こんな感じで配属1日目が終わりました。
お疲れ様でした!
--
どこまでオープンにしていいのかわからないので、過剰なくらいにぼかしてます。
研修はJava言語講座が終わってDB講座が始まりました。
久しぶりにSQL書いたのですが、なにもかも忘れてて、かなり焦りました。
定期的に触れないとあっという間に錆びつきますね。
そんな感じなので、今日の研修は収穫が多かったです。
講師の先生、いつもありがとうございます!
さて。
この研修では、早期配属という目標に向かって一心に課題に取り組んできたのですが、
とうとう念願叶って配属先が決まりました!

ゴールド認定で無事卒業!
中身はチョコでした。ご馳走様です。
とはいえ。
早期配属はあくまで通過点の一つに過ぎません。
本番はまだまだこれからですね。
求められる技術の水準。
見上げれば第一線で働いてきた先輩方。
周囲には同じ早期配属組。
振り返れば猛烈に追いすがってくる同期達。
停滞すればあっという間に取り残されてしまいそうです。
もう、学生時代の貯金も効かなくなってきましたし、傲らずに日々謙虚に学んで行きたいと思います。
めざせ!プロフェッショナル!
久しぶりにSQL書いたのですが、なにもかも忘れてて、かなり焦りました。
定期的に触れないとあっという間に錆びつきますね。
そんな感じなので、今日の研修は収穫が多かったです。
講師の先生、いつもありがとうございます!
さて。
この研修では、早期配属という目標に向かって一心に課題に取り組んできたのですが、
とうとう念願叶って配属先が決まりました!

ゴールド認定で無事卒業!
中身はチョコでした。ご馳走様です。
とはいえ。
早期配属はあくまで通過点の一つに過ぎません。
本番はまだまだこれからですね。
求められる技術の水準。
見上げれば第一線で働いてきた先輩方。
周囲には同じ早期配属組。
振り返れば猛烈に追いすがってくる同期達。
停滞すればあっという間に取り残されてしまいそうです。
もう、学生時代の貯金も効かなくなってきましたし、傲らずに日々謙虚に学んで行きたいと思います。
めざせ!プロフェッショナル!