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

けいごのなんとか

Unityユーザーとしてのブログ。ギリギリ路線走ってます。

Unityまとめの使い方(随時更新中)

最新のエントリーを見る

トップページでは、エントリーが最新順に掲載されています。

https://unity-matome.com/

人気のエントリーを見る

「今日」「週間」「月間」「全て」という範囲でランキングとして上位100位までの人気エントリーを探すことができます。

https://unity-matome.com/ranking/today

エントリーを探す

特定のワードからエントリーを探すことができます。

https://unity-matome.com/search

カテゴリごとにエントリーを見る(準備中)

すべてのエントリーはカテゴライズされており、カテゴリ単位でエントリーを見ることができます。

UnityまとめのRSSを取得する

Unityまとめに登録されている最新エントリーをRSSで取得することができます。 普段使っているRSSリーダーやSlackなどでお使いください。

https://unity-matome.com/feed

Unityまとめの Twitter アカウントをフォローする

Unityまとめの最新エントリーをつぶやくTwitterアカウントがあります。

Unityまとめ (@unity_matome) | Twitter

エディター拡張入門のWeb版を無償公開しました

Unity UnityEditor

エディター拡張入門を2015年の夏コミで販売開始してから7ヶ月が過ぎました。

anchan828.github.io

最近の売上について語ると、今までで700部ほど売れました。今は1日に1部は売れています。 売上スピードが鈍化してきている今、必要としている人たちにはある程度手に渡ったのではないかと思います。

このまま、たまに告知して書籍の売上を上げるのもいいですが、私は「これからエディター拡張を触ろうとしている予備軍のみなさん」に向けて情報を公開することにしました。

「エディター拡張で悩んだらこのサイト!」みたいな Googleで検索すると、この本のページがヒットする状態を創りあげたいと思います。

Web版の無償公開によって多くの人たちの役に立てることを願っております。 Unityのバージョンアップは驚異的な速さで行われていきますが、この本は Unity5.3 に対応しているのでまだまだ役に立ちますよ。

あ、でも電子書籍のPDF版は販売を継続しますので、よろしかったら購入お願いします! ほんとうに役に立った時にでも買ってやってください。

anchan828.github.io

ビルド後にHierarchyウィンドウのツリーの開閉がすべてリセットされてしまう問題をどうにかする

ビルド後にHierarchyウィンドウのツリー状態がすべて閉じてしまう問題

以下の仕様によって起こっている問題

  • ヒエラルキーのツリー状の開閉状態はインスタンスIDで管理されている。
  • シーンファイルを開き直すとゲームオブジェクトのインスタンスIDは変更される
  • ビルド時には自動でシーンを開きながらビルドしている。ビルド後にはビルド直前のシーンを開いている状態だが、正確には再度開き直したシーン。

対策

HierarchyWindowHelper っていうの作った。

ヒエラルキーウィンドウからツリー情報を取得して、ツリー状の開閉状態がリセットされたビルド後に再度適用する。

BuildSettingsから行うビルドは制御出来ないので、「BuildPipeline.BuildPlayer」を使ってどうにか対処する。

gist.github.com

UnityEditor上でEditorWindowごとにスクショ (Mac)

EditorWindow UnityEditor Unity

f:id:anchan828:20150211152054p:plain

こんなふうにEditorWindowまるごとスクショを撮る

表示されているEditorWindow全部スクショ

ScreenCapture.Capture<EditorWindow> ();

表示されているHogeWindowスクショ

ScreenCapture.Capture<HogeWindow> ();

なんかEditorWindow.positionがずれてる値持ってる時があるんだけどなんでだろ... (Unity4.6.2)

あれ?Application.LoadLevelAdditiveAsyncで複数シーンの非同時ロードが可能になってる?

Unity Unity5

検証で試したコード

Unity4.5ではasyncOperation2.progressは0を返し続けるけど、Unity5だと0.9を返す。

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    AsyncOperation asyncOperation1;
    AsyncOperation asyncOperation2;

    IEnumerator Start ()
    {
        asyncOperation1 = Application.LoadLevelAdditiveAsync (1);
        asyncOperation1.allowSceneActivation = false;
                
        while (asyncOperation1.progress < 0.9f) {
            yield return new WaitForEndOfFrame ();
        }

        Debug.Log ("done: asyncOperation1");
        asyncOperation2 = Application.LoadLevelAdditiveAsync (2);
        asyncOperation2.allowSceneActivation = false;

        while (asyncOperation2.progress < 0.9f) {
            Debug.Log (asyncOperation2.progress);
            yield return new WaitForEndOfFrame ();
        }

        Debug.Log ("done: asyncOperation2");
    }

    void OnGUI ()
    {
        if (GUILayout.Button ("Additive")) {
            asyncOperation1.allowSceneActivation = true;
            asyncOperation2.allowSceneActivation = true;
        }
    }
    
}

IsDirty

EditorUtility.SetDirtyによってDirtyフラグが立ったかどうかのチェック

internalだけどEditorUtilityクラス内にあった。

static bool IsDirty (int instanceID)
{
    var isDirty = typeof(EditorUtility).GetMethod ("IsDirty", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
    return System.Convert.ToBoolean (isDirty.Invoke (null, new object[]{instanceID}));
}