Unity5でアイコンフォントをNGUIで使ってみる。

UILabel、ペースト

Unityでボタン等のアイコン画像をフォントでまかないたいなと思って、

NGUI「UI Label」に入れようとおもったけど、どうやっていれていいかわからなかったのでメモ

1. アイコンフォントで有名らしい「http://fontawesome.io/」を、Unityで入れてみたいと思い入れてみた

※ライセンスにはご注意を!

2. まずダウンロードし、UnityのAssets/Fonts/**.ttfにドラッグ。

※拡張子がttfのものを使おう!

3. でこのあとどうしてよいのかわからくなった、textにいれたらいいんだろう。

サイト内に各アイコンに紐づく、unicodeというもので指定ができる。。

iconfont unicode
iconfont unicode

が、実際にはそれをUI Labelのテキスト内にいれてもアイコン画像は表示されません。

そう、通常unicodeはそのままでは入力できないんです。ただ、実はクリップボードコピーはできちゃいます。

iconfont
iconfont

この画面でコピーw

4. ダウンロードしたフォントデータを開き、使うアイコンテキストをコピーし、UI Label内にペーストする。

UILabel、ペースト
UILabel、ペースト

text内は何の文字も見えない状態ですが、ペーストされていれば、アイコン画像が表示されているはず!

5. これで表示されると思います!

6. 一応上記でも対応できますが、ちゃんとunicodeを入力できるようにする方法がありました。先人の知恵

参考サイトさま:http://nekobata.blog.jp/archives/1032788479.html

Unity5で 『 library not found for -lPods-Unity-iPhone』と出たら

lPods-Unity-iPhone

『 library not found for -lPods-Unity-iPhone』

Unity5.0の時のiOSアプリを、Unity5.4xにアップデートし、
久々xcodeでビルドと下記エラーが、

lPods-Unity-iPhone
lPods-Unity-iPhone

ld: library not found for -lPods-Unity-iPhone clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因は、前の古いバージョンのUnityを使っている時にリンクエラーがでるそうです。。

で解決方法はエラーの通りでございまして、、汗

  • xcode上の General設定の、Linked Frameworks and Libraries から、
  • 「libPods-Unity-iPhone.a」 を frameworkから削除し、ビルドしなおせばOK
-lPods-Unity-iPhone
-lPods-Unity-iPhone

これをdelete!!

そしてリビルド!!!

以上!!!!

Unityで、#UNITY_IOS等の、エディタ上とプラットフォームの判定を勘違いしてた

Unityで、よくAndroidや、iOSの条件分岐かく 「#if UNITY_IOS」等の分岐ですが、

勘違いして使っていました。


#if UNITY_ANDROID Debug.Log("androidだよー"); #elif UNITY_IOS Debug.Log("iosだよー"); #else Debug.Log("unityエディタ含むよー"); #endif

を、Unity上のswitch platformで 『iOS』にしていて、
Unity上で実行したら。。


unityエディタ含むよー

となるとおもっていた。。。汗

違かった。。。

実際は、


iosだよー

と、なった

ほんまアホやった。。


#if UNITY_EDITOR Debug.Log("Unityエディタで実行中だよー"); #elif UNITY_ANDROID Debug.Log("androidだよー"); #elif UNITY_IOS Debug.Log("iosだよー"); #else Debug.Log("その他だよー"); #endif

#if UNITY_EDITOR

これがしたかったやつや。。

さっきのはあくまでswitch platformで指定しているiOSの条件にものでした。。

Unity4からUnity5に移行した時に、「Workaround for Non-convex MeshCollider cannot be used as a trigger in Unity 5」というエラー

Unity4のアプリをUnity5に移行したら下記のようなエラーが、


Workaround for Non-convex MeshCollider cannot be used as a trigger in Unity 5

翻訳するとすぐわかるのですが、Unity5から、
MeshColliderにを triggerとして使えないそうです。

とりあえず対処

インスペクタから、のMesh ColliderのかわりにBox Colliderを、
つけて、triggerをチェック!で解決w

Unity、角度を適用させる〜備忘録。

Unityで毎回、角度適用の仕方を忘れてしまうので、メモφ(..)メモメモ

角度を加算する。


transform.Rotate(0,0,addAngle);

指定の角度にする


// 角度を適用 transform.rotation = Quaternion.Euler(0.0f,0.0f,targetAngle);

transform.rotation = targetAngle; みたいな事はできないのでご注意をw

Unityで二次元配列を、stringに変換するコード

2次元配列を、string変換

Unityで通信用に変換したりする時に利用できそうなのでメモ。
下記は、int型の二次元配列の例でっす


// 二次元配列を文字列化 public static string Arr2StrEncode(int[,] intArr){ string str = ""; for (int i = 0; i < intArr.GetLength(0); i++) { for (int j = 0; j < intArr.GetLength(1); j++) { str = str + intArr [i, j].ToString(); str = str + ","; //列の区切り文字 } str = str + "\n"; //行の区切り文字 } return str; }

namespaceで、一元化しておくと便利。
あと、列と、行の区切り文字も変換できるようにしておいた方がいいです。。

Unityで、指定のGameObjectの子の数だけ、カウント&制御

unity5 Hierarchy 子供の数制御

Unityで、指定のGameObjectの子供の数分foreachで、数えて。表示/非表示

ハート等のライフポイントの数だけGameObjectを出す例。

unity5 Hierarchy 子供の数制御

上記のように、Hierarchyに配置したGameObjectの子の数を数えて、表示、非表示など制御。


GameObject arrObj = GameObject.transform.Find ("GameObject/GameObjectHoge").gameObject; int num = 0; foreach(Transform childObj in arrObj.transform){ // ライフポイントの数だけ、GameObjectをアクティブにして表示、指定ポイントより低かったら非アクティブ if (lifeCount > num) { childObj.gameObject.SetActive (true); } else { childObj.gameObject.SetActive (false); } num += 1; }

この例だと、ライフポイントの数だけ、GameObjectをアクティブにして表示、指定ポイントより低かったら非アクティブして、
ライフポイントの表示制御をしています。

間違えやすいポイントとして、 foreachの型指定が、GameObject型ではなく、Transform型にしないとエラーになります。

iOSアプリで、GameCenterを入れても、自分のスコアしか反映されない

gamecenter アイコン

タイトルの通り、iPhoneアプリでleaderboard等、
ランキング機能を使っていたのですが、いくらやっても、
何故か自分のスコアしか反映されない。

いくら施行錯誤しても、だめでした。

sandboxユーザー でやったり、TestFlightユーザー でやったり、
ユーザーを何度も作り直したり、
debugやreleaseが問題なのかなと思ったたり、

一行に1ユーザーの情報だけしか表示されない、、
何が原因なんだー、、半日まっても駄目。。。

Unity5で、「System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.」のエラー

Unity5IAP

Unity5.4を久々開いたら、下記エラーで実行できない。


Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded. at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool) at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in <filename unknown>:0 at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in <filename unknown>:0 at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 at Mono.CSharp.Driver.LoadReferences () [0x00000] in <filename unknown>:0 at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 The following assembly referenced from mygame/Assets/Plugins/UnityPurchasing/Bin/Stores.dll could not be loaded:

色々いじった結果、Unity5のIAP(アプリの課金機能)が影響していたらしく、IAPのをアップデートしたら改善された。。

アップデートは、 Window -> Services に IAP(課金機能)があるので、
それをONに、ImportしなおせばOK!!

Unity5IAP