★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

Live2DモデルをUnity上でスクリプトを使って透明にする方法

http://forum.live2d.com/discussion/956/unity-上でパーツの透明度の設定
にて、Cubism Render ControllerからOpacityの値を別のスクリプトに持っていけるとのことですが、具体的なやり方がわかりません。
私がやりたいのは、Live2Dモデルをbool関数で透明と非透明で切り替えたいのですが、Live2Dモデルということもあって、メッシュ等のα値をいじることが出来ませんでした。

unity2018.1.6f1
cubismも最新のです
タグ付けされた:

コメント

  • http://docs.live2d.com/cubism-sdk-manual/parameters/
    ここに載っている


    // 顔パーツの透明度を0.5に設定する/
    _model->SetPartOpacity( CubismFramework::GetIdManager()->GetId("PartArmLB001"),0.5f );

    このスクリプトを全身にかければいいと思うのですが、全身に一気にかけられる方法と、c#スクリプトにて、SetPartOpacity(CubismFrameworkの部分に赤線が入り、エラーを吐きます。

    using Live2D.Cubism.Core;
    using Live2D.Cubism.Framework;

    private CubismModel _model;
    void start(){
    _model = this.FindCubismModel();}
    これらは宣言済みなのですが・・・.


    公式ページの説明文が色々省きすぎて分かりづらいので、教えてください
  • 全身に一気に透明度調整を掛ける方法と、エラーの修正方法を教えてほしいです
  • @はんげ さん

    ご覧頂いているマニュアルですが、こちらはNative版のもので、Unity版とは言語などが異なるため、スニペットをそのままコピーペーストするだけでは動作しません。
    Unityについては、Cubism SDK ManualおよびCubism SDK Tutorialのサイドメニューの「Unity」以下の項目を参照してください。

    Live2Dモデルをbool関数で透明と非透明で切り替えたい
    こちらの件ですが、モデル全体の不透明度は、CubismRenderController.Opacityに、0から1までの範囲で値を設定してやることで操作することが出来ます。

    以下は実装例になります。
    コードの一部を以下のように書き換えたコンポーネントを、モデルのルートにアタッチしてください。
        private CubismRenderController _renderController;
        public float Opacity = 1.0f;
    
        private void OnEnable()
        {
            _renderController = GetComponent<CubismRenderController>();
        }
    
        private void LateUpdate()
        {
            _renderController.Opacity = Opacity;
        }

    注意点として、この方法で不透明度を操作した場合、半透明時にメッシュが重なった部分の表示に崩れが発生します。
    もしメッシュが重なった部分も綺麗に表示させたい場合は、UnityのRenderTextureにモデルを表示させ、そちらの不透明度を操作するようにしてください。
    RenderTextureは、Cameraでレンダリングした結果を表示するテクスチャで、これを利用するとモデルを一枚のテクスチャとして扱うことも出来ます。
    RenderTextureの使用方法などにつきましては、Unity公式のドキュメント等を参照してください。
  • 回答有り難うございます。無事にOpacityをプログラム上から変更することはできました。
    しかし、Opacityが0になってもキャラクターが透明になりません。メッシュが重なった部分というわけでもなく全身です。
    常にアニメーターで作成したアニメーションをループ再生していますが、これが問題になったりするんですか?
    たまにアニメーションを切り替える動作をした際に透明化することはあるのですが…。
    Unityのインスペクタ上でのOpacityのスライダーの表示も0となっています。


  • @はんげ さん
    確認したところ、こちらでは現象の再現ができませんでした。
    検証のために、現象が再現する最小のプロジェクトを頂けませんでしょうか?
  • @はんげ さん

    プロジェクトの提供ありがとうございました。

    頂いたデータを確認したところ、各スクリプトの実行順が影響している可能性があります。
    以下のスクリプトをプロジェクトから取り除いて動作を確認していただけますでしょうか?
    Assets/Live2D/Cubism/Editor/Inspecotrs/CubismRenderControllerInspector.cs

    または、CubismRenderControllerInspector内の以下の行をコメントアウトしても同様の確認が可能です。
    controller.Opacity = EditorGUILayout.Slider("Opacity", controller.Opacity, 0f, 1f);


    よろしくお願いいたします。
コメントするにはサインインまたは登録して下さい。