おれ、Unity2Dでゲーム作るんだ。

Unity2Dをメインに、覚書などを記事にしていきます。

Unity - 出来ていたAndroidビルドが出来なくなったときに修正した場所(2箇所)

f:id:xev:20170712152423p:plain

ついこの間まで出来ていたAndroidのビルドが出来なくなった!?

で、原因が2つあったので

AndroidStudioのバージョンアップをしてSDK toolsの構造が変わった

AndroidStudioのバージョンアップ(2.3.3)を行ったところ、 SDKのパス正しく教えろってメッセージが出てくるように。。。

Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details. See the Console for details.

これは、AndroidStudioのバージョンアップでSDK toolsの構造が変わったのが原因みたい。 Android 25.3系アップデートっぽいので、

Android SDK Tools Revision 25.3.0 (Feb 2017) - Android Studio Project Site

構造が変わる直前のバージョン(Android SDK Tools 25.2.5)をダウンロードして解凍。

これを更新されてしまった下記フォルダと、差し替える。

C:\Users\<ユーザー名>\AppData\Local\Android\Sdk\tools

f:id:xev:20170712152551p:plain

ひとまず、これで1ステップ進む。

JavaのSDKのバージョンが古い

以下の様なメッセージを吐いてエラー

f:id:xev:20170712152811p:plain

Exception in thread “main” java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0

これは、原因は JAVAのSDKを1.7系を使っていたのが原因っぽく、UnityのPreferenceでSDKを1.8系にしてあげるとエラーが消えました。

f:id:xev:20170712152912p:plain

f:id:xev:20170712152849p:plain

以上2点、 アップデートしていたら新しくしすぎて、Unityが追いついてなかった。 めんどくさいので古いのを使い続けていたら、Unityに置いて行かれた。 バージョンアップも慎重にですね。

Collider2Dだけで重なりを判定する(Collider2D.OverlapCollider)

f:id:xev:20170624114428p:plain
画像が重なっているか確認したい事ってありますよね。

でもって、その時のために、

わざわざ重なってるかどうか知りたいだけなのにRigidbodyなんか使いたくない

時ってありますよね。


調べても、

2D collision detection without rigid body? - Unity Answers

コライダーはリジッドボデイにくっつけて、トリガーでとるっつっでんだろ。と答えられており、
諦めかけおりました。


ところが、とうとうUnity5.6で、

Collider2D.OverlapCollider
に出会いました。

Unity - Scripting API: Collider2D.OverlapCollider

ということで、

準備

  • 重なりを確認したいオブジェクトにスプライトとCollide2D系を突っ込んでおく
  • 適当にアタッチするスクリプトを作成してアタッチ
  • 格納バッファ(Collider2D)を準備
  • Collider2DからOverlapColliderメソッドを実行

上手くいけばこんな感じでチェックできます。

f:id:xev:20170624113600p:plain


参考にコード私はこんなコードで確認しました。

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

public class OverlapCheck : MonoBehaviour
{

    Collider2D col2D;
    Collider2D[] result;

    void Awake()
    {
        col2D = GetComponent<Collider2D>();
        result = new Collider2D[10];
    }

    void OnEnable()
    {
        OverlapCount();
    }

    // Use this for initialization
    void Start()
    {

    }

    void OverlapCount()
    {
        int count = col2D.OverlapCollider(new ContactFilter2D(), result);
        Debug.Log("Overlap=" + count);
        foreach (var r in result)
        {
            if (r != null) Debug.Log(r.name);
        }
    }

}

以上、なるべく最新版で開発できるということはいいこと、
とくに、2Dは充実してきているので、なるべくUnityはアップデートしていきたいといことでした。