けいごのなんとか

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

俺俺ScriptTemplate

anchan828/ScriptTemplates · GitHub

ScriptTemplates

スクリプトファイルのテンプレート集

ダウンロードしたtxtファイルを{Unity.app}/Contents/Resources/ScriptTemplatesフォルダに配置します。

作成するテンプレートファイルは以下の構成のファイル名にしなければいけません

{priority}-{メニュー名}-{ファイル名}.{拡張子}.txt

例:

120-C# Editor Script-NewEditor.cs.txt
121-C# EditorWindow Script-NewEditorWindow.cs.txt
122-C# EditorCallbacks Script-New EditorCallbacks.cs.txt

priorityは 95-190 が好ましいです。

PolymerでUnityWebPlayerを表示するやつ作ったよ

2行(Web Componentsをサポートしてないブラウザでは3行)でWebPlayerを埋め込めるように。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>unity-webplayer</title>
    <script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/platform.js"></script>
</head>
<body>

<link rel="import" href="https://dl.dropboxusercontent.com/u/153254465/Unity/unity-webplayer.html"/>
<unity-webplayer width="960" height="600" data="https://dl.dropboxusercontent.com/u/153254465/Unity/Game/GoroGoro/GoroGoro.unity3d"/>

</body>
</html>

実際に動いているページ

WebPlayer

簡単に説明

<script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/platform.js"></script>

Web ComponentsをサポートしてないブラウザでPolymer使うために必須。

<link rel="import" href="https://dl.dropboxusercontent.com/u/153254465/Unity/unity-webplayer.html"/>

polymer-elementをインポートする。

<unity-webplayer width="960" height="600" data="Hoge.unity3d"/>

WebPlayerを埋め込むタグ。幅とかWebPlayerデータとかを属性として設定。dataはurlでもいいよ。

TODO

作ったといってもWebPlayer設定部分はまだ作ってないのでいつかやる。

WebPlayerTemplateも簡単なので作る。

WebPlayerでの公開をかっこ良く - WebPlayerTemplateを使う

みなさん、ユニティちゃんのunitypackageに「WebPlayerTemplates」が含まれているのをご存知ですか?

WebPlayerTemplatesを使用すると下記URLのようなHTMLページがすぐ作れちゃいます。

http://unity3d-jp.github.io/unitychan2d/

f:id:anchan828:20140622132457p:plain

できること

シェアボタン

TwitterFacebookのシェアボタンがWebPlayerの右下に表示されます。

f:id:anchan828:20140622132656p:plain

使い方

WebPlatyerTemplatesAssetsフォルダ直下に置きましょう

f:id:anchan828:20140622132259p:plain

Edit -> Project Settings -> Playerの所にあるWebPlayer Templateで使いたいテンプレートを選択するだけです。

f:id:anchan828:20140622132031p:plain

FacebookでURL共有した時の挙動(OGPの設定)

[注意] この設定は unity3d-jp/webplayer-templates · GitHub のWebPlayerTemplateで行うことが出来ます。ユニティちゃんパッケージに含まれているものでは出来ません(2014/06/22 現在)

何も設定していない時、FacebookでWebPlayerを共有しようとすると残念な見た目になります。

f:id:anchan828:20140622133452p:plain

WebPlayerTemplateを使用するとサムネや説明が追加されて良くなります。

f:id:anchan828:20140622134007p:plain

仕様的な説明

サムネはビルド直前に開いているシーンをサムネとして使用します。 TemplatesEditorScriptフォルダにあるWebPlayerTemplatesPostProcessBuild.csは絶対に削除しないでください。

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;

public class WebPlayerTemplatesPostProcessBuild
{
    [PostProcessBuild]
    public static void OnPostprocessBuild (BuildTarget target, string pathToBuiltProject)
    {
        if (target == BuildTarget.WebPlayer) {
            Application.CaptureScreenshot (pathToBuiltProject + "/thumbnail.png");
        }
    }
}

説明(og:description)の記入はPlayer Settingsから行うことが出来ます。

f:id:anchan828:20140622134400p:plain

サムネと説明はビルドごとに毎回上書きされてしまうので注意してね。

AssetDatabase.StartAssetEditing

この情報はUnity Documentation Tabsでも閲覧することが出来ます

Unity Documentation Tabsで閲覧する場合のURLはこちら(EN)またはこちら(JP)です


まとめて編集&再インポートに使用する

インポート中にダイアログを表示させるのには「EditorUtility.DisplayDialog」を使用しますが複数のアセットの再インポートを行う場合は「AssetDatabase.StartAssetEditing」と「AssetDatabase.StopAssetEditing」を使用します。こうすることでStartAssetEditingとStopAssetEditingに囲まれたインポート処理中はダイアログ表示が自動で行われるようになります。

例としてサウンドのインポート設定を3Dから2Dへ変更します。

using UnityEngine;
using UnityEditor;
 
public class AudioImporterSettings
{
    [MenuItem("Assets/Apply 2D Sound")]
    static void Apply2DSound ()
    {
        var sounds = Selection.GetFiltered (typeof(AudioClip), SelectionMode.DeepAssets);
        
        AssetDatabase.StartAssetEditing ();
        foreach (var sound in sounds) {
            
            var path = AssetDatabase.GetAssetPath (sound);
            
            var audioImporter = AudioImporter.GetAtPath (path) as AudioImporter;
            
            if (audioImporter == false)
                continue;
            
            audioImporter.threeD = false;
 
            AssetDatabase.ImportAsset(path);
            
        }
        AssetDatabase.StopAssetEditing ();
        AssetDatabase.Refresh ();
        
        Debug.Log ("done.");
    }
    
    [MenuItem("Assets/Apply 2D Sound",true)]
    static bool IsFolder ()
    {
        var sounds = Selection.GetFiltered (typeof(AudioClip), SelectionMode.DeepAssets);
        return sounds.Length != 0;
    }
}

動画を再生するにはvideoタグをサポートしたブラウザが必要です。

コンポーネントの順番を変更する「Component Move Up」「Component Move Down」をコードで管理する

何度も「Move Up」とか押しまくるの疲れたので作ってみた

Github - https://github.com/anchan828/ComponentOrderAttribute

コンポーネントの「Move Up」「Move Down」をコードで自動管理

ComponentOrderAttribute

ComponentOrderAttribute(uint order)

指定した順番通りに並び替える。

ただしTransformは必ず一番上でなければいけない。

using UnityEngine;
using System.Collections;

[ComponentOrder(1)]
public class Order1 : MonoBehaviour
{
}

ComponentOrderAttribute(Type type)

指定したTypeの直下に移動する

using UnityEngine;
using System.Collections;

[ComponentOrder(typeof(Rigidbody))]
public class OrderRigidbody : MonoBehaviour
{
}

タグ、レイヤー、シーン、インプット名を定数で扱う

結構前にシーン名とタグ名をタイプセーフに扱いたかったので作ってました。

スクリプトでシーン名を扱うのをタイプセーフにしてみた

http://anchan828.tumblr.com/post/37544410340

Tag名を定数で扱えるように

https://gist.github.com/anchan828/3cf9014a8493ab023925

今だとこちらが最新なのかな

【Unity】シーン名を定数で管理するクラスを生成する拡張機能 - コガネブログ

【Unity】タグ名を定数で管理するクラスを生成する拡張機能 - コガネブログ

他にも定数で管理したいところはあるので前作ったのを整理して公開してみました。

「Layer」「NavMeshLayer」「SortingLayer」「Input」が追加されてます。

anchan828/namecreator · GitHub

使い方

各クラスファイルが作成されるのはUnity起動直後か、メニューからの手動か。

メニューからはAssets/Name Creator/Force Rebuilds で実行できます。

全部生成したくない、いらないって人はここの行( link )をコメントアウトすればいいです。

Name Creator

色んな文字列情報をタイプセーフに使うやつ

TagName

LayerName

NavMeshLayerName

SortingLayerName

InputName

SceneName