とあるプログラマの備忘録

都内某所に住むプログラマが自分用に備忘録を残すという趣旨のブログです。はてなダイアリーから移動しました!

Unity4.6 uGUIでサイズ可変な共通ダイアログを作成する

こんなダイアログを作成するのですが、 中の文言がどの位になるのか分からないのでサイズを可変にならないといけません。 今回はuGUIをつかってこれを作成します。

f:id:raharu0425:20141213115227p:plain

素材を作成します

f:id:raharu0425:20141213115344p:plain

これを切り抜いて5つのパーツを作成します。

f:id:raharu0425:20141213115744p:plain

これに名前を付けてUnityに取り込みます。
※ここまでは別段NGUIとなんら変わりません。

Unityで組み立て

Canvasの下に親になるパネルを作成します

f:id:raharu0425:20141213120334p:plain

以後Anchor Presetsが肝心です。

f:id:raharu0425:20141213120546p:plain

赤い線のアンカーは親のUIに対して座標固定で表示するという事です。

以下はこの親のパネルの子として作成します

f:id:raharu0425:20141213121645p:plain

headerの作成

f:id:raharu0425:20141213121041p:plain

f:id:raharu0425:20141213121716p:plain

アンカーは親のパネルに対して中心上に固定ストレッチなしです。

footerの作成

f:id:raharu0425:20141213121302p:plain

f:id:raharu0425:20141213121823p:plain

こちらは中心下に固定ストレッチなし

bodyの作成

f:id:raharu0425:20141213121524p:plain

f:id:raharu0425:20141213121905p:plain

bodyは親サイズが変わったら可変してほしいので
中心の上下ストレッチをつけます。

これに他の部品も付ける

メッセージエリアは中心上下のストレッチ

タイトルラベルは中心上に固定

OKボタンは中心下に固定

完成するとこうなります。

この状態になれば上下ストレッチが可能なダイアログが完成します。


uGUIDialog - YouTube

これでbodyに例えばスクロール範囲を指定して中身をスクロールすることもできるので 多様的に使えるダイアログが完成しました。

この後OKボタンやCloseボタンに通知処理を書いて ボタン押下後の呼び出し処理などを追加するのですが、それはまた別の機会に。。

UnityPro+Github+Jenkins+DeployGateで自動ビルド&配布環境を作る その2

必要環境

Mac
UnityPro(有料)
github(アカウント作成&SSH認証済み)
Jenkins(無料)
DeployGate(無料)
iOS Developper契約済みアカウント(有料)

となりますUnityProが必要な理由はバッチモードで
メソッドを直接実行できるオプションがProのみ対応しているとのことです。

0からこの環境を整えるのは結構面倒かとおもいますが、
一応必須条件は上記条件になります。

やる事

・Unityでプロジェクトの作成
Githubで管理を行う
コマンドラインからビルドする
・Jenkinsの設定に追加
xcodeプロジェクトからipaファイルを作成
・DeployGateアップロードして配布開始

・Jenkinsの設定に追加

の前に必要なプラグインをインストールします。

Jenkinsの管理からプラグインの管理を選択します。

f:id:raharu0425:20141212102053p:plain

必要なプラグイン

DeployGate Plugin
GIT plugin
GitHub API Plugin
GitHub plugin
Xcode integration

どこまでデフォルトで入ってるのかわすれてしまいましたが、大体このプラグインが必要です。

以下Jenkinsの設定周りです

プロジェクト名を入れます。任意ですが分かりやすい名前をつけます

f:id:raharu0425:20141212111821p:plain

githubリポジトリURLとアカウントを入力する

f:id:raharu0425:20141212111910p:plain

このコマンドは前回の記事で作成したコマンドでprojectpathを${WORKSPACE}に変更した物です

f:id:raharu0425:20141212112039p:plain

以下xcodeビルド周りの設定になります

f:id:raharu0425:20141212112206p:plain

f:id:raharu0425:20141212112306p:plain

本当はxcodeビルドでipaファイル作成出来るはずなんですけどなぜかUnityプロジェクトは正常にipaファイルが吐き出されない!
どうしたJenkins!!しょうがないのでappからipaファイルを作成するコマンドを自前で用意し、
シェルで追加しておきます。

/usr/bin/xcrun -sdk iphoneos PackageApplication -v 
"${WORKSPACE}/iOSDevice/build/[.appファイルのパス]" -o 
"${WORKSPACE}/iOSDevice/build/[.ipaファイルの保存先のパス]"

f:id:raharu0425:20141212112317p:plain

先ほど吐き出したipaファイルを保存しておく

f:id:raharu0425:20141212112325p:plain

DeployGateのAPIKeyとユーザー名を入力します。
最後にアップロードするipaファイルのパスを入力します。

f:id:raharu0425:20141212112333p:plain

以上で設定は完了です。 正常にビルドが行われると成果物が保存されDeployGateにアップロードされます。

f:id:raharu0425:20141212113450p:plain

f:id:raharu0425:20141212113457p:plain

いくつかつまづくところもありますが、
最新ソースをpull > バッチモードでUnityBuild > xcodeprojectからipaを作成 > DeployGateにアップロードして配布までを自動化できました。

これで少しデバッガさんやプロジェクトメンバーへの配布も楽にできました。
なぜipaファイルがXcodeプラグインの設定で作成出来ないのかがちょっと気がかりですが、
この記事は以上で完了とします。

ご意見マサカリ等歓迎致します。

UnityPro+Github+Jenkins+DeployGateで自動ビルド&配布環境を作る その1

必要環境

Mac
UnityPro(有料)
github(アカウント作成&SSH認証済み)
Jenkins(無料)
DeployGate(無料)
iOS Developper契約済みアカウント(有料)

となりますUnityProが必要な理由はバッチモードで
メソッドを直接実行できるオプションがProのみ対応しているとのことです。

0からこの環境を整えるのは結構面倒かとおもいますが、
一応必須条件は上記条件になります。

やる事

・Unityでプロジェクトの作成
Githubで管理を行う
コマンドラインからビルドする
・Jenkinsの設定についか
xcodeプロジェクトからipaファイルを作成
・DeployGateアップロードして配布開始

という流れになります。

・Unityでプロジェクトの作成

どんなプロジェクトでもかまいません適当なプロジェクトを作成して保存しましょう。
一応文字でも真ん中に入れてビルドが成功した事が分かる程度の物で問題ありません
今回は前回作成した4.6のuGUIを試しているプロジェクトを使います。

Unity4.6 uGUI 入門 Canvas編 - とあるプログラマの備忘録

Githubで管理を行う(.gitignoreの設定)

Jenkinsで最新ソースをpullしてそれをビルドする事を目的としていますので
Githubリポジトリを作成します。
ここら辺のやり方は色々親切に書いてくれている記事がありますので適当に探してください。

UnityプロジェクトをGithubに上げる際に不必要なフォルダやファイルを上げない為に
.gitignoreを設定します(※設定はあくまで一例です)

##############
## unity
##############
[Ll]ibrary
[Tt]emp
[Oo]bj

##############
## Editor
##############
*.pidb
*.csproj
*.unityproj
*.booproj
*.svd
*.user
*.userprefs
*.suo
*.sln
LocalCache/

##############
## BuildResult
##############
Simulator/
iOSDevice/

##############
## Mac
##############
*.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db

ignoreを設定したら自分のリポジトリにpushしましょう。

コマンドラインからビルドする

さてここまで来たら早速Unityをコマンドライン上から実行してみます。
この時に使うのはまだgithub上のプロジェクトでは無く先ほど作成したプロジェクトをビルドします

$ /Applications/Unity/Unity.app/Contents/MacOS/Unity

私の環境だとこのパスにありますが個人の環境に合わせてください。
MacはUnityを複数個立ち上げる事が出来ません、既にUnityを開いている場合は閉じてから再実行してください。

これで起動したらならビルドを自動で行う為にプロジェクトに以下のファイルを追加します 名前はBuildBatchにしました

f:id:raharu0425:20141211174756p:plain

using UnityEngine;
using UnityEditor;

using System.Collections;

public class BuildBatch : MonoBehaviour {

    // build iOS app
    [UnityEditor.MenuItem("Tools/Build Project AllScene iOS")]
    private static void BuildiOS(){
        Debug.Log("##########iOS Build Start#########");
    }
}

このcsファイルを保存して以下のコマンドを実行します

$ /Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath [自分のプロジェクトのパス] -executeMethod BuildBatch.BuildiOS -logFile ~/build.log; cat ~/build.log

~/build.logの中に

####iOS Build Start

とロギングされていれば問題ありません。

先ほどのBuildBatch.csを以下に編集します

using UnityEngine;
using UnityEditor;

using System.Collections;

public class BuildBatch : MonoBehaviour {

    // build iOS app
    [UnityEditor.MenuItem("Tools/Build Project AllScene iOS")]
    private static void BuildiOS(){
        Debug.Log("##########iOS Build Start#########");

        // 全てのシーンを取得する
        EditorUserBuildSettings.SwitchActiveBuildTarget( BuildTarget.iPhone );
        string[] allScene = new string[EditorBuildSettings.scenes.Length];
        int i = 0;
        foreach( EditorBuildSettingsScene scene in EditorBuildSettings.scenes ){
            Debug.Log ("scenePath(" + i + ")" + scene.path);
            allScene[i] = scene.path;
            i++;
        }

        // オプションの設定
        BuildOptions opt = BuildOptions.SymlinkLibraries |
        BuildOptions.AllowDebugging |
        BuildOptions.ConnectWithProfiler |
        BuildOptions.Development;

        PlayerSettings.iOS.sdkVersion = iOSSdkVersion.DeviceSDK;
        // Identifierは個人の環境に合わせる
        PlayerSettings.bundleIdentifier = "jp.co.AnimeMiru";
        // バージョンも必要に合わせて変更する
        PlayerSettings.bundleVersion = "1.0.0";
        PlayerSettings.statusBarHidden = true;
        string errorMsg_Device = BuildPipeline.BuildPlayer( 
            allScene,
            "iOSDevice",
            BuildTarget.iPhone,
            opt
        );

        if (string.IsNullOrEmpty(errorMsg_Device)){
            Debug.Log ("##########Success iOS Device Build#########");
        } else {
            Debug.Log ("##########Failed iOS Device Build#########");
            Debug.Log (errorMsg_Device);
        }

        //シュミレーター用
        PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK;
        string errorMsg_Simulator = BuildPipeline.BuildPlayer(
            allScene, 
            "Simulator", 
            BuildTarget.iPhone, 
            opt
        );
        if (string.IsNullOrEmpty(errorMsg_Simulator)){
            Debug.Log ("##########Success Simulator Build#########");
        } else {
            Debug.Log ("##########Failed Simulator Build#########");
            Debug.Log (errorMsg_Device);
        }

    }
}

正常にビルドが行われるとプロジェクト内部に以下の様に出力されます。

f:id:raharu0425:20141211175226p:plain

以下のサイトを参考にさせていただきました有り難うございます。

UnityのビルドをJenkins氏に任せて楽したい。 - ともち屋 http://sassembla.github.io/Public/2013:01:31%2017-47-32/2013:01:31%2017-47-32.html

次回はJenkinsの設定とDeployGateの設定を行います

Unity4.6 uGUI 入門 Canvas編

気づけばもう師走。。。

この数ヶ月でTwitterで知り合ったエンジニアさん達と飲んだり
子供が生まれたり
仕事の量が2倍になったり
楽園追放を見に行ったり忙しい日々を送っております。

さて、GTMFでお披露目されされていたuGUIが遂に正式版でリリースされたたようです。
前回ちょっと触った時はまだCBTだったのでおおっぴらにいえませんでしたが
ちょくちょく触って情報を外だしして行きたいです。

間違っていたりしたら教えてください。

まずは適当なシーンにcanvasを作る

見せてもらおうか新しいuGUIの威力を…。
という事で適当に作成します

f:id:raharu0425:20141209181758p:plain

Inspectorはこんな感じですね。

f:id:raharu0425:20141209181812p:plain

ふむふむ、これが噂のCanvasというものらしいです。
なんか枠ができあがりました。

f:id:raharu0425:20141209181926p:plain

Canvasに画像を追加してみる

UI > imageを作成して、
適当な背景画像をアタッチします。

f:id:raharu0425:20141209182009p:plain

画像の大きさはiOSの4sにあわせて640 x 960にしています。

f:id:raharu0425:20141209182145p:plain

大体予想してましたが、
さっきのcanvasの白い枠を大きく超えてしまっている見たいです。

f:id:raharu0425:20141209182216p:plain

レゾリューション対応どうすればいいの?

結構前にUnity界隈で有名な方が
ReferenceResolutionコンポーネント追加すればよろし!
と言っていたのですが、最新のバージョンには無い!

無い訳がないので代わりの物の名前がCanvasScalerになったようです。
なるほど。。。

CanvasScalerは最初からアタッチされているのであとは設定しろという事ですね
わかります!!

実際の設定

f:id:raharu0425:20141209182708p:plain

Canvasの設定をScreen Spaceに変更して
ReferenceResolutionに任意の解像度をセットします今回は640 x 960です。

MatchはWidthとHeightどっちにあわせるの?という事です
今回は横基準で合わせますがこれ0.5にセットすると縦、横中間比率で合わせてくれます(流石Unity)

動かしてみた


uGUICanvas - YouTube

とりあえず基本中の基本と思われるCanvasの使い方をやってみました。 ではでは良いお年を

【Unity】NGUI 9スライスの方法

どうもこんにちわ、最近はUnityをこねくりまわしている時間がふえましたraharuです。

テキストボックスのフレームとか使いたいときに拡大すると
縁取りまで大きくなってしまうとレイアウトが崩れるので大体使われるのが
9スライス方法ですが、Cocos2dxはその関数が用意されて居たんですけどUnityはどこでやるのか分からなかったので探してみました

スライス用の画像を用意する

f:id:raharu0425:20140912141437p:plain

こんな50x50pxの枠画像を作ります。

NGUIで実際に使用する

f:id:raharu0425:20140912141618p:plain

SpriteのEditボタンを押すとこんな画面になるので

f:id:raharu0425:20140912141656p:plain

SpriteDetailsのBorderを全て15にセットします

f:id:raharu0425:20140912141917p:plain

すると下のプレビューがこうなってるはずです

f:id:raharu0425:20140912141935p:plain

拡大してみる

f:id:raharu0425:20140912142005p:plain

縁が大きくならずに枠を拡大する事ができました。 とても簡単に使える方法なので是非!

【Unity】 LitJsonを使用してResource以下のJsonファイルをパースする

久しぶりのブログですが、この間に若干のデスマを挟んでいるraharuです。 最近Unityを触る機会が増えて楽しい日々を過ごしています。

Cocos2dxちゃんはちょっと休憩、また3.3Finalくらいのバージョンが出てきたらやろうかと思います。

もう何番煎じの話題か分かりませんが、備忘録として残しておきます。

LitJson入れる

UnityでJSONをあつかう - LitJSON - Neareal 参考にさせて頂きました。

Jsonファイルは面倒なのでエクセルで作成して

Mr. Data Converterで変換しています

test.json

[{"id":1,"name":"ボス1","hp":100000,"attack":300},
{"id":2,"name":"ボス2","hp":200000,"attack":4500},
{"id":3,"name":"ボス3","hp":3333333,"attack":6000}]

このような適当な物を作成します

その後このjsonファイルを.txtに拡張子変更します。

これをUnityに入れます今回はResources/Json/test.txtとして入れました

test_scene.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using LitJson;

public class Opening_Scene : MonoBehaviour {
    
    public List<DecodeData> dataList = new List<DecodeData>();

    public class DecodeData
    {
        public int id;
        public string name;
        public int hp;
        public int attack;
    }

    
    // Use this for initialization
    void Start () {

        //  MasterJsonLoad
        TextAsset mapText = Instantiate(Resources.Load("Json/test")) as TextAsset;

        // ListAdd
        DecodeData[] json_data = JsonMapper.ToObject<DecodeData[]> (mapText.text);
        dataList.AddRange (json_data);

        foreach (DecodeData list in dataList) {
            Debug.Log(list.name);
        }
        
    }
    
    // Update is called once per frame
    void Update () {
    
    }
}

f:id:raharu0425:20140909110812p:plain

Unity4.6 uGUIをつかってみる

久しぶりにちょこちょこUnity触っていきたいなと思います。

仕事ではCocos2dxで個人はUnityというね2足のわらじで面倒ですが、
しばらくこれで行きたいと思います。

いままでGUIはNGUIが主流だったんですかね?
4.6からは使えると噂のuGUIが導入されるみたいです。

さくっと内容の知りたい方はこちらに丁寧にかいてありました。

Unityの新GUI、uGUIはどうなる?こうなる! - テラシュールブログ


Unity 4.6 - New UI System overview - YouTube

ふむふむ、便利そうです。

こんなページもさくっと作れました。

f:id:raharu0425:20140725104647p:plain

ヒエラルキー

f:id:raharu0425:20140725104656p:plain

ここまでは良かったんですけど。

あれ?このHPゲージどうやって動かせばいいの?メッシュ?

前にHPゲージ作っていたときは2つの画像を用意したりしてましたが
今回四角いゲージを採用していないのでどうしたものか、、

Cocos2dxならローディングバーがあるので1発なんですが、、
とごにょごにょしてたら見つけました。

HPゲージのInspectorはこんなこんなかんじになっていると思います。

f:id:raharu0425:20140725105436p:plain

これを以下のように変更

f:id:raharu0425:20140725105455p:plain

これだけで行けます。


Unity 4.6 - HPGauge - YouTube

ここまで一切スクリプト書いてないというのが脅威です。
Pro欲しいなぁ会社買ってくれないかなぁ(ボソ

ご意見、マサカリ等歓迎しています