UnityのTextMeshProでusing TMproがうまく読み込まれなかった原因をメモる
今日の授業中にTextMeshProを使ってみようと思いプロジェクトにインポートしてみました。Unityのバージョンは確か2018.2.6だったと思います。あとデータとか学校のPCにしかなくてスクショとかないです。覚えてる限り書いていきます。
TextMeshPro-Textを追加してだいたいの配置を決めてスクリプトから変更できるようにしようと思い、using TMProを追加しようとしました。
候補に出てこず、書いてもエラーで全て消してからパッケージマネージャからインポートし、window>TextMeshProの中から2つインポートしなおしてみました。
スクリプトでusing TMProの候補が出てきてできた!ってこの時は思っていました。
TextMeshProクラスを呼び出そうとして TextM まで打ったときに候補にはTextMeshしかありませんでした。試しにTextMeshProって打つとエラーを吐きました。
ソリューションに含まれていないのかなと思い、ソリューションを確認してみると、スクリプトに警告マークみたいなのがついていて選択してみたら、削除または変更されていますと表示されました。
そこからいろんなサイトを調べてみたけど解決できなくてもう一度インポートしなおしてみました。
するとさっきまで表示されなかったエラーが表示されました。
エラーの内容は vcomp120っていうファイルが邪魔してるよみたいな内容(英語苦手です)だったのでプロジェクト内をvcom120で検索してみました。
TextMeshProの中だけにvcomp120がありました。
vcomp120が本体プロジェクト内にあるのかもって思って後先考えずに削除してみました。
すると候補にTextMeshProが表示されるようになりました。
原因は自分勉強不足なのでイマイチわかっていませんが同じものがあったから駄目だったんだろうと解釈しました。
今日の授業中にここまでやって時間になりましたので文字の変更などは明日の授業中にやっていきたいと思います。
このブログの更新はほんと気まぐれなのですが、Twitterで検索したら同じような状況の方がいたので自分はこんな感じで解決しましたよっていうメモです。
まあまぐれで解決できたようなものなので参考にならないかもしれませんが誰かのお役に立てたならば幸いです
今回はこの辺で終わりにしたいと思います。
追記
この記事を書いた次の日、プロジェクトを起動したらなんと
壊れてました(テヘ
私はもうTextMeshProを使うのをやめた・・・
dxlibの隠し関数 DrawCircleGaugeを使ってhp量に合わせて色が変わる円形体力ゲージの作り方
チーム制作でゲームを作っているときにタイトル通りのものを作ったのでメモを残しておこうかなと
そもそもDrawCircleGaugeの情報があんまりない感じがしたので何かの役に立てばいいかなと
int DrawCircleGauge( int CenterX, int CenterY, double Percent, int GrHandle, double StartPercent = 0.0 ) ;// 円グラフ的な描画を行う( GrHandle の画像の上下左右の端は透過色にしておく必要があります )
非公式のリファレンスにはこのように書かれていますね
引数は順番に 描画する円の中心X,Y 描画する大きさ(0~100%) 画像ハンドル どこから円を描画するか(0が時計でいう12時のところ)
ではまず円形の体力ゲージではなく、長方形の体力ゲージを作ってみましょう
int hpゲージの横幅 = 200, 体力 = 100, 体力の最大値 = 100, HpGauge = 0;
HpGauge = hpゲージの横幅*体力 / 体力の最大値;
DrawBox(50, 50, 50 + HpGauge, 70, GetColor(0, 255, 0), true);
とまあ、こんな感じですかね
日本語変数は説明のために使っているだけです 各自で英語に直してくださいね
今の状態で体力を減らせばゲージも減ると思います
では体力に合わせて色を変えていきましょう
色の変わり方って緑から赤に変わっていくじゃないですか
RGBでみたら緑(0、255、0)赤(255、0,0)
では体力が50%の時ってどうなっているか分かります?
答えは(255,255,0)です
何が言いたいかっていうと、100%~50%までは赤の値を加算していって50%~0%で緑の値を引いていけばいいですよね?
if文を使って書いていきたいところですけどもHSVって知っていますか?色相環っていうやつを回すだけで色が変わるんですね
んで今回はHの値だけいじっていきます(わからない人はHSVで調べてね)
Rで256 Gで256の値があるから適当に両方足してみればなんとかなるだろうって思って書いたのがこちら
int hpゲージの横幅 = 200, 体力 = 100, 体力の最大値 = 100, HpGauge = 0;
float H;
H = 体力*(512.0f / 体力の最大値);
unsigned int R = min(max((384 - H), 0), 0xff);
unsigned int G = min(max((H + 64), 0), 0xff);
unsigned int B = max((H - 384), 0);
HpGauge = hpゲージの横幅*体力 / 体力の最大値;
DrawBox(50, 50, 50 + HpGauge, 70, GetColor(R, G, B), true);
でもこれだと緑はなんか青っぽいし赤になりませんよね
適当にいじってたらそれっぽくなったのがH = 体力*(512.0f / 体力の最大値);をいじったんですよ
H = 体力*(512.0f / 体力の最大値)-100;
100引いてみてください(なんかいい感じになるから
はい、これで長方形のHpゲージは完成ですね(画像でやりたいって人はDrawExtendGraphを使ってみてください)
ここから円形ゲージに移ります
DrawCircleGaugeを使用するにはドーナツみたいな画像を用意する必要があります
こんな感じのやつ
まずは表示してみましょう
DrawCircleGauge(200, 200, 360, HpImage, 0);
とか書けば表示されるはずです
では色が変わるようにしましょう
今回はSetDrawBrightを使います(画面の輝度をRGB指定して変える)
長方形の時に色を変えましたよね?そのRGBを入れてあげましょう
輝度で色を変えますので用意する画像は白にしてくださいね
SetDrawBright(R, G, B);
DrawCircleGauge(200, 200, 360, HpImage, 0);
SetDrawBright(255, 255, 255);
最後に輝度を戻すのを忘れないようにしてください 画面全体の色が変わってしまいます
はい、色の変わる円形のHpゲージが完成したと思います
念のために貼っておきます
int hpゲージの横幅 = 200, 体力 = 100, 体力の最大値 = 100, HpGauge = 0;
float H;
H = 体力*(512.0f / 体力の最大値)-100;
unsigned int R = min(max((384 - H), 0), 0xff);
unsigned int G = min(max((H + 64), 0), 0xff);
unsigned int B = max((H - 384), 0);
HpGauge = hpゲージの横幅*体力 / 体力の最大値;
SetDrawBright(R, G, B);
DrawCircleGauge(200, 200, 360, HpImage, 0);
SetDrawBright(255, 255, 255);
今回はこの辺で終わりにしたいと思います