UnityAndroidで、下記エラーがSDKやなにかを入れたタイミングでエラーを履くようになった。

確認環境
* Unity2017 2.0f1
* Gradleビルド

こんなエラーや、


Build failure com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Landroid/support/annotation/AnimRes; See the Console for details.

こんなエラーや、


UnityEditor.BuildPlayerWindow+BuildMethodException: 3 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (BuildPlayerOptions options) [0x00207] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:172 at UnityEditor.BuildPlayerWindow.CallBuildMethods (Boolean askForBuildLocation, BuildOptions defaultBuildOptions) [0x00050] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:83 UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

こんなエラーや、


CommandInvokationFailure: Gradle build failed. /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/java -classpath "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/gradle/lib/gradle-launcher-2.14.jar" org.gradle.launcher.GradleMain "assembleRelease" stderr[ FAILURE: Build failed with an exception.

なにか原因かわからないため、解決するためにやったこと。

  • Player Settings の Publishing Setting > Custom Gradle Templateにチェックをいれ、
    カスタムのgradleをいじれる、mainTemplateをさわって、また戻したり。

  • Unityを再起動したり

  • Android SDKのToolsのAPIバージョンをあげたり。
    https://answers.unity.com/questions/1435579/how-can-i-fix-this-error-unityeditorbuildplayerwin.html

  • https://issuetracker.unity3d.com/issues/android-project-with-iap-plugin-fails-to-build-with-gradle-release-mode-only-and-throws-java-dot-io-dot-ioexception

Unityのバージョンを疑ったり

で、何かのタイミングで、エラーがでなくなり、無事APKファイルが履かれました…!

Unity で、Android gradle buildで、Multidexに対応する方法

UnityでAndroidアプリを作る際に、Multidexサポートに対応しないといけない場合に、
最初した際のメモ。

参考情報

https://forum.unity.com/threads/build-using-gradle-and-multidex-support.492117/

https://answers.unity.com/questions/1301593/android-gradle-build-error.html

要点

  • Custom Gradle Templateを使う (Build systemはgrandleに)

検証環境

  • MacOS High Sierra
  • Unity2017 2.0f3(Personal)

Unity NGUIで、ローカライズの設定手順

NGUIで、とりあえず英語と日本語を管理する方法

STEP.1 asset storeからインポートしたNGUIのLocalization.txtをリネームして、移動

これを、

Assets/NGUI/Examples/Resources/Localization.txt → Localization.csv

リネームして、

Assets/Resources/Localization.csv に移動。
※Resourcesフォルダが無い場合は、作ってね。

これをしないと、NGUIアセットをアップデートする度、ローカライズ文言がリセットされてしまいます (´;ω;`)

STEP.2 ローカライズの文言を作る

Assets/Resources/Localization.csv

をテキストエディタ等で開いて、英語,日本語のように記載していきます。

Localization.csvの中身


KEY,English,Japanese Flag,Flag-US,Flag-JA Language,English,Japanese NGUI_STAGE_1_NAME,Hamburger,ハンバーガー NGUI_STAGE_2_NAME,Sandwich,サンドイッチ

※カンマ区切りで、KEY,英語,日本語と記載しています。

STEP.3 Unityを再起動する。

これしないと、なぜか反映されなかったです。
※ビルドしても反映される事もあったり。

STEP.4 UI LabelにLocalizeをアタッチ

※先ほどLocalization.csvにKEYとして記載した、「NGUI_STAGE_1_NAME」を入力すると、英語、日本語が表示されます。

Unityの Color型 は Vector4型 から暗黙的に変換することができます。知らなかった。。

 function の引数にColor型を指定したい場合にどうやっていいかわからなかったけど、、これを使えばいいのね!


void func(Color color = new Vector4()){ }

https://docs.unity3d.com/jp/540/ScriptReference/Color-operator_Color.html

Color は Vector4 から暗黙的に変換することができます。

そうだっだんですね。。w

遅延に遅延を重ねたweb&アプリ開発プロダクトへ参加する際にぶつかる壁

チーム開発

遅延に遅延を重ねたweb&アプリ開発プロダクトへ後から参加する際にぶつかる壁

開発遅延する大きな原因は、

  • 把握できないシステム(他の人が作ったシステム)
  • 既にプロダクトがネガティブな空気になってしまっている
  • 自分のスキル不足&努力不足&工夫不足
  • 実際にコードを書く部分しか工数として把握していない
  • 本当に必要なものが何かわかっていない
  • 使っているベンダーシステムの影響
  • 要件がわかっていない
  • 何がわらないかわからない

既に負債を背負った、プロダクトにアサインする際の注意点

エンジニアが数名の場合は、全体を把握しているもしくは結合部分を知っているエンジニアに相談して動くべし

  • ようするにプログラミング部分の監督さんにお伺いをかけてから動く。監督が複数人いるとチームがうまくいくイメージがないですよね?(プランナーとは別)
     これを怠ると、素晴らしいコードを書いても逆に勝手に仕様決めてしまう事が多く怒られる、もしくは嫉妬される原因なるので注意!
    (僕の経験した先輩はみんな自分から教えてくれるような人が一人もいませんでしたので、ここは自分からお伺いを掛ける必要ある!)

  • 大きいシステムになればなるほど、見えない部分が多くなり後からジョインしたエンジニアは初期エンジニアよりどうしても工数がかかってします。
     仕様把握に99%、開発に1%の工数バランスもザラにある。
     その場合は引き受けるタスクを、しっかり選択する必要がある。

 ポイントは、独立して実装を完結できる機能か、結合しないと完了できない機能を見極める必要がある。
 結合してみないと読めないタスクはどうしても監督エンジニアの実装部分を考慮する事にパワーを割いてしまい、
 本来やった方がいいタスクに注力できない。

  • 監督エンジニアは、後から入ったエンジニアは仕様把握に大量の時間を取られる事を考慮してタスク配分を考えると良好な関係になるかも。
        

Unityなどの「Color(0.1f,1f,1f)」の形式に、変換するツール

UnityC# new Color型変換

Unityなどの「Color(0.1f,1f,1f)」の形式に、変換するツール

個人的に、UnityでHex値を、Color(1f,1f,1f)の型に変換する事が多く、以外にググっても見つけられないので、
webでサクッと変換できるツールを実装しました。

こちら → Hex値->Color(1f,1f,1f)に変換するツール

※ちなみに、RGB型(255,255,255)にも変換できます..

Unity3Dで、3Dのテクスチャ(画像)だけスクロールする

Unity3Dで、3Dオブジェクトのテクスチャ(画像)だけスクロールする

  • ただのPlaneの3Dに貼り付けてある画像をスクロールするだけで前に進んでいるように見せたり。

  • もしくは縦にスクロールさせて滝をつくったり応用できます。

よく使うが忘れてしまうのでメモ

UvScroll.cs

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



public class UvScroll : MonoBehaviour {

    // UVスクロール
    public float scrollSpeedX = 0.5f;
    public float scrollSpeedY = 0.5f;

    void Update()
    {
        var offsetX = Time.time * scrollSpeedX;
        var offsetY = Time.time * scrollSpeedY;
        GetComponent<Renderer> ().material.mainTextureOffset = new Vector2(offsetX, offsetY);
    }
}

確認した環境

  • Unity2017
  • MacOSX El Capitan

Unity + NGUI の 「UI Button」のOnClickイベントをスクリプトで登録する方法

タイトルの通り、UnityのNGUIで、「UI Button」のOnClickイベントをスクリプトで登録する方法について

NGUIの便利なUIButtonですが、
スクリプトでOnClickのイベントを登録した事がなかったですが、
色々しらべたところやり方が分かったのでメモします!

下記がそのソース。

GameManager.cs


// イベントを登録したいボタンのオブジェクト GameObject btnObj; // NGUIのUI Button UIButton btn = btnObj.GetComponent<UIButton>(); // イベントデリゲートを用意 EventDelegate btnEvent = new EventDelegate(); // このクラスのOnClickというメソッド btnEvent.Set(this,"OnClick"); // 同じイベントが複数入ってしまうことを避けるため一旦イベントをクリア btn.onClick.Clear(); // イベントを追加 btn.onClick.Add(btnEvent); // NGUIのオブジェクトに子として追加 NGUITools.AddChild (nguiParentObj, btnObj);

以上です!

また、

btn.onClick.Clear();

は、Unityエディタ上で何回も実行などしていると、
イベントがどんどん増えてしまうので、念のためリセットします。
ここらへんは環境にあわせて適宜調整してください。

ググったんですが、日本語の情報がなかったので、
備忘録のためメモ。

UnityのNGUIで「ArgumentException: Input Axis Mouse ScrollWheel is not setup.〜」と出たら

Unity5.x + NGUIを使っている環境で、別でキーボードの操作ロジックを追加していたら下記のエラーに遭遇!


ArgumentException: Input Axis Mouse ScrollWheel is not setup. To change the input settings use: Edit -> Project Settings -> Input UICamera.<GetAxis>m__24 (System.String axis) (at Assets/NGUI/Scripts/UI/UICamera.cs:172) UICamera.ProcessEvents () (at Assets/NGUI/Scripts/UI/UICamera.cs:1960) UICamera.Update () (at Assets/NGUI/Scripts/UI/UICamera.cs:1907)

というエラーがNGUIのUICameraででたら、

下記Scrollの項目を空にすると消えます!

参考サイト:(http://www.tasharen.com/forum/index.php?topic=8064.0)[http://www.tasharen.com/forum/index.php?topic=8064.0]


ArgumentException: Input Axis Vertical is not setup. To change the input settings use: Edit -> Project Settings -> Input UICamera.<GetAxis>m__24 (System.String axis) (at Assets/NGUI/Scripts/UI/UICamera.cs:172) UICamera.GetDirection (System.String axis) (at Assets/NGUI/Scripts/UI/UICamera.cs:1733) UICamera.ProcessOthers () (at Assets/NGUI/Scripts/UI/UICamera.cs:2352) UICamera.ProcessEvents () (at Assets/NGUI/Scripts/UI/UICamera.cs:1955) UICamera.Update () (at Assets/NGUI/Scripts/UI/UICamera.cs:1907)

の場合も、同様に、
Verticalの項目を空にすると、消えました!