2020年04月17日

Shader Findでエラーが発生してしまう場合

Unity Editor上では問題なく動作しているのに、ビルドしたゲームのShader.Findでエラーとなる場合はAlways Included Shadersを設定するとうまくいく場合があるそうです。

var s = Shader.Find("Custom/Example");
Assert.IsNotNull(s); //error

Always Included Shadersの設定

Edit » Project Settings..

を実行して、GraphicsタブのBuilt-in shader settingsAlways Included Shadersの項目に使いたいShaderを登録すると良いそうです。

リンク

Unity - Scripting API: Shader.Find
https://docs.unity3d.com/ScriptReference/Shader.Find.html
タグ:shader Debug
posted by unity-chan at 14:06 | Script

2020年04月03日

Tiling/Offset値をスクリプトから設定する方法

MaterialのTexture設定にあるTilingOffsetの値をスクリプトから設定したい場合はSetTextureScaleSetTextureOffsetを使って次のような感じでできるそうです。

Material material;

// Tiling
material.SetTextureScale("_MainTex", new Vector2(1.0f, 2.0f));

// Offset
material.SetTextureOffset("_MainTex", new Vector2(0.5f, 0.5f));

設定値を取得したい場合はGetTextureScaleGetTextureOffsetが使えるみたいです。

リンク

Unity - Scripting API: Material.SetTextureScale
https://docs.unity3d.com/ScriptReference/Material.SetTextureScale.html

Unity - Scripting API: Material.SetTextureOffset
https://docs.unity3d.com/ScriptReference/Material.SetTextureOffset.html
タグ:shader
posted by unity-chan at 17:36 | Script

2020年03月19日

Shader内でTiling/Offset値の取得方法

UnityのShaderプログラム内で「Tiling」や「Offset」の値を知りたい場合は{TextureName}_STの値を参照すると良いそうです。

sampler2D _MainTex;
float4 _MainTex_ST;

_MainTex_ST.x; // Tilingのxの値
_MainTex_ST.y; // Tilingのyの値

_MainTex_ST.z; // Offsetのxの値
_MainTex_ST.w; // Offsetのyの値

テクスチャーのサイズを知りたい場合は{TextureName}_TexelSizeの方を参照するそうです。

リンク

Unity - Manual: Accessing shader properties in Cg/HLSL
https://docs.unity3d.com/560/Documentation/Manual/SL-PropertiesInPrograms.html
タグ:shader
posted by unity-chan at 03:27 | Script

2020年01月12日

C#で文字列の分割

C#では、Splitというメソッドを使うことで簡単に文字列の分割ができるそうです。

使い方は次のような感じです。

コンマ「,」かハイフン「-」で分割

using System;

class Example1
{
static public void Main()
{
string str = "one,two-three";
char[] sep = { ',', '-' };

string[] ar = str.Split(sep, StringSplitOptions.None);

foreach(string s in ar) {
Console.WriteLine(s);
}
}
}

実行結果

one
two
three


連続した3つのハイフン「---」で分割

using System;

class Example2
{
static public void Main()
{
string str = "one---two-three";
string[] sep = { "---" };

string[] ar = str.Split(sep, StringSplitOptions.None);

foreach(string s in ar) {
Console.WriteLine(s);
}
}
}

実行結果

one
two-three

他にも正規表現を使って分割したりできるみたいです。

リンク

String.Split Method (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.string.split
タグ:C# String
posted by unity-chan at 16:33 | Script

2020年01月11日

文字列に合わせたUI Textのサイズを取得する方法

UnityのUI.Textで、実際にテキストを表示した際のサイズが知りたい場合はpreferredWidthpreferredHeightを使って調べることができるそうです。

使い方

Text text;

float width = text.preferredWidth;
float height = text.preferredHeight;

テキストの長さに合わせてUIを調整したい場合に便利かなと思います。

リンク

Unity - Scripting API: ILayoutElement
https://docs.unity3d.com/ScriptReference/UI.ILayoutElement.html
posted by unity-chan at 15:52 | Script