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

iOS swiftでQRコード認識時に時々クラッシュする際対策!

iphone swiftでQRコード認識時にクラッシュする事がある。その対策

QRコードリーダーアプリで、下記のようにカメラ内のQRコードを読み取る時に、
クラッシュする事が一定確率であった。

エラー内容


fatal error: unexpectedly found nil while unwrapping an Optional value

クラッシュ対象のコード


qrCodeObject = previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject

この部分で、クラッシュする事がある。。

色々調べたら、AVCaptureVideoPreviewLayer内のメソッドでnilが入る事があるらしい。

超参考:http://ja.stackoverflow.com/questions/14968/%E4%B8%8B%E8%A8%98%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E5%8F%82%E8%80%83%E3%81%AB%EF%BC%92%E6%AC%A1%E5%85%83%E3%83%90%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%82%92swift2%E3%81%A7%E6%9B%B8%E3%81%84%E3%81%9F%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C-%E5%AE%9F%E6%A9%9F%E3%83%87%E3%83%90%E3%83%83%E3%82%AF%E6%99%82%E3%81%AB%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E7%94%BB%E9%9D%A2%E3%81%AE-fatal-error-unexpectedly

ボクが対策したコード


if previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) != nil { //nilチェックしてから処理 qrCodeObject = previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject }else { // キャプチャセッション再始動 captureSession.startRunning() }

nilチェックをおこなってら処理する事で解決しました。
また、ただのnilの場合はカメラが動かなくなってしまうので、
キャプチャーセッション等を、再度走らせる事で思い通りの動作になりました。!
参考になれば幸いです!!

android studioで、「Error:Execution failed for task ‘:app:validateSigningRelease’. > Keystore file」というエラーが出たら

android studioで、「Error:Execution failed for task ‘:app:validateSigningRelease’. > Keystore file」と出た時

Android Studio2.2を使っていて、いきなり下記エラーにでくわした。


Error:Execution failed for task ':app:validateSigningRelease'. > Keystore file

既存のプロジェクトをファイルをコピーしてから作ったのがよくなかったのかな、
keystore のファイルも新しく作り直したはずなのに、このエラーが消えない

解決策

  • Make Rebuild」や、「Android Studio」を再起動したらエラーがでなくなりましたわ汗

Unity 指定敵タグ等の合計値を出す

Unityで敵全部のHPをまとめたりする。

Unityで出現中の敵全員のHPを合計で出したりして、進捗を出す事はよくあるケースだと思う。

そんな時のC#スクリプト


int enemyAllHp = 0; GameObject[] targetEnemyObjs; // foreachで検索する、Enemyタグのオブジェクト。 targetEnemyObjs = GameObject.FindGameObjectsWithTag("Enemy"); foreach(GameObject targetEnemyObj in targetEnemyObjs){ // 敵HPの総数。 enemyAllHp += targetEnemyObj.GetComponent<EnemyController>().enemyHp; }

地道にループ