サンマプログラミング

ゲームプログラマーとして主にUnity&UnrealEngineについての記事を掲載させてもらいます。時々DirectXとか・・・どうぞ見てらえれば幸いです。

やっと届いた!そしていよいよ明日はいざ!東京へ!!!

まぁ~いろいろ書けそうな記事はあるのですが、また休憩・・・・・・・A・
そんなことは置いといて( ^^) _旦~~
やっとアマゾンからソードアートオンライン ロストソング(Vita版)&シャイニングレゾナンスのミュージックコレクションが届いた!!!!
f:id:SirasuSanma:20150327223448j:plain

曲ではシャイニングシリーズダントツにいいような気がするゲーム的にもなのでいろいろ臨時収入あったのでかってもうた^^;それにしてもどの曲も実にいい!かなり満足!

ソードアートオンラインはまだあまりできてないけど、前作と段違いの綺麗さ!ファンゲーとしてはこれだけでほぼ満足だったり・・・・
まぁ~明日は東京いくので、バスの中で存分にプレイしよう!
ではネット回線つながったら、更新しやす・A・

Unity5でのRenderSettingsについてのあれこれ

今回はUnity5でのRenderSettingsについて記事にさせていただきました。

 はじめにそもそもUnity4ではあったRenderSettingsが、Unity5ではメニューのEdit部分からなくなっています。なのでRenderSettingsの解説&Editor拡張の復習もかねて新しく独自につくってしまおうと思います。そして覚書のため。

まずはRenderSettingsの解説をしていこうと思います。

fog             : フォグ効果を適用するの判別
fogColor    : フォグカラー設定
fogMode   : フォグ効果の3種類のどれかを選択
                    Linear                             ⇒  始点と終点の間でリニア方式で増加(線形フォグ)

                    Exponential                ⇒  指数的に増加(指数フォグ)

                    ExponentialSquared ⇒  フォグ効果は距離の 2 乗と共に指数的に増加(乗指数フォグ)

fogDensity   : フォグの密度指数(Exponential&ExponentialSquaredときのみ)
fogStartDistance : フォグの開始位置の距離(Linearのときのみ)
fogEndDistance  : フォグの終了位置の距離(Linearのときのみ)
 

ambientMode : 周囲の照明モードの4種類のどれかを選択
                       Skybox ⇒ スカイボックスベースまたはカスタムの周囲の照明

                       Trilight  ⇒ Trilight周囲の照明

                       Flat          ⇒ Flat周囲の照明

                       Custom ⇒ 設定スカイボックスかcustomReflectionのCubemapが適用

ambientLight          : 環境光のカラー設定(Flat&Trilightのときのみ)
ambientSkyColor   :  ambientLightを変更すると適用されるので使用しない
ambientEquatorColor : 横向きオブジェクトに影響を与える際使用(Trilightのみ)
ambientGroundColor : 下向きオブジェクトに影響を与える際使用(Trilightのみ)
ambientIntensity  : 全体の光源色に影響を与える際使用(Custom以外)
ambientProbe   : Skybox &Custom 周囲の照明データ(今回は使用しない)
skybox       : 広大に広がる世界を表示する画面全体周辺のラッパー
 

haloStrength : LightスクリプトのDrawHaloのサイズを変更する際使用
 

DefaultReflectionMode : デフォルト反射モードの2種類のどれかを選択
    Skybox ⇒ 設定されたスカイボックスが反射される

                      Custom ⇒ 設定されたcustomReflectionが反射される

customReflection : Custom 用の鏡面反射キューブマップを設定
 

flareFadeSpeed: Lightスクリプトで設定のFlareのScene変更時フェードスピード
flareStrength : Lightスクリプトで設定のFlareの強さ
とまぁ~長々説明させていただきました。

メニューのWindowでRenderSettingsをクリックでシートがでるので設定できます。

下につくってみたソースを掲載させていただきます。そのままコピーで使用可能です。なにか疑問があればいろいろコメントお願いします。それとLavelの上にマウスカーソルがのると説明文が表示するようにしたいのでやり方があるのであれば教えてほしいです^^;

using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor;

[InitializeOnLoad]
public class CustomRenderSettings : EditorWindow
{
/// <summary>
/// RenderSettingウィンドウ生成
/// </summary>
[MenuItem("Window/RenderSettings")]
static void Init()
{
EditorWindow.GetWindow(typeof(CustomRenderSettings));
}

/// <summary>
/// Fog関連
/// </summary>
bool fog
{
get { return RenderSettings.fog; }
set { RenderSettings.fog = value; }
}
Color fogColor
{
get { return RenderSettings.fogColor; }
set { RenderSettings.fogColor = value; }
}
FogMode fogMode
{
get { return RenderSettings.fogMode; }
set { RenderSettings.fogMode = value; }
}
float fogDensity
{
get { return RenderSettings.fogDensity; }
set { RenderSettings.fogDensity = value; }
}
float fogStartDistance
{
get { return RenderSettings.fogStartDistance; }
set { RenderSettings.fogStartDistance = value; }
}
float fogEndDistance
{
get { return RenderSettings.fogEndDistance; }
set { RenderSettings.fogEndDistance = value; }
}

/// <summary>
/// Ambient&Skybox関連
/// </summary>
AmbientMode ambientMode
{
get { return RenderSettings.ambientMode; }
set { RenderSettings.ambientMode = value; }
}
Color ambientLight
{
get { return RenderSettings.ambientLight; }
set { RenderSettings.ambientLight = value; }
}
//Color ambientSkyColor
//{
// get { return RenderSettings.ambientSkyColor; }
// set { RenderSettings.ambientSkyColor = value; }
//}
Color ambientEquatorColor
{
get { return RenderSettings.ambientEquatorColor; }
set { RenderSettings.ambientEquatorColor = value; }
}
Color ambientGroundColor
{
get { return RenderSettings.ambientGroundColor; }
set { RenderSettings.ambientGroundColor = value; }
}
float ambientIntensity
{
get { return RenderSettings.ambientIntensity; }
set { RenderSettings.ambientIntensity = value; }
}
SphericalHarmonicsL2 ambientProbe
{
get { return RenderSettings.ambientProbe; }
set { RenderSettings.ambientProbe = value; }
}
Material skybox
{
get { return RenderSettings.skybox; }
set { RenderSettings.skybox = value; }
}

/// <summary>
/// Halo関連
/// </summary>
float haloStrength
{
get { return RenderSettings.haloStrength; }
set { RenderSettings.haloStrength = value; }
}

/// <summary>
/// Reflection関連
/// </summary>
DefaultReflectionMode defaultReflectionMode
{
get { return RenderSettings.defaultReflectionMode; }
set { RenderSettings.defaultReflectionMode = value; }
}
Cubemap customReflection
{
get { return RenderSettings.customReflection; }
set { RenderSettings.customReflection = value; }
}

/// <summary>
/// Flare関連
/// </summary>
float flareFadeSpeed
{
get { return RenderSettings.flareFadeSpeed; }
set { RenderSettings.flareFadeSpeed = value; }
}
float flareStrength
{
get { return RenderSettings.flareStrength; }
set { RenderSettings.flareStrength = value; }
}

/// <summary>
/// GUI描画処理
/// </summary>
void OnGUI()
{
// ==================================
// Fog 
// ==================================
GUILayout.Label( "Fog", EditorStyles.boldLabel);
fog = EditorGUILayout.Toggle("Fog", fog);
fogColor = EditorGUILayout.ColorField("Fog Color", fogColor);
fogMode = (FogMode)EditorGUILayout.EnumPopup("Fog Mode", fogMode);
if ( fogMode == FogMode.Linear)
{
fogStartDistance = EditorGUILayout.FloatField("Fog Start Distance", fogStartDistance);
fogEndDistance = EditorGUILayout.FloatField("Fog End Distance", fogEndDistance);
}
else
{
fogDensity = EditorGUILayout.FloatField("Fog Density", fogDensity);
fogDensity = Mathf.Clamp( fogDensity,0.0f, 1.0f);
}

// ==================================
// Ambient & Skybox 
// ==================================
GUILayout.Label( "Ambient & Skybox", EditorStyles.boldLabel);
ambientMode = (AmbientMode)EditorGUILayout.EnumPopup("Ambient Mode", ambientMode);

if (ambientMode != AmbientMode.Custom)
{
if ((ambientMode != AmbientMode.Skybox))
{
ambientLight = EditorGUILayout.ColorField("Ambient Light Color", ambientLight);
}
if (ambientMode == AmbientMode.Trilight)
{
ambientEquatorColor = EditorGUILayout.ColorField("Ambient Equator Color", ambientEquatorColor);
ambientGroundColor = EditorGUILayout.ColorField("Ambient Ground Color", ambientGroundColor);
}
ambientIntensity = EditorGUILayout.FloatField("Ambient Intensity", ambientIntensity);
}
skybox = (Material)EditorGUILayout.ObjectField("Skybox", skybox, typeof(Material), true);

// ==================================
// Halo 
// ==================================
GUILayout.Label("Halo", EditorStyles.boldLabel);
haloStrength = EditorGUILayout.FloatField("Halo Strength", haloStrength);

// ==================================
// Reflection 
// ==================================
GUILayout.Label("Reflection", EditorStyles.boldLabel);
defaultReflectionMode = (DefaultReflectionMode)EditorGUILayout.EnumPopup("Default Reflection Mode", defaultReflectionMode);
if (defaultReflectionMode == DefaultReflectionMode.Custom)
{
customReflection = (Cubemap)EditorGUILayout.ObjectField("Custom Reflection", customReflection, typeof(Cubemap), true);
}

// ==================================
// Flare 
// ==================================
GUILayout.Label("Flare", EditorStyles.boldLabel);
flareFadeSpeed = EditorGUILayout.FloatField("Flare Fade Speed", flareFadeSpeed);
flareStrength = EditorGUILayout.FloatField("Flare Strength", flareStrength);
}
}

四月は君の嘘 最終話おわった!

ちょっと小休止で書かせていただきました。

もう本当にいいアニメでした(T_T)

最後EDが流れて歌詞と音色が本当に切ない・・・・

ああいう作品はこれからも放送していってほしいとつくづく思います。(主に自分への癒しに・A・

神様はじめましたの2期も見てると心があったかくなります。

最終回おめでとう!

UnityのMaterialの拡張メソッドクラスでのColor変更のShader対応についてのあれこれ

今回の拡張メソッドMaterial型のカラーについてのものです。

拡張の理由としては毎回newで宣言し数値を挿入するといったコードを書く手間を省くということもあります。自分がゲームを制作していた過程でMaterial型を拡張する機会があったので、記事にしてみました。

 まずそのオブジェクトのMaterialへアクセスする方法としては

 renderer.materials[参照したい配列番号]( Unity5ではできなかった)

と思っていたのですがUnity5からかわからないですがrendererは使用しないでくださいとでていたので、

 gameObject.GetComponent<Renderer>().materials[参照したい配列番号]

こちらだと大丈夫でした。

参照した配列番号の確認は 

f:id:SirasuSanma:20150323191727p:plain

普段はMaterialsは隠れてるので▼クリックで中が開くのでElementの番号でそのMaterialに参照できます。

 

さぁ~続いてはColorへのアクセスです。内蔵シェーダーへのカラーアクセスです。

public static void SetColorRGB(this Material material, float color_r, float color_g, float color_b)
{
material.color = new Color(color_r, color_g, color_b, material.color.a);
}

Transform型と同じような形でアクセスすることができます。このように拡張すれば

gameObject.GetComponent<Renderer>().materials[0].SetColorRGB(0,0,0)

といった感じでメソッドを使用することができます。

 

そしてこちらが内蔵シェーダー以外&自作シェーダーでのカラー型へのアクセス方法です。

material.SetColor(変数名, r,g,b,a)

これでアクセスすることができます。ぱっと見では下の赤い丸の部分だと思ってしまうのですが、

f:id:SirasuSanma:20150323191740p:plain

Shaderの変数のアクセスなので歯車のアイコンをクリックしEdit Shaderをクリック

f:id:SirasuSanma:20150323191752p:plain

するとエディタか内蔵シェーダーだと下のような画像がでるので確認できます。だいたい _変数名 なので変数名の前に_をつけてればokだと思います。

f:id:SirasuSanma:20150323191859p:plain

そして自分的には上でrendererへ参照が長くなってしまったのでGameObjectも拡張したほうがいいと思いました。そして現在使用している拡張クラスのソースです。

/// <summary>
/// Material 型の拡張メソッドを管理するクラス
/// </summary>
public static class MaterialExtensions
{
/// <summary>
/// カラーRGBA値を設定します
/// </summary>
/// <param name="material"></param>
/// <param name="color_r">カラーR値</param>
/// <param name="color_g">カラーG値</param>
/// <param name="color_b">カラーB値</param>
/// <param name="color_a">アルファ値</param>
public static void SetColor(this Material material, float color_r, float color_g, float color_b, float color_a)
{
material.color = new Color(color_r, color_g, color_b, color_a);
}

/// <summary>
/// カラーRGB値を設定します
/// </summary>
/// <param name="material"></param>
/// <param name="color_r">カラーR値</param>
/// <param name="color_g">カラーG値</param>
/// <param name="color_b">カラーB値</param>
public static void SetColorRGB(this Material material, float color_r, float color_g, float color_b)
{
material.color = new Color(color_r, color_g, color_b, material.color.a);
}

/// <summary>
/// カラーR値を設定します
/// </summary>
/// <param name="material"></param>
/// <param name="color_r">カラーR値</param>
public static void SetColorR(this Material material, float color_r)
{
material.color = new Color(color_r, material.color.g, material.color.b, material.color.a);
}

/// <summary>
/// カラーG値を設定します
/// </summary>
/// <param name="material"></param>
/// <param name="color_g">カラーG値</param>
public static void SetColorG(this Material material, float color_g)
{
material.color = new Color(material.color.r, color_g, material.color.b, material.color.a);
}

/// <summary>
/// カラーB値を設定します
/// </summary>
/// <param name="material"></param>
/// <param name="color_b">カラーB値</param>
public static void SetColorB(this Material material, float color_b)
{
material.color = new Color(material.color.r, material.color.g, color_b, material.color.a);
}

/// <summary>
/// アルファ値を設定します
/// </summary>
/// <param name="material"></param>
/// <param name="alpha">アルファ値</param>
public static void SetColorA(this Material material, float alpha)
{
material.color = new Color(material.color.r, material.color.g, material.color.b, alpha);
}

/// <summary>
/// アルファ値に数値加算
/// </summary>
/// <param name="material"></param>
/// <param name="alpha_value">カラーA値加算値</param>
public static void AddColorA(this Material material, float alpha_value)
{
material.color = new Color(material.color.r, material.color.g, material.color.b, material.color.a + alpha_value);
}

/// <summary>
/// Shader対応のMaterialColorのR値変更関数
/// </summary>
/// <param name="material">自分自身のマテリアル</param>
/// <param name="_InputName">シェーダー変数名</param>
/// <param name="_Red">Red値</param>
public static void SetShaderColorR(this Material material, string _InputName, float _Red)
{
material.SetColor(_InputName, new Color(_Red, material.GetColor(_InputName).g
, material.GetColor(_InputName).b, material.GetColor(_InputName).a));
}

/// <summary>
/// Shader対応のMaterialColorのG値変更関数
/// </summary>
/// <param name="material">自分自身のマテリアル</param>
/// <param name="_InputName">シェーダー変数名</param>
/// <param name="_Green">Green値</param>
public static void SetShaderColorG(this Material material, string _InputName, float _Green)
{
material.SetColor(_InputName, new Color(material.GetColor(_InputName).r, _Green
, material.GetColor(_InputName).b, material.GetColor(_InputName).a));
}

/// <summary>
/// Shader対応のMaterialColorのB値変更関数
/// </summary>
/// <param name="material">自分自身のマテリアル</param>
/// <param name="_InputName">シェーダー変数名</param>
/// <param name="_Blue">Blue値</param>
public static void SetShaderColorB(this Material material, string _InputName, float _Blue)
{
material.SetColor(_InputName, new Color(material.GetColor(_InputName).r, material.GetColor(_InputName).g
, _Blue, material.GetColor(_InputName).a));
}

/// <summary>
/// Shader対応のMaterialColorのAlpha値変更関数
/// </summary>
/// <param name="material">変更したいマテリアル</param>
/// <param name="_InputName">シェーダー変数名</param>
/// <param name="_Alpha">Alpha値</param>
public static void SetShaderColorA(this Material material, string _InputName, float _Alpha)
{
material.SetColor(_InputName, new Color(material.GetColor(_InputName).r, material.GetColor(_InputName).g
, material.GetColor(_InputName).b, _Alpha));
}
}

 

UnityのTransform拡張メソッドクラスについてのあれこれ

 しょっぱなの記事ということでいまさらですが、UnityのTransform型を拡張することによってコードを見やすくしようと思います。

 まず拡張メソッドクラスというのは簡単にいってしまえば、Unityの搭載されている型宣言に自作したメソッドを追加できる用クラスを追加で作るものです。

これをすることによって毎回書くコードの短縮をすることができるので作業がはかどります。

 拡張のしかたとしてはクラス宣言はclassの前にstaticとclass名のあとにExtensionsをつける。メソッドの宣言はstaticをつけ、引数の部分にthis 型名を宣言する。

もちろんpublic宣言でお願いします。型によってできないものもあるので注意です。

 

(例)クラス ⇒ public static class 型名Extensions

 メソッド ⇒ public static void メソッド名(this 型名 変数名, 宣言したい引数)

 

 今回はTransformの拡張なので検証した結果では、どうもX軸の回転角度設定だけUnityのバグみたいでおかしくなります。なので各Update以外は使用してもいいですが,各Updateだけバグります。なのでコメントで記載しています。回転の加算は別の方法でやっているので大丈夫だと思います。あと豆知識ですが、/を3回打つと下のようなフォーマットが出現します。

 

下に自分が使っているクラスを掲載します。参考になれば幸いです。あとX軸の回転角度設定の部分ついてはなにか解決策があればコメントしてもらえれば大変助かります。なにぶん読みづらいかもしれませんがすいません(> <)

using UnityEngine;

/// <summary>
/// Transform型の拡張メソッドクラス
/// </summary>
public static class TransformExtensions
{
/// <summary>
/// X,Y,Z軸座標設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸座標</param>
/// <param name="y">Y軸座標</param>
/// <param name="z">Z軸座標</param>
public static void SetPosition(this Transform transform, float x, float y, float z)
{
transform.position = new Vector3(x, y, z);
}

/// <summary>
/// X軸座標を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸座標</param>
public static void SetPositionX(this Transform transform, float x)
{
transform.position = new Vector3(x, transform.position.y, transform.position.z);
}

/// <summary>
/// Y軸座標を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸座標</param>
public static void SetPositionY(this Transform transform, float y)
{
transform.position = new Vector3(transform.position.x, y, transform.position.z);
}

/// <summary>
/// Z軸座標を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸座標</param>
public static void SetPositionZ(this Transform transform, float z)
{
transform.position = new Vector3(transform.position.x, transform.position.y, z);
}

/// <summary>
/// ローカルXYZ軸座標を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸座標</param>
/// <param name="y">Y軸座標</param>
/// <param name="z">Z軸座標</param>
public static void SetLocalPosition(this Transform transform, float x, float y, float z)
{
transform.localPosition = new Vector3(x, y, z);
}

/// <summary>
/// ローカルX軸座標を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸座標</param>
public static void SetLocalPositionX(this Transform transform, float x)
{
transform.localPosition = new Vector3(x, transform.position.y, transform.position.z);
}

/// <summary>
/// ローカルY軸座標を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸座標</param>
public static void SetLocalPositionY(this Transform transform, float y)
{
transform.localPosition = new Vector3(transform.localPosition.x, y, transform.localPosition.z);
}

/// <summary>
/// ローカルZ軸座標を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸座標</param>
public static void SetLocalPositionZ(this Transform transform, float z)
{
transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, z);
}

/// <summary>
/// XYZ軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸加算数値</param>
/// <param name="y">Y軸加算数値</param>
/// <param name="z">Z軸加算数値</param>
public static void AddPosition(this Transform transform, float x, float y, float z)
{
transform.SetPositionX(x + transform.position.x);
transform.SetPositionY(y + transform.position.y);
transform.SetPositionZ(z + transform.position.z);
}

/// <summary>
/// X軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸加算数値</param>
public static void AddPositionX(this Transform transform, float x)
{
transform.SetPositionX(x + transform.position.x);
}

/// <summary>
/// Y軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸加算数値</param>
public static void AddPositionY(this Transform transform, float y)
{
transform.SetPositionY(y + transform.position.y);
}

/// <summary>
/// Z軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸加算数値</param>
public static void AddPositionZ(this Transform transform, float z)
{
transform.SetPositionZ(z + transform.position.z);
}

/// <summary>
/// ローカルXYZ軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸加算数値</param>
/// <param name="y">Y軸加算数値</param>
/// <param name="z">Z軸加算数値</param>
public static void AddLocalPosition(this Transform transform, float x, float y, float z)
{
transform.SetLocalPositionX(x + transform.localPosition.x);
transform.SetLocalPositionY(y + transform.localPosition.y);
transform.SetLocalPositionZ(z + transform.localPosition.z);
}

/// <summary>
/// ローカルX軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸加算数値</param>
public static void AddLocalPositionX(this Transform transform, float x)
{
transform.SetLocalPositionX(x + transform.localPosition.x);
}

/// <summary>
/// ローカルY軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸加算数値</param>
public static void AddLocalPositionY(this Transform transform, float y)
{
transform.SetLocalPositionY(y + transform.localPosition.y);
}

/// <summary>
/// ローカルZ軸座標に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸加算数値</param>
public static void AddLocalPositionZ(this Transform transform, float z)
{
transform.SetLocalPositionZ(z + transform.localPosition.z);
}

/// <summary>
/// XYZ軸方向の回転角を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸方向回転角</param>
/// <param name="y">Y軸方向回転角</param>
/// <param name="z">Z軸方向回転角</param>
public static void SetRotation(this Transform transform, float x, float y, float z)
{
transform.rotation = Quaternion.Euler(x, y, z);
}

/// <summary>
/// X軸方向の回転角を設定(Updateでは使用しないこと)
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸方向回転角</param>
public static void SetRotationX(this Transform transform, float x)
{
transform.rotation = Quaternion.Euler(x, transform.eulerAngles.y, transform.eulerAngles.z);
}

/// <summary>
/// Y軸方向の回転角を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸方向回転角</param>
public static void SetRotationY(this Transform transform, float y)
{
transform.rotation = Quaternion.Euler(transform.eulerAngles.x, y, transform.eulerAngles.z);
}

/// <summary>
/// Z軸方向の回転角を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸方向回転角</param>
public static void SetRotationZ(this Transform transform, float z)
{
transform.rotation = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, z);
}

/// <summary>
/// ローカルのXYZ軸方向の回転角を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">ローカルのX軸方向回転角</param>
/// <param name="y">ローカルのY軸方向回転角</param>
/// <param name="z">ローカルのZ軸方向回転角</param>
public static void SetLocalRotation(this Transform transform, float x, float y, float z)
{
transform.localRotation = Quaternion.Euler(x, y, z);
}

/// <summary>
/// ローカルのX軸方向の回転角を設定(Updateでは使用しないこと)
/// </summary>
/// <param name="transform"></param>
/// <param name="x">ローカル系のX軸方向回転角</param>
public static void SetLocalRotationX(this Transform transform, float x)
{
transform.localRotation = Quaternion.Euler(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
}

/// <summary>
/// ローカルのY軸方向の回転角を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="y">ローカルのY軸方向回転角</param>
public static void SetLocalRotationY(this Transform transform, float y)
{
transform.localRotation = Quaternion.Euler(transform.eulerAngles.x, y, transform.eulerAngles.z);
}

/// <summary>
/// ローカルのZ軸方向の回転角を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="z">ローカルのZ軸方向回転角</param>
public static void SetLocalRotationZ(this Transform transform, float z)
{
transform.localRotation = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, z);
}

/// <summary>
/// XYZ軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸方向加算数値</param>
/// <param name="y">Y軸方向加算数値</param>
/// <param name="z">Z軸方向加算数値</param>
public static void AddRotation(this Transform transform, float x, float y, float z)
{
transform.Rotate(x, y, z, Space.World);
}

/// <summary>
/// X軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸方向加算数値</param>
public static void AddRotationX(this Transform transform, float x)
{
transform.Rotate(x, 0, 0, Space.World);
}

/// <summary>
/// Y軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸方向加算数値</param>
public static void AddRotationY(this Transform transform, float y)
{
transform.Rotate( 0, y, 0, Space.World);
}

/// <summary>
/// Z軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸方向加算数値</param>
public static void AddRotationZ(this Transform transform, float z)
{
transform.Rotate(0, 0, z, Space.World);
}

/// <summary>
/// ローカルのXYZ軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">ローカルのX軸方向加算数値</param>
/// <param name="y">ローカルのY軸方向加算数値</param>
/// <param name="z">ローカルのZ軸方向加算数値</param>
public static void AddLocalRotation(this Transform transform, float x, float y, float z)
{
transform.Rotate(x, y, z, Space.Self);
}

/// <summary>
/// ローカルのX軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">ローカルのX軸方向加算数値</param>
public static void AddLocalRotationX(this Transform transform, float x)
{
transform.Rotate(x, 0, 0, Space.Self);
}

/// <summary>
/// ローカルのY軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="y">ローカルのY軸方向加算数値</param>
public static void AddLocalRotationY(this Transform transform, float y)
{
transform.Rotate(0, y, 0, Space.Self);
}

/// <summary>
/// ローカルのZ軸方向の回転角に数値加算
/// </summary>
/// <param name="transform"></param>
/// <param name="z">ローカルのZ軸方向加算数値</param>
public static void AddLocalRotationZ(this Transform transform, float z)
{
transform.Rotate(0, 0, z, Space.Self);
}


/// <summary>
/// ローカル座標系のXYZ軸方向の拡縮値を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸拡縮値</param>
/// <param name="y">Y軸拡縮値</param>
/// <param name="z">Z軸拡縮値</param>
public static void SetLocalScale(this Transform transform, float x, float y, float z)
{
transform.localScale = new Vector3(x, y, z);
}

/// <summary>
/// ローカル座標系のX軸方向の拡縮値を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸拡縮値</param>
public static void SetLocalScaleX(this Transform transform, float x)
{
transform.localScale = new Vector3(x, transform.localScale.y, transform.localScale.z);
}

/// <summary>
/// ローカル座標系のY軸方向の拡縮値を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸拡縮値</param>
public static void SetLocalScaleY(this Transform transform, float y)
{
transform.localScale = new Vector3(transform.localScale.x, y, transform.localScale.z);
}

/// <summary>
/// ローカル座標系のZ軸方向の拡縮値を設定
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸拡縮値</param>
public static void SetLocalScaleZ(this Transform transform, float z)
{
transform.localScale = new Vector3(transform.localScale.x, transform.localScale.y, z);
}

/// <summary>
/// ローカル座標系のXYZ軸方向の拡縮値に加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸拡縮加算値</param>
/// <param name="y">Y軸拡縮加算値</param>
/// <param name="z">Z軸拡縮加算値</param>
public static void AddLocalScale(this Transform transform, float x, float y, float z)
{
transform.SetLocalScaleX(transform.localScale.x + x);
transform.SetLocalScaleY(transform.localScale.y + y);
transform.SetLocalScaleZ(transform.localScale.z + z);
}

/// <summary>
/// ローカル座標系のX軸方向の拡縮値に加算
/// </summary>
/// <param name="transform"></param>
/// <param name="x">X軸拡縮加算値</param>
public static void AddLocalScaleX(this Transform transform, float x)
{
transform.SetLocalScaleX(transform.localScale.x + x);
}

/// <summary>
/// ローカル座標系のY軸方向の拡縮値に加算
/// </summary>
/// <param name="transform"></param>
/// <param name="y">Y軸拡縮加算値</param>
public static void AddLocalScaleY(this Transform transform, float y)
{
transform.SetLocalScaleY(transform.localScale.y + y);
}

/// <summary>
/// ローカル座標系のZ軸方向の拡縮値に加算
/// </summary>
/// <param name="transform"></param>
/// <param name="z">Z軸拡縮加算値</param>
public static void AddLocalScaleZ(this Transform transform, float z)
{
transform.SetLocalScaleZ(transform.localScale.z + z);
}
}

ブログ初めてみました!

はじめましてサンマと申します・A・

基本はゲーム関連のプログラミングの記事を掲載していこうと思います。

Unity、UnrealEngineについての記事が多くなると思います。時々DirectXに関する記事も書くかもしれません。

いろいろ初心者ではありますが見てもらえれば幸いです。