20190506のUnityに関する記事は5件です。

uGUIでボタン選択時の色をスプリクトで変更する。

uGUIは便利。
なんだけれども、ボタンイベント時の色変更(Color Tint)は減算なので、思った色に変更できない事が多い。(デフォルトを黒背景にした時とか特に)
なので、選択時にImageの色を直接変更できるようにした。
イベントシステムのcurrentSelectedGameObjecで現在選択しているオブジェクトを取得できるのがポイント。
this.GetComponent<EventSystem>().currentSelectedGameObjec
と使おう。

下記成果スプリクト。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
using UniRx.Triggers;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class button_select_push : MonoBehaviour
{
    private GameObject old_obj =null;

    // Start is called before the first frame update
    void Start()
    {
        var select_color = this.UpdateAsObservable()
            .Select(_ =>this.GetComponent<EventSystem>().currentSelectedGameObject)
            .Where(x=> x !=old_obj)
            .Subscribe(x => {
                if(old_obj != null)
                {
                    old_obj.GetComponent<Image>().color = new Color(0f, 0f, 0f, 1f);
                }
                x.GetComponent<Image>().color = new Color(0f, 0.9f, 0f, 1f);
                old_obj = x;
            });

    }


}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Shader入門① オブジェクトの色を変えてみる

Shaderとは

陰影処理を行うためのプログラムのこと

Shaderを書く前に

エディタによってはShader用のextensionがあるのでインストールしておくと楽にShaderを書くことができます。
お使いのエディタで調べてみましょう。

Unity上では4種類のShaderを作成することができます。

無題.png

Surface Shader

ライティングやシャドウを簡単にいい感じにしてくれるShader

shader2.png

Unlit Shader

ライティングを反映しないShader
shader3.png

Shader言語

HLSL

High Level Shading Languageの略称
マイクロソフトによって開発されてDirectXで使われてきた。
後述のCg言語と似ている。

Cg言語

NVIDIAによって開発された。
C言語をベースとした文法。

GLSL

OpenGL Shading Languageの略称
OpenGLで使われてきた。
C言語をベースとした文法。

ShaderLab

UnityではShaderLabというHLSL、Cg言語をラップしたようなもので記述される。

Shaderを書いてみる

オブジェクトの色を青くする最低限のShaderを書いてみる。

sample.shader
Shader "Custom/sample1"
{
    SubShader
    {
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows

        struct Input
        {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            o.Albedo = float4(0, 0, 1, 0);
        }
        ENDCG
    }
}

解説

sample.shader
Shader "Custom/hoge/sample1" // Unity上から参照するパスのようなもの。Shader毎のグルーピングに使える
{
    SubShader
    {
        CGPROGRAM // プログラムの内容はCGPROGRAM~ENDCGの中に記述していく
        // #pragmaはどの関数がsurfaceなのかを明示している
        #pragma surface surf Standard

        struct Input
        {
            float2 uv_MainTex;
        };

        // surfaceシェーダー関数を定義している。関数名は自由につけることができる
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            o.Albedo = float4(0, 0, 1, 0); // RGBAでBを1にしているのでオブジェクトは青くなる
        }
        ENDCG
    }
}

尚、Cg言語で扱えるデータ型については下記を参照
https://ja.wikipedia.org/wiki/Cg_(プログラミング言語)#データ型

Properties

Shaderにはプロパティを定義することができ、Unityエディタ上から編集することができるようになります。

sample.shader
Shader "Custom/hoge/sample1"
{
    Properties {
        // カラープロパティを定義。デフォルト値は黒
        _Color("Color", Color) = (0, 0, 0, 0)
    }
    SubShader
    {

        // SubShader内でプロパティをメンバ変数として定義
        fixed4 _Color;

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            o.Albedo = _Color;

        }
        ENDCG
    }
}

Colorというプロパティが設定されていますね。

shader.png

定義できるプロパティは下記を参照
https://docs.unity3d.com/ja/current/Manual/SL-Properties.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

BlenderのモデルをUnityに取り込む方法

手順1
image.png

手順2
image.png
selected Object: エクスポートしたい物体。
Forward:BlenderとUnityの座標系が違うので、BlenderのY方向が前と違って、Unityの前方向はZ。
Up:UnityのUpはY方向。

Apply transform:チェックするこで、global座標系での変換は自動にLocal座標系に応用する。手動で変換するのもOK。

以上で取り込む完了。

手動方法:
Apply transformは実験中の機能なので、不安定になるかもしれません。
手順1 
物体の変換をすべて0にする。
image.png

手順2 edit Modeのしたで全ての面を選択して、変換する。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【メモ】VCIの項目メモ

すぐに忘れるので ?

詳しくはここ https://virtualcast.jp/wiki/doku.php?id=モデル作成:vci作成:vci作成

VCI Object

  • Author:作者名
  • Model Data License / Script License:クリエイティブコモンズのやつ
    • Ohter Licence:その他ライセンス URL入力(任意)
  • Scripts:Size1で入力可能

VCI SubItem

  • Grabbable:☑でつかめる・☐でつかめない
  • Scalable:☑でサイズ変更可・☐でサイズ変更不可
    • バーチャルキャスト上の最小サイズは0.2なので、XYZスケールのどれかが0.2以下のときに☑にするとサイズ変更したときに0.2に最小値が固定されてしまうので注意
  • UniformScaling:☑でXYZ同じ割合で拡縮

collider

  • Is Tigger:当たり判定オンオフ(これをオンにしないとほかをオンにしても当たり判定が発動しない)

Rigibody

  • Use Gravity:重力オンオフ
  • Is Kinematic:物理演算オンオフ(☑で投げると飛んでいくやつ)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WWWクラスが非推奨になっていた件

前置き

  • 標準ブラウザに簡単にアクセスできるApplication.OpenURLとよくセット使っていたWWWが気づいたら非推奨になっていた。
Application.OpenURL("https://ja.wikipedia.org/wiki/" + WWW.EscapeURL(string.Format("hoge{0}", param)));
  • Unity 2018 .3.11.f1

修正

警告メッセージ通りだけど
WWW → UnityEngine.Networking.UnityWebRequest

Application.OpenURL("https://ja.wikipedia.org/wiki/" + UnityEngine.Networking.UnityWebRequest.EscapeURL(string.Format("hoge{0}", param)));

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む