「魔法少女戦記外伝」DL委託販売中!!

DMM 同人様 Melonbooks DL様 DLsite.com 様
DMM 同人様 Melonbooks DL 様 DLsite.com 様



最新記事ほか

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Unity】Unity 5.1系から Unity 5.2系へのお引越し

最近は同人ゲームの進捗報告ばかりの Empress でございます。

同人ゲームの月例報告でも常々お伝えしていますが、現在製作中のゲームは Unity で製作しております。
製作を着手したころは Unity 5.0.~というバージョンだったのですが、2015年10月現在の最新バージョンは「Unity 5.2.1」となっています。

これまで Unity 5.1.~までの間は、特に大きな問題も無く無事にバージョンアップできていたのですが、「Unity 5.2.0」をきっかけに色々とエラーが発生しましたので、その辺のいざこざを備忘録として記事にしたいと思います。





というわけで、まずは Unity 5.1.~ から Unity 5.2.~ へバージョンアップした直後ですが、このようなエラーが発生しました。

error CS0619: `UnityEngine.UI.BaseVertexEffect' is obsolete: `Use BaseMeshEffect instead'




主にエフェクト関連のクラスで発生していたのですが、大雑把に意訳しますと「BaseVertexEffect から BaseMeshEffect に基底クラスを乗り換えてください」というものです。
ということで早速乗り換えてみると、抽象クラスメンバ(C++でいうところの仮想関数?)が違うため新たなエラーが発生します。

error CS0115: `UiEffect.BlendColor.ModifyVertices(System.Collections.Generic.List<UnityEngine.UIVertex>)' is marked as an override but no suitable method found to override



「では、override を削除しちゃいましょう」としてしまうと、どこからも呼び出されないメソッドが放置されるだけなので、本来機能してほしいエフェクトが発揮されません。
ということで、下記の抽象クラスメンバの置き換えが必要になります。

BaseVertexEffect クラス
 public abstract void ModifyVertices(List<UIVertex> verts)

BaseMeshEffect クラス
 public abstract void ModifyMesh(Mesh mesh)




とはいえ、引数が全く違うものになって元の「List<UIVertex> verts」に該当するものがどれなのかもまったくわからない状態で手が出せず一時はバージョンアップを諦めていたのですが、「Unity 5.2.1p3」の段階で以下のような機能が追加され、「List<UIVertex> verts」に対しての救済措置が行われました。

UI: Added new helper function to VertexHelper to set streams of Vertex in any order.




この「VertexHelper」を使用した移植方法について、下記の公式フォーラムで語られていたようです。

http://forum.unity3d.com/threads/basevertexeffect-change-to-basemesheffect.338455/


このフォーラムで記載されています具体的な変更方法はこのようになります。


public override void ModifyVertices (List<UIVertex> verts)
{
// ~元からある処理~
}


public override void ModifyMesh (Mesh mesh)
{
if (!IsActive())
return;

List<UIVertex> list = new List<UIVertex>();

// 1.Mesh から List<UIVertex> を取得する
using (VertexHelper vertexHelper = new VertexHelper(mesh))
{
vertexHelper.GetUIVertexStream(list);
}

// 2.Unity 5.1.~以前のModifyVertices()を呼び出す
ModifyVertices(list);

// 3.List<UIVertex> の変更を Mesh に反映する
using (VertexHelper vertexHelper2 = new VertexHelper())
{
vertexHelper2.AddUIVertexTriangleStream(list);
vertexHelper2.FillMesh(mesh);
}
}
public void ModifyVertices(List<UIVertex> verts)
{
// ~元からある処理~
}



元からある「ModifyVertices()」からは「override」を削除するだけに留め、新たに追加する「ModifyMesh()」で「VertexHelper」を利用した下記の手順を記述します。

 1.Mesh から List<UIVertex> を取得する
 2.Unity 5.1.~以前のModifyVertices()を呼び出す
 3.List の変更を Mesh に反映する


こうすることにより、過去の ModifyVertices() に余計な手を加えることなくこれまで通りのエフェクトが反映されるようになるようです。


これでプロジェクトが動作するまでのところまで漕ぎ着けたのではないかと思うのですが、いかがでしたでしょうか?

ではでは今回はこの辺で~ノシ
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

Empress

Author:Empress
同人サークル「Atelier Empress」を立ち上げてしまった愚か者です。少しずつでも作品を公開していければと思う次第でございます。

検索フォーム
リンク
カテゴリ
タグ一覧

同人 Unity 進捗 雑記 コミケ C89 小ネタ プログラミング Unity小ネタ 年末 新年 Android 

委託販売
スポンサード リンク
FLOWER KNIGHT GIRL オンラインゲーム 千年戦争アイギス オンラインゲーム
Twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。