LoginSignup
0
1

More than 3 years have passed since last update.

Live2D Cubism SDKのActionという名前でハマった話、名前空間と衝突

Last updated at Posted at 2019-12-07

Actionという名前の衝突

「Action」って名前のスクリプトファイルを自分で作っちゃダメ

image.png
自分で作らなくてもインポートした他のアセットが同じ名前を使っていると名前が衝突するので変更の必要が出てくる。

image.png

エラーメッセージ(コンソールウィンドウを表示させる Ctrl+Shif+C 必要があります):

Assets\Live2D\Cubism\Framework\CubismUpdateController.cs(52,39): error CS1503: Argument 1: cannot convert from 'Action' to 'System.Delegate'

CubismUpdateController.csでエラー(52行目,39文字目)
引数1:「Action」から「System.Delegate」に変換できません(Google翻訳)

image.png
↑「Action.cs」を作る前 (Actionにマウスカーソルを合わせたときの型名に注目)

image.png

↑「Action.cs」を作ったあと(「System.Action」の筈なのに自分で作った「Action」と誤解して52行目でエラー)

同様の事例

↓氷音さんの記事でも同じ問題が発生して回避しています(記事の下の方)。
今度こそ!Live2DとUnityPlaygroundを組み合わせてゲームを作ってみた【前編】

(私がやったことはActionってのがUnityPlaygroundとLive2D SDKとで被ってたので
UnityPlaygroundのActionってお名前をちょっと変えただけです)

SDK側を修正して対応する方法

↓この問題はSDK側のスクリプトを修正するだけでも対応可能です(なるべくやりたくないですが…)
image.png

「Action」って名前を「System.Action」という誤解のない完全名に変更しています。

どういうことなの?

「イチロー!」って呼んだら「マリナーズのイチロー」と「友人の山田イチロー」を混同したので、「マリナーズのイチロー」って完全名で呼ぶようにして誤解をなくした感じです。「SystemのAction」って呼んであげるようにしました。

スクリプトの冒頭によく書く「using なんちゃら;」って何?

18行目の「using System;」の意味は、いちいち完全名の「マリナーズのイチロー」って呼ぶのメンドクセーから「マリナーズの(Systemの)」って言うのはもう省略しようぜ!って意味です。

便利ですが、知り合いにイチローって名前の別人が居ると、どっちを指しているのかわからなくなります。
なので、面倒ですが堅実に書くなら毎度、毎度、「マリナーズのイチロー」って完全名で呼んであげるのが1番確実です。

(このSDKへの修正で悪影響が出ることは無い筈…たぶん)

自分のスクリプト側を完全名にして呼ぶ

namesspace 名前空間名 { } でクラスを囲って自分で名前空間を作り、自分が使うときに完全名で呼ぶ…
その解決策でもよい

過去の自分のやらかし

その他

Live2D SDK側が用意したスクリプト名や名前と衝突すると色々と面倒なことになる。Unityでは同一プロジェクト内に同じ名前のC#スクリプトがあるとエラーになる。インポートしたSDKやアセットと衝突してもダメ。詳細は長くなるので後日余力があれば…

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1