ScreenPocket - 画面の隙間

Unityエンジニアの日々の雑記。たまにpython3、DirectX、PhotoshopScript(JavaScript)も触ります

Photoshop CC用Scripting Listenerのダウンロード

地味に迷ったのでリンク紹介だけ

Adobe Photoshop Scripting | Adobe Developer Connection

現状このページの中段くらいにあります。

と思ったら、こっちにもあった。

helpx.adobe.com

後は

qiita.com

この辺とか

オリジナルのスクリプトの作り方 | Dearps

この辺を見ればインストールできるんじゃないかと。

Eclipseから、自作ExtensionBuilderプロジェクトをPhotoshop2015.5で実行する方法

またしてもPhotoshopネタ。
EclipseからPhotoshopのExtensionBuilderの実行に手間取ったのでメモ。

ここに書いておるとおりに、
labs.adobe.com
から、ExtensionBuilder3をダウンロードする。
※zipが落ちてくるけど解凍は不要

  • Eclipseをダウンロードしろ…と書いてあるけれども、その前にJDKをダウンロード(後で必要になるので)

Java SE - Downloads | Oracle Technology Network | Oracle

www.eclipse.org

  • 書いてある通り Help > Install New Software
  • Add... > Archive 選択して先ほどダウンロードしたzipを選択
  • チェックを入れてインストール
  • この辺でEclipse再起動がかかる
  • File > New > Project... 別ウィンドウ開く > Extension Builder 3 > Application Extension Project
  • プロジェクト設定してプロジェクトを作成
  • で、書いてある通りプロジェクトフォルダを右クリックして Run As を選択したのですがエラーダイアログが…

f:id:ScreenPocket:20160918014511p:plain

  • ここで詰まったのですが、結論としては 64bit Windows の場合はパスを入れなおさなければならないっぽい。

forums.adobe.com
f:id:ScreenPocket:20160918020532p:plain

  • 更にエラーが出るのでもういっちょパス合わせ

f:id:ScreenPocket:20160918014935p:plain
CEPServiceBilder4はなかったけど、CEPフォルダで良いっぽいので、それを指定。
赤枠を付け忘れたけど、下のユーザ用フォルダもCEPフォルダに変えておく

コレでとりあえず実行だけはできるようにはなりました…が、まだ自作プロジェクトのエクステンションパネルは出ない模様。

色々調べた結果、マニフェストのバージョンID指定が不足しているようでした。

blogs.adobe.com
を参考に、

  • プロジェクト右クリック→Adobe ExtensionBuilder3 > ManifestEditor
  • ウィンドウが開くのでmanifest.xmlタブを選択し、右クリックXmlEditorを起動

HTML Panel Tips #21: Photoshop CC 2015.5 survival guide | Photoshop, etc.

  • こちらを参考に "14.0" に書き換え(ついでにマニフェストバーションも5.0に)

で、完了!
f:id:ScreenPocket:20160918025058p:plain
ようやくスタートラインです;

Photoshop CC 2015.5 で、自作エクステンションパネルのデバッグを通す方法

またまたUnityとは関係ないですが、初期設定でハマったのでメモ。

主に参考にしたのはこちら
nxpg.net

何はともかくHalloWorldという事でやってみましたが、我が家のPhotoshopCC2015.5ではHalloWorldすら表示できなかった。

そこで見つけたのがこちら。
www.davidebarranca.com

なるほど。PHXSとPHSPを "14.0" にすれば良いのねー。

という事で書き換えて実行してみると、Hallo Worldパネルは読み込めたのですが開こうとするとエラーメッセージが…。

ここでちょっと迷ったのですが、2つ目のリンクを読み進めたところ
> On Windows run Regedit, browse to: HKEY\_CURRENT\_USER/Software/Adobe/CSXS.7
> then add a new PlayerDebugMode key of type String with value 1.
との事。

という事で
regedit起動
 → HKEY_CURRENT_USER/Software/Adpbe/CSXS.7 に文字列キー追加
  → 名前:PlayerDebugMode 値:1

とすることで、めでたくHallo Worldを表示することが出来ました;

外接円1.0の正多角形メッシュを作る

f:id:ScreenPocket:20160817025129p:plain
「あー、メッシュ欲しいなー、けどメタセコやMaya立ち上げて面張るのダルいなー」っていう時に使える関数。
この間の連休で作ったので共有。

public static Mesh GenerateRegularPolygonMeshXY(int vertexCount)
{
	//Meshの作成
	Mesh mesh = new Mesh();

	Vector2[] points = new Vector2[vertexCount];
	float div = 360f / (float)vertexCount;
	for (int i = 0; i < vertexCount; ++i)
	{
		float rad = div * (float)i * Mathf.Deg2Rad;
		points[i] = new Vector2(Mathf.Sin(rad), Mathf.Cos(rad));
	}

	//頂点
	var verticies = new Vector3[points.Length + 1];
	verticies[0] = Vector3.zero;//中心
	for (int i = 0, length= points.Length; i < length; ++i)
	{
		verticies[i+1] = new Vector3(points[i].x, points[i].y, 0f);
	}
	mesh.vertices = verticies;

	//色
	Color[] colors = new Color[points.Length + 1];
	colors[0] = Color.black;//中心
	for (int i = 1, length = colors.Length; i < length; ++i)
	{
		colors[i] = Color.white;
	}
	mesh.colors = colors;

	//面
	var indicies = new int[vertexCount * 3];
	for (int i = 0; i < vertexCount; ++i)
	{
		indicies[i * 3 + 0] = 0;
		indicies[i * 3 + 1] = i + 1;
		indicies[i * 3 + 2] = ((i + 2 >= verticies.Length) ? 1 : i + 2);
	}
	mesh.triangles = indicies;
	return mesh;
}

これで、外接円を1.0としたXY平面上の正多角形Meshを作成できます。
※外接円の半径が1.0なので、4角形を作った場合、1辺の長さが1.0になるわけではないのでご注意!

一応ですが、頂点カラーで中心黒~外周白で色付けもしています。

「pointsいらねぇじゃん」と思うかもしれないけど、
このpointsをPolygonCollider2Dのpointsに入れるとそのままぴったりサイズのコライダが出来るので
良い感じにカスタマイズして下さいな。
※記事頭のスクショは自前でシェーダを書いたものなので、上記の模様がそのまま表示はされないです。

d3dxefffects11.hとEffects11.libがほしい時の対処

※今回Unity関係ないです。
久々に新しいwinPCを入手したので、過去に作った自作DirectXライブラリをビルドしてみようと色々試したのですが、案の定簡単にはビルドが通りませんでした。

中でも、d3dxeffect11.h、Effects.libについては、以前はDIrectXSDKのSamplesフォルダ内のプロジェクトをビルドして作っていたのですが、
最新のVisualStudioCommunity2015を使用しているとビルドが通らなく、結構迷ってしまった;

結論としては、最新のFX11プロジェクトがgithubに上がっているので、そちらを使ってビルドすることで解決!
github.com
DirectXを触るのは3~4年ぶりですが、いやはや、時代は進歩したなぁ…と感慨深い;

BoxCollider2Dのsizeをfloat.MaxValueにすると当たらなくなってしまう

タイトルでオチてしまった。はい、それだけです。

無限遠の地面がほしいと思った時に横着してfloat.MaxValueを入れたところ、
全く当たらなくなってしまって原因究明に時間がかかってしまった。という覚え書き。

OnPostRender()でのスクリーンキャプチャ

f:id:ScreenPocket:20160805015044p:plain

前回、スクリーンエフェクトをかける場合は、
OnRenderImage()で行うと重そう(…と言うより、OnRenderImage()を定義するだけでも重そう)だから、
OnPostRender()でスクリーンキャプチャして画像加工すればいいんじゃない?

と書きましたが、じゃあOnPostRender()でスクリーンキャプチャってどうすれば良いのよ?

という事で、コード書きました。

 

public class OnPostRenderCapture : MonoBehaviour
{
[SerializeField]
private RenderTexture captureImage = null;

void OnPostRender()
{
if (captureImage == null)
{
return;
}

Graphics.Blit(null, captureImage);
}
}

このコンポーネントをカメラにくっつければOK。captureImageにはInspectorでRenderTextureをくっつけておくか、Awake()かStart()でRenderTextureを作ってくっつけるかするのを忘れすに!

…で、多分この画像をイタに貼っつけると、機種依存で上下が反転したりするので

Unity - マニュアル: プラットフォーム別のレンダリングの違い

この辺を見て、表示面用に上下反転させるシェーダを用意すると良いでしょう。

これを使えばわざわざCameraのRenderTargetにRenderTextureを入れなくても良いから楽です。