読者です 読者をやめる 読者になる 読者になる

naichi's lab

3日後の自分(他人)への書き置き

【iOS】この証明書の発行者は無効です

iOS XCode

f:id:naichilab:20160831003245p:plain

下記記事の通り、iOS Distribution用の証明書を発行して、

blog.naichilab.com

キーチェーンに登録しても

この証明書の発行者は無効です

f:id:naichilab:20160831001958p:plain

なんでやねーん。

今作ったとこやぞ!と。

どうも中間証明書の有効期限が切れてたみたいです。

期限切れの中間証明書を削除する

キーチェーンアクセス -> 表示 -> 有効期限の切れた証明書を表示

f:id:naichilab:20160831002346p:plain

もし Apple Worldwide Developer Relations Certification Authority に赤いバツがついてたらビンゴ。

右クリックして削除。

新しい中間証明書をインストールする

Apple PKI

上記ページから、新しい方のWWDR Certificateをダウンロード(02/07/23の方)

ダブルクリックしてキーチェーンに保存。

解決。

f:id:naichilab:20160831003104p:plain

【Unity、iOS】AdMob入れたらModule 'GoogleMobileAds' not found.が消せなくて困った。

Unity XCode Error AdMob Cloud Build

f:id:naichilab:20160829234329p:plain:w160

タイトルの通り。

AdMobをiOS用にビルドしようとしたらハマったのでメモ。

環境

  • 書いた日 2016/08/29
  • OS X El Capitan 10.11.6
  • Unity 5.4.0f3

エラー内容

unityから出力したxcodeprojを開き、ビルドすると下記エラー。

xxx/Libraries/Plugins/iOS/GADUNativeCustomTemplateAd.h:4:9: Module 'GoogleMobileAds' not found

GoogleDevelopersに書いてある通りに Add Files to "Unity-iPhone"... から GoogleMobileAds.frameworkを追加してもエラー。

くそう!

解決方法1

下記手順に従ってSDKを追加する際に、

iOS クイック スタート  |  AdMob iOS ガイド  |  Google Developers

Add Files to "Unity-iPhone"... でSDKを選択するウィンドウがある。

そのウィンドウでOptionsを開き、Copy items if neededにチェックを入れること!!

f:id:naichilab:20160829232239p:plain

これがオフだと何をどうしようが not foundエラーになる。

上記サイトにはOptionsが載ってないから最近のXCodeで追加されたんだろうね・・・

解決策2(Unity Cloud Build にも対応)

そもそもunityでビルドするたびにXCode触りたくない人向け。

最初からこの方法でやっときなさいって感じですね。

unity側で Plugins/iOSGoogleMobileAds.frameworkを放り込む。

f:id:naichilab:20160829233906p:plain

終わり。

あっけないので補足。

unity上で追加したframeworkを選択した時、Inspectorウィンドウがこんな感じになってること。

f:id:naichilab:20160829234007p:plain

iOSにチェックが入っていればOK。

これだけでunityが吐き出すXCodeプロジェクトにframeworkが含まれた状態になる。

f:id:naichilab:20160829233502p:plain

あぁ無駄な時間つかった・・・

個人用のロゴ作った

Illustrator

前から作ろうとして放置してた個人用のロゴを完成させた。

アイデアは @matsukesoft さん。

前に相談したらサラッと書いてくれた。いつもありがとうございます。

それを微調整していい感じになったので完成。

f:id:naichilab:20160828225344p:plain:w320

f:id:naichilab:20160828225354p:plain:w320

別に隠すもんでもないし ai ファイルもGitHubで公開した。

github.com

公開はしたけど無断利用はしないでね。

【Unity】2Dメッシュでレーダーチャートを作図する その1

Unity

f:id:naichilab:20160828153311p:plain

今作ってるゲームで、ステータスのグラフを描く必要があってちょっと調べた。

イメージはこんな感じで、これはレーダーチャートっていうらしい。

f:id:naichilab:20160828153416j:plain:w320

メッシュを変形〜みたいなことすれば良いんだろうけど全く経験がない。

とりあえずググりながらやってみる。

環境

  • 書いた日 2016/08/28
  • OS X El Capitan 10.11.6
  • Unity 5.4.0f3

まずは試して見る

動的にメッシュ生成して描画できればええんかなーと。

ぐぐると良さそうな記事発見。

esakun.hateblo.jp

ドンピシャやないですか!!!

真似てみた。

f:id:naichilab:20160828154333p:plain

すげぇ。一瞬でできた。

昔AndEngineでOpenGL描いたときには頭痛くなるぐらいのコード書いた気がするけどたかだか15行程度でここまでできちゃうのね・・・

さらに記事の通りマテリアルを充ててみる。

f:id:naichilab:20160828155554p:plain

よいよい。

多角形にしてみる。

さっきの三角形を応用して多角形を描く。

f:id:naichilab:20160828160907j:plain

こんな感じか。

赤数字が頂点番号。矢印が描画順。

とりあえず5角形書いてみる。

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

[RequireComponent (typeof(MeshRenderer))]
[RequireComponent (typeof(MeshFilter))]
public class DynamicCreatePolygonMesh : MonoBehaviour
{
    [SerializeField]
    private Material _mat;

    //頂点数
    [SerializeField]
    private int VerticesCount = 5;

    //半径
    [SerializeField]
    private float Radius = 1f;

    private void Start ()
    {
        if (VerticesCount < 3) {
            Debug.LogError ("頂点数は3以上を指定してください。");
            return;
        }

        List<Vector3> vertices = new List<Vector3> ();
        List<int> triangles = new List<int> ();

        //原点座標
        vertices.Add (Vector3.zero);

        //各頂点座標
        for (int i = 1; i <= this.VerticesCount; i++) {
            float rad = (90f - (360f / (float)this.VerticesCount) * (i - 1)) * Mathf.Deg2Rad;
            float x = Mathf.Cos (rad);
            float y = Mathf.Sin (rad);
            vertices.Add (new Vector3 (x, y, 0));
            triangles.Add (0);
            triangles.Add (i);
            triangles.Add (i == this.VerticesCount ? 1 : i + 1);
        }

        var mesh = new Mesh ();
        mesh.vertices = vertices.ToArray ();
        mesh.triangles = triangles.ToArray ();

        var filter = GetComponent<MeshFilter> ();
        filter.sharedMesh = mesh;

        var renderer = GetComponent<MeshRenderer> ();
        renderer.material = _mat;
    }
}

f:id:naichilab:20160828163409p:plain

いい感じね!!

次は変形をアニメーションしたいけど、とりあえずここまで。

参考

chachart.net

esakun.hateblo.jp

【Unity】PlayerPrefsの暗号化

Unity

f:id:naichilab:20160827233720p:plain

環境

  • 書いた日 2016/08/27
  • OS X El Capitan 10.11.6
  • Unity 5.4.0f3

やりたいこと

  • PlayerPrefsに保存されるデータを暗号化しておきたい。

やったことまとめ

暗号化して保存する EncryptedPlayerPrefs クラスを作った。

特別なアセット利用はなし。素のUnityでそのまま使えます。

ソースと使いかたは後半

やったこと詳細

PlayerPrefs暗号化できないかなーと思って調べたらいい記事発見。

kan-kikuchi.hatenablog.com

おーいいじゃんと思って紹介されてる ZDatabase をポチった。

試してみてたらなんかおかしい。

SaveBoolしたあとにLoadBoolしても必ずデフォルト値が帰ってくる。

PlayerPrefsにはちゃんとキーも保存されてる。

SaveStringLoadString は問題ないから ZDatabase がバグってると判断。

ZDatabaseのフォーラム見ても1年以上更新されてないし、あーこれ無駄買いしちゃったな・・・と。

結局自分で作ることにした。

AssetStoreって返品できないのかな??

ソースと使いかた

※使用は自己責任でお願いしますね〜。

必要クラス

下記ファイルをUnity上に放り込む

PASSSALT は適当に変えてください。

使いかた

好きな場所でこんな感じに呼び出す

using UnityEngine;

public class Sample : MonoBehaviour
{
    void Start()
    {
        EncryptedPlayerPrefs.SaveBool("hoge", true);
        bool hoge = EncryptedPlayerPrefs.LoadBool("hoge", false);
        Debug.Log(hoge);

        EncryptedPlayerPrefs.SaveString("foo", "this is string value.");
        string foo = EncryptedPlayerPrefs.LoadString("foo", "");
        Debug.Log(foo);

        EncryptedPlayerPrefs.SaveInt("bar", 123);
        int bar = EncryptedPlayerPrefs.LoadInt("bar", 0);
        Debug.Log(bar);
    }
}

出力されたログ

f:id:naichilab:20160827232642p:plain

保存されてるPlayerPrefsの中身はこんな感じ。

f:id:naichilab:20160827232527p:plain

これはAdvanced PlayerPrefs Windowで表示

備考

本当はパスワード固定じゃなくて、keyを付与して使うとかすべきだと思う。

このソースだとSaveBool("foo", true); と SaveBool("bar", true); は同じ値が保存されるし。

まぁスマホ利用であんま負荷かけたくないのと、入れるデータも大したことないのでこれで行くことにした。

参考

パスワードで文字列を暗号化する: .NET Tips: C#, VB.NET

tsubakit1.hateblo.jp

kan-kikuchi.hatenablog.com

Android Security 安全なアプリケーションを作成するために

Android Security 安全なアプリケーションを作成するために

【Unity、Mac、VSCode】Visual Studio Codeでよく使うショートカットキー

f:id:naichilab:20160826014350p:plain

先日VSCodeを入れました。

blog.naichilab.com

ちょいちょい使いそうなショートカットキーをメモ

コマンドパレット

Cmd + Shift + p

f:id:naichilab:20160827145055p:plain

使用可能なコマンドを列挙&絞り込み&実行

大体はこれで検索すればできそう・・・

コード整形

shift + option + f

いつもの。

キーボードショートカットを一覧

カスタマイズするならここから。

Code -> 基本設定 -> キーボードショートカット

[
{ "key": "shift+escape",          "command": "closeReferenceSearchEditor",
                                     "when": "inReferenceSearchEditor && !config.editor.stablePeek" },
{ "key": "escape",                "command": "closeReferenceSearchEditor",
                                     "when": "inReferenceSearchEditor && !config.editor.stablePeek" },
{ "key": "shift+escape",          "command": "cancelSelection",
                                     "when": "editorHasSelection && editorTextFocus" },
・・・

保存時に自動整形ってどうやるのかな〜。

【Unity、Mac】いつのまにか正式リリースされてたVisual Studio Codeを使ってみる

Unity Mac VSCode

f:id:naichilab:20160826014350p:plain

VSCode、1年以上に試したんですけどイマイチ使いづらくて結局MonoDevelopに戻ってました。

↓旧ブログの記事 naichilab.blogspot.jp

久々にサイト見に行ったらVer1.4とのことで、どの程度進化したのか再度試してみます。

インストール方法

下記公式サイトからダウンロード&解凍

code.visualstudio.com

アプリケーションフォルダに入れるだけ!

Unity側の設定

Unity -> Preferences -> External Tools -> External Script Editor に コピーしたVSCodeを選択。

f:id:naichilab:20160826014903p:plain

スクリプトを開く

Unity上でC#コードをダブルクリックすれば勝手に開きます。

そしたら拡張機能をインストールするといいよ。って。

f:id:naichilab:20160826015024p:plain

推奨機能を表示ぽちー

f:id:naichilab:20160826015112p:plain

2つ推奨機能が出てきた。とりあえずインストール。

f:id:naichilab:20160826015220p:plain

入ったっぽい。

Cmd+Qで終了し、再度スクリプトを開く。

f:id:naichilab:20160826015342p:plain

おお、ハイライトされた。けどなんかエラーしてますね。

これもGet .NET CLI tools押してみる、、、けどなんか不要な予感がするのでとりあえず無視

インテリセンス(コード補完)が効かない

ここからちょっと長い戦い。

Unityにエディタ拡張を入れる

github.com

上記リポジトリのClone or DownloadからZIP形式でダウンロード

解凍するとVSCode.csというファイルが見つかるのでこれをUnityに同フォルダ名で入れる。

f:id:naichilab:20160826022101p:plain

Projectビュー上でPlugins/Editorフォルダを作り、放り込めばOK

Unity -> Preference -> VSCode

Enable Integrationにチェックを入れる。

f:id:naichilab:20160826022229p:plain

Assets -> Open C# Project in Code

f:id:naichilab:20160826022901p:plain

それっぽくソリューションが開いたが、、、まだ効かない。

VSCodeに拡張機能を入れる

marketplace.visualstudio.com

これが必要っぽいので入れる。

VSCode上で、Cmd+p。出てきたウィンドウにext install omnisharpと入力し、エンター。

f:id:naichilab:20160826023116p:plain

Legacy C# Supportをインストール。

f:id:naichilab:20160826023149p:plain

またVSCodeを再起動して確認。

まだダメ・・・

ぐぐっていくと、どうも最初に入れたC#拡張機能が不要っぽい?

qiita.com

VSCodeのC#拡張機能を外す

サイドメニューから拡張機能を開き、C#をアンインストール

f:id:naichilab:20160826023756p:plain

VSCode再起動。

なんかエラーしてる。Mono古いからOmnisharp動かないよ!って。ぐぬぬ。

[ERROR] Error: Cannot start Omnisharp because Mono version >=4.0.1 is required. See http://go.microsoft.com/fwlink/?linkID=534832#_20001

Mono更新

Download | Mono

上記からダウンロード。

現時点での最新 4.4 SR1 (4.4.2.11)を入れてみる。

f:id:naichilab:20160826025521p:plain

やっと・・・

インテリセンス効いたーーーーーーー

f:id:naichilab:20160826025640p:plain

Input.touchesとか、Unity固有のメソッドもちゃんと補完されてる。

まとめ

軽いし日本語打ちやすいし素晴らしい。(MonoDevelopだと漢字変換おかしい)

今度Unityのデバッグできるか試してみよう。