git statusでcopiedとなる操作
概要
git statusでcopiedとなる操作方法を説明します。
操作方法
1, base.txtを作成し、copiedcopied...と適当に文字を入力
2, git add base.txt
3, git commit
4, base.txtを複製し名前をbase_copy.txtにする
5, base.textを開き「a」を追加する
6, git add base.txt
7, git add base_copy.txt
8, git status
まとめ
2つのファイルが同じ(または非常に同じ)場合、gitはそれらをコピーとして認識してしまうことが原因でcopiedという表記になる
copiedになることによってデータ上の違いはないと参考にしたページに記載あり
また、ある程度データがないとcopiedが出ない場合がある。
簡単にコードの時間を計測するクラス
概要
時間を計測する時は以下のようなクラスを利用し、測りたいコードの開始と終了をはさんで表示させます。
より高い精度で時間を計測する: .NET Tips: C#, VB.NET
しかし、毎回処理の開始と終了に記載し表示するコードを書くのは時間がかかります。
そこで簡単にコードの時間を計測するクラスを作成しました。
使い方
- 無名関数を入れる
- メソッドを直接入れる
using System; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { void GetMouseButtonDown1() { System.Threading.Thread.Sleep(2000); } // Update is called once per frame void Update () { if(Input.GetMouseButtonDown(0)){ Stopwatch.Elapsed("GetMouseButtonDown0",()=>{ System.Threading.Thread.Sleep(1000); }); } if(Input.GetMouseButtonDown(1)){ Stopwatch.Elapsed(GetMouseButtonDown1); } } }
結果
Unity スクリプトやプレハブなどのリソースが使用されているかを自動検索するツール
概要
Unityでオブジェクトが利用されているファイルを自動検索する方法を書いた。
yasuaki-ohama.hatenablog.com
しかし、この方法だと「JumpBoard.prefab」がどこで使われているか知りたい時
$ find . -name JumpBoard.prefab.meta $ cat ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.prefab.meta $ git grep -l f1f94e603ef11234d88f2d5bcf4b23d3
と3回もコマンドを打たなければならないため面倒だ。
そこで今回は以下のシェルスクリプトを実行するだけで簡単に検索できるツールを作成した。
使い方1(検索)
findUsedObject.sh · GitHubをダウンロードしてプロジェクト以下に置く
以下のようにコマンドを打ち実行する。
$ ./findUsedObject.sh JumpBoard.prefab ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.prefab.meta Assets/Scenes/Stage/0/0_0.unity Assets/Scenes/Stage/0/1_0.unity Assets/Scenes/Stage/0/3_0.unity Assets/Scenes/Stage/0/6_0.unity Assets/Scenes/Stage/1/1_1.unity Assets/Scenes/Stage/1/1_5.unity Assets/Scenes/Stage/1/1_6.unity Assets/Scenes/Stage/1/1_7.unity Assets/Scenes/Stage/2/2_5.unity Assets/Scenes/Stage/3/3_4.unity Assets/Scenes/Stage/3/3_7.unity Assets/Scenes/Stage/4/4_4.unity Assets/Scenes/Stage/5/5_2.unity Assets/Scenes/Stage/6/6_3.unity Assets/Scenes/Stage/7/7_1.unity Assets/Scenes/Stage/7/7_4.unity Assets/Scenes/Stage/7/7_7.unity Assets/Scenes/Stage/8/8_5.unity Assets/Tutorial/Scenes/0_0_Debug_Object.unity
このオブジェクトが利用されているステージがわかる
使い方2(複数検索)
特定の文字列が入っているオブジェクトを利用しているファイルを全て列挙する
$ ./findUsedObject.sh JumpBoard ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.cs.meta Assets/Object/AddMoveObject/JumpBoard/JumpBoard.prefab Assets/Object/AddMoveObject/JumpBoard/JumpBoardE.prefab ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.mat.meta Assets/Object/AddMoveObject/JumpBoard/JumpBoard.prefab Assets/Object/AddMoveObject/JumpBoard/JumpBoardE.prefab Assets/Scenes/Stage/1/1_6.unity ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.png.meta Assets/Object/Goal/Game_Clear.mat ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.prefab.meta Assets/Scenes/Stage/0/0_0.unity Assets/Scenes/Stage/0/1_0.unity Assets/Scenes/Stage/0/3_0.unity Assets/Scenes/Stage/0/6_0.unity Assets/Scenes/Stage/1/1_1.unity Assets/Scenes/Stage/1/1_5.unity Assets/Scenes/Stage/1/1_6.unity Assets/Scenes/Stage/1/1_7.unity Assets/Scenes/Stage/2/2_5.unity Assets/Scenes/Stage/3/3_4.unity Assets/Scenes/Stage/3/3_7.unity Assets/Scenes/Stage/4/4_4.unity Assets/Scenes/Stage/5/5_2.unity Assets/Scenes/Stage/6/6_3.unity Assets/Scenes/Stage/7/7_1.unity Assets/Scenes/Stage/7/7_4.unity Assets/Scenes/Stage/7/7_7.unity Assets/Scenes/Stage/8/8_5.unity Assets/Tutorial/Scenes/0_0_Debug_Object.unity ./Assets/Object/AddMoveObject/JumpBoard/JumpBoardAnimation.cs.meta Assets/Object/AddMoveObject/JumpBoard/JumpBoard.prefab Assets/Object/AddMoveObject/JumpBoard/JumpBoardE.prefab ./Assets/Object/AddMoveObject/JumpBoard/JumpBoardE.prefab.meta Assets/Scenes/Stage/6/6_7.unity Assets/Scenes/Stage/7/7_5.unity Assets/Scenes/Stage/7/7_6.unity Assets/Scenes/Stage/7/7_7.unity Assets/Scenes/Stage/8/8_7.unity Assets/Tutorial/Scenes/0_0_Debug_Object.unity ./Assets/Object/AddMoveObject/JumpBoard.meta
使い方3(複数検索 + 特定の拡張子だけ表示)
$ ./findUsedObject.sh JumpBoard unity ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.cs.meta ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.mat.meta Assets/Scenes/Stage/1/1_6.unity ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.png.meta ./Assets/Object/AddMoveObject/JumpBoard/JumpBoard.prefab.meta Assets/Scenes/Stage/0/0_0.unity Assets/Scenes/Stage/0/1_0.unity Assets/Scenes/Stage/0/3_0.unity Assets/Scenes/Stage/0/6_0.unity Assets/Scenes/Stage/1/1_1.unity Assets/Scenes/Stage/1/1_5.unity Assets/Scenes/Stage/1/1_6.unity Assets/Scenes/Stage/1/1_7.unity Assets/Scenes/Stage/2/2_5.unity Assets/Scenes/Stage/3/3_4.unity Assets/Scenes/Stage/3/3_7.unity Assets/Scenes/Stage/4/4_4.unity Assets/Scenes/Stage/5/5_2.unity Assets/Scenes/Stage/6/6_3.unity Assets/Scenes/Stage/7/7_1.unity Assets/Scenes/Stage/7/7_4.unity Assets/Scenes/Stage/7/7_7.unity Assets/Scenes/Stage/8/8_5.unity Assets/Tutorial/Scenes/0_0_Debug_Object.unity ./Assets/Object/AddMoveObject/JumpBoard/JumpBoardAnimation.cs.meta ./Assets/Object/AddMoveObject/JumpBoard/JumpBoardE.prefab.meta Assets/Scenes/Stage/6/6_7.unity Assets/Scenes/Stage/7/7_5.unity Assets/Scenes/Stage/7/7_6.unity Assets/Scenes/Stage/7/7_7.unity Assets/Scenes/Stage/8/8_7.unity Assets/Tutorial/Scenes/0_0_Debug_Object.unity ./Assets/Object/AddMoveObject/JumpBoard.meta
Unity ショップのUI設計
目次
- 概要
- 作成物の説明
- 仕様の説明
- 完成品
- 詳細
概要
前回、delegateを利用することで各スクリプトで呼び出したいメソッドをあらかじめ登録して処理ができることを説明した。
yasuaki-ohama.hatenablog.com
今回は、それを応用し、ショップのUIをdelegateを利用して作成する。
作成物の説明
ActionとUnityEventを利用して以下のようなUIを作成する。
- ボタンを押して所持金を加算
- アイテムを購入
- 現在購入できないアイテムを赤表示にする
仕様の説明
初期化
①初期化時にアイテムidを利用して必要なボタン数を作成
②マスターデータを利用して画像、名前、価格、説明のテキストをボタンに入れる
③作成されたボタンの参照先を渡す(購入できないボタンを非表示にする処理を渡すため)
④delegateの処理に登録するためのメソッドを登録して返す
⑤アイテムボタンの参照先と実行処理を利用して、コインが変更された時に呼び出すように設定する
入力操作
⑥アイテムボタンが押されたらYes/Noウィンドウを開き、idを渡しマスターデータを利用して表示
⑥アイテムパネルが押されたら説明テキストを押したアイテムの説明に変更する
⑦Yesボタンを押したらコインの減算を行う
⑧所持金表示パネルを更新
⑧現在のコインで購入できないボタンを非表示にする
完成品
詳細
今回はボタンを押した後の処理の設定を「インスペクター」と「コード」の二種類の方法で行った
インスペクター
インスペクターでUnityEventを利用した設定方法はコードを書かずにクリックするだけで簡単に作成することができる。しかし、登録した内容を変更することや渡す引数を変更することは基本的にできないので以下のような場所で利用した。
所持金を1000円増やす処理
ウィンドウを非表示にする処理
コード
新しく追加したオブジェクトに対して設定を行ったり、渡すパラメータを動的に変更したい場所は生成時にコードで直接設定を行った。
CreateShopItem.cs
ボタンをタップした後にYes/Noウィンドウを開いてアイテムデータを渡す処理
button.onClick.AddListener (() => { OpenYesNoWindow (key); });
アイテムのパネルを押した時にアイテムテキストにアイテムの説明を表示する処理
panel.onClick.AddListener (() => { ChangeItemText (key); });
アイテム購入後に購入できないアイテムを赤表示にする処理
onChangeCoin += (coin) => {
bool canBuy = coin >= ItemMasterData.GetValue (key).prise;
button.interactable = canBuy;
panel.interactable = canBuy;
};
CoinManager.cs
所持金が変更された時に表示を変更する
this.onChangeCoin += (coin) => {
coinText.text = coin.ToString ();
};
アイテムを購入した時に所持金を減らす
yesNoCanvas.transform.FindChild ("YesNoPanel/Yes").GetComponent<Button> ().onClick.AddListener (() => {
SubCoin (yesNoCanvas.GetComponent<ShowItemData> ().GetPrice);
});
Unityのiosとandroidのbuildをjenkinsで行う/iOS Build
以下の記事の「iOS Build」
目次
- (sampleプロジェクトで設定済み)アプリを公開する設定
- jenkinsでボタンひとつでipaファイルを作成する
(sampleプロジェクトで設定済み)アプリを公開する設定
以下のサイトが詳しく説明しているので省略する
iOS App開発:.p12ファイルとProvisioning Profileの作成 - マックブックな日々(Macbook Geek)
jenkinsでボタンひとつでipaファイルを作成する
「新規ジョブ作成」をクリック
「Sample_iOS」という名前を付ける
「フリースタイル・プロジェクトのビルド」をチェックする
OKボタンを押す。
「ソースコード管理」のgitにチェックをつけ、以下をコピペする
git@github.com:yasuakiohama/UnityJenkinsSample.git
「ビルド」でUnity3d Editorを選択する
以下のコマンドをコピペする
-quit -batchmode -executeMethod MyBuilder.BuildProjectAllSceneiOS
iOSProvisioningProfile.mobileprovisionとiPhoneDeveloperA.p12をプロジェクトに入れる
iOSProvisioningProfile.mobileprovisionはストアからダウンロード
iPhoneDeveloperA.p12はキーチェインから書き出す
cd /Users/Ohamayasuaki/.jenkins/jobs/Sample_iOS/workspace mkdir key 以下のように設定 /Users/Ohamayasuaki/.jenkins/jobs/Sample_iOS/workspace/key/iOSProvisioningProfile.mobileprovision /Users/Ohamayasuaki/.jenkins/jobs/Sample_iOS/workspace/key/iPhoneDeveloperA.p12
以下のサイトを参考にPackageApplicationファイルを変更する。
Packaging iOS apps from the command line - cutting.io
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
- my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", - "--sign", $opt{sign}, - "--resource-rules=$destApp/ResourceRules.plist"); + my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", + "--sign", $opt{sign});
「ビルド」で「シェルの実行」を選択
以下をコピペする。
gist.github.com
以下の3つを修正
# Mac OSX管理パスワード OSX_ADMIN_PASSWORD=LoginPasswd # 証明書ファイルパスワード IOS_P12_PASSWORD=P12Passwd # コード署名用 IDENTITY IDENTITY="iPhone Developer: yasuaki ohama (?????????)"
OKボタン押して完了
「Buildの実行」を押す
以下にipaファイルが生成される
/Users/Ohamayasuaki/.jenkins/jobs/Sample_iOS/workspace/Build/Sample_iOS-2.ipa
注意
MyBuilder.csのUntitledの部分がそのまま
private const string BUNDLE_IDENTIFIER = "com.Company.Untitled";
app作成のファイル名になるので、bundle identifierを変更した場合はjenkinsのシェルも変更すること
TARGET_APP_PATH=$XCODE_PROJECT_PATH/build/Release-iphoneos/Untitled.app
Unityのiosとandroidのbuildをjenkinsで行う/Android Build
以下の記事の「Android Build」
目次
- (sampleプロジェクトで設定済み)アプリを公開する設定
- (sampleプロジェクトで設定済み)keystoreのパスワードを自動入力
- jenkinsでボタンひとつでapkファイルの作成する
(sampleプロジェクトで設定済み)アプリを公開する設定
以下のサイトが詳しく説明しているので省略する
[Unity] Android アプリを公開する為の設定
(sampleプロジェクトで設定済み)keystoreのパスワードを自動入力
https://github.com/yasuakiohama/UnityJenkinsSample/blob/master/Assets/Editor/MyBuilder.cs
以下でkeystoreのパスワードを自動入力している
PlayerSettings.Android.keystorePass = "keystorePass";//キーストアのパスワード PlayerSettings.Android.keyaliasName = "keyaliasName";//エイリアス名 PlayerSettings.Android.keyaliasPass = "keyaliasPass";//エイリアスパスワード
jenkinsでボタンひとつでapkファイルの作成する
「新規ジョブ作成」をクリック
「Sample_Android」という名前を付ける
「フリースタイル・プロジェクトのビルド」をチェックする
OKボタンを押す。
「ソースコード管理」のgitにチェックをつけ、以下をコピペする
git@github.com:yasuakiohama/UnityJenkinsSample.git
「ビルド」でUnity3d Editorを選択する
以下のコマンドをコピペする
-quit -batchmode -executeMethod MyBuilder.BuildProjectAllSceneAndroid
「ビルド」で「シェルの実行」を選択
作成されたapkのファイル名を「Job名-ビルド回数.apk」にする
Workspace/Build/Sample_Android-1.apk以下のディレクトリに置くように設定
OKボタン押して完了
mkdir -p $WORKSPACE/Build mv Android.apk $WORKSPACE/Build/$JOB_NAME-$BUILD_NUMBER.apk
Buildの実行をクリック
完了すると左下のビルド履歴に青い丸が出る(失敗すると赤)
以下にapkファイルが生成される
/Users/Ohamayasuaki/.jenkins/jobs/Sample_Android/Workspace/Build/Sample_Android-1.apk
注意
bundle identifierを変更する場合は以下のスクリプトを変更すること、
ios, androidによって、またはリリースする国によって変更したい場合などはここに条件をつけると良い
https://github.com/yasuakiohama/UnityJenkinsSample/blob/master/Assets/Editor/MyBuilder.cs
private const string BUNDLE_IDENTIFIER = "com.Company.Untitled";
Unityのiosとandroidのbuildをjenkinsで行う/Jenkins
以下の記事の「Jenkins」
目次
- Jenkinsのインストール・設定・起動
- Jenkinsのプラグインを入れる
- JenkinsのUnity3dBuilder Pluginの設定
- URL
Jenkinsのインストール・設定・起動
以下のサイトを参考にし、Jenkinsのインストールと設定を行った
MacにHomebrewをインストールする - Qiita
OS XにJenkinsをHomebrewでセットアップする - Qiita
インストール brew install jenkins jenkins起動 java -jar /usr/local/opt/jenkins/libexec/jenkins.war launchctlで読み込み、起動する場合 launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist launchctl stop homebrew.mxcl.jenkins launchctl start homebrew.mxcl.jenkins
「~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist」の設定例
gist.github.com
同じ設定にすればブラウザに以下のURLを打てばJenkinsにアクセスできる
(外部からのアクセスができないようにhttpListenAddress=localhostを追加している)
http://localhost:8080/
Jenkinsに「Unity3dBuilder Plugin」と「Git plugin」のプラグインを入れる
今回は以下の二つのプラグインを入れる
- Git plugin
- Unity3d plugin
以下のサイトを参考に作成した
Unity3dBuilder Pluginを使ってJenkinsでUnityのビルドを自動化。Androidのapkを作ってみた - Qiita
以下のブラウザからjenkinsにアクセスする
http://localhost:8080/
「Jenkinsの管理->プラグインの管理->利用可能」の中から
「Unity3dBuilder Plugin」と「Git plugin」にチェックをつける
「ダウンロードして再起動後にインストール」を選択