##Actionという名前の衝突
####「Action」って名前のスクリプトファイルを自分で作っちゃダメ
自分で作らなくてもインポートした他のアセットが同じ名前を使っていると名前が衝突するので変更の必要が出てくる。
エラーメッセージ(コンソールウィンドウを表示させる 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翻訳)
↑「Action.cs」を作る前 (Actionにマウスカーソルを合わせたときの型名に注目)
↑「Action.cs」を作ったあと(「System.Action」の筈なのに自分で作った「Action」と誤解して52行目でエラー)
####同様の事例
↓氷音さんの記事でも同じ問題が発生して回避しています(記事の下の方)。
今度こそ!Live2DとUnityPlaygroundを組み合わせてゲームを作ってみた【前編】
(私がやったことはActionってのがUnityPlaygroundとLive2D SDKとで被ってたので
UnityPlaygroundのActionってお名前をちょっと変えただけです)
####SDK側を修正して対応する方法
↓この問題はSDK側のスクリプトを修正するだけでも対応可能です(なるべくやりたくないですが…)
「Action」って名前を「System.Action」という誤解のない完全名に変更しています。
####どういうことなの?
「イチロー!」って呼んだら「マリナーズのイチロー」と「友人の山田イチロー」を混同したので、「マリナーズのイチロー」って完全名で呼ぶようにして誤解をなくした感じです。「SystemのAction」って呼んであげるようにしました。
####スクリプトの冒頭によく書く「using なんちゃら;」って何?
18行目の**「using System;」**の意味は、いちいち完全名の「マリナーズのイチロー」って呼ぶのメンドクセーから「マリナーズの(Systemの)」って言うのはもう省略しようぜ!って意味です。
便利ですが、知り合いにイチローって名前の別人が居ると、どっちを指しているのかわからなくなります。
なので、面倒ですが堅実に書くなら毎度、毎度、「マリナーズのイチロー」って完全名で呼んであげるのが1番確実です。
(このSDKへの修正で悪影響が出ることは無い筈…たぶん)
####自分のスクリプト側を完全名にして呼ぶ
namesspace 名前空間名 { } でクラスを囲って自分で名前空間を作り、自分が使うときに完全名で呼ぶ…
その解決策でもよい
####過去の自分のやらかし
詰まって放置していた自分のゲームのLive2D SDKのアップデートが上手く行った。Action…などという馬鹿なクラス名を作ってしまったせいで、追加されたCubismUpdateController内のSystem.Actionと衝突、クラス名を変更したらCubismUpdateController.cs内のAction型名まで変更されていた…。
— 栗坂こなべ@C97落選 (@kurisaka_konabe) August 31, 2019
####その他
Live2D SDK側が用意したスクリプト名や名前と衝突すると色々と面倒なことになる。Unityでは同一プロジェクト内に同じ名前のC#スクリプトがあるとエラーになる。インポートしたSDKやアセットと衝突してもダメ。詳細は長くなるので後日余力があれば…