FC2ブログ
10 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 12

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【ハルシオンブログ】TMPでうまくアウトラインができないときに気を付けるところ。 

こんにちは。坂内です。
次の日曜日はもうデジゲー博2019ですね!
ブースの皆さん準備はもうできましたか?
毎度のことながら、遊びにいきますね!

さてUnityのお話。

最近TMP(TextMeshPro)をで文字を作っていて、アウトラインにしようとしたらこんな感じになったんですよね。



えぇぇ?なにこれ?アウトラインじゃなじゃないか!!

ってとき。


大体、フォントを作るときに何か間違えている。




ここのサイズおかしくないですか?(え?普通そんなことない?

あったんですよ。ここではまったことが・・・・


ここのSampling Point Sizeや、Paddingのサイズを正しく(フォントによって違う?)設定し、RenderModeをSDF16にすると、なかなか綺麗な感じでアウトラインつきのフォントができます。

今回はこんな感じの設定


文字がぼやけているほうが、きれいにアウトラインとかつくようです。



で、先ほどと同じフォントだけど、こんな感じになりました。




TMPをちゃんと使いこなすと色々といい感じのフォントができそうですね!

とりあえず今日はここまで!


では、あでゅ~ノシ

スポンサーサイト



Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】実行中にInspectorで変えた値にしたければCopyComponentしておこうね 

こんにちは。
大坂です。

今週も小ネタですね。
実行しながら値を調整したときにそのまま停止してしまうと値が戻ってしまいますが、
CopyComponentしておいて、停止後にPasteComponentValuesをしてあげたら反映できるねって話です。



では今週もこれにてノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Unity(C#)でカプセル化ってやってます?プロパティをprivateにすることで、外から直接触れないってやつなんだけど 

こんにちは。坂内っす。

11月17日はデジゲー博の日です。
デジゲーの後の飲み会のATNDつくったらまた77人集まりました。
奇遇ですね。2年前のデジゲーの飲み会のATNDも77人なんですよね・・・・
今後も初めからMAX77人にしてもいいんでないかい?
問題は無言ドタキャンで逃げる人いないといいんですが・・・・・

あ、無言ドタキャンで逃げた人がいるたびに、全員から100円づつ徴収するシステムいいんでないかい?
みんなで被ることで、みんなから狙われるってシステム。これいいね。
オーバーした分は俺が頂きますが。


さて、Unityのお話。

プロパティを使うときにこんな感じでgetter/setterを書いてたりしますよね。


using UnityEngine;

public class Script20191105 : MonoBehaviour
{
private string _userName;
private int _age;
private string _address;

public string userName {
get
{
return _userName;
}
set
{
_userName = value;
}
}
public int age {
get
{
return _age;
}
set
{
age = value;
}
}
public string address {
get
{
return _address;
}
set
{
_address = value;
}
}
}



これって、こんな感じでも書けるんですよね。


using UnityEngine;

public class Script20191105 : MonoBehaviour
{
private string _userName;
private int _age;
private string _address;

public string userName { get; set; }
public int age { get; set; }
public string address { get; set; }
}



ただ、返却する際や、取得する際に処理を入れたい場合は、上の方法じゃないとだめっすね。


public int age {
get
{
if(_age > 10) {
return 10;
} else {
return _age;
}
}
set
{
_age = value;
}
}


こんな感じで、処理をいれてからの返却とかもできます。

あんまり個人開発しているとgetter/setterって使わないですかね?
カプセル化っていうんですけどね。
大本の変数はPrivateにしておいて、直接触れないようにするってやつです。

気が向いたら使ってみてください。

では、あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 1   

【ハルシオンブログ】Getterしかないプロパティって1行で書けるのね。 

こんにちは。
大坂です。

今週は月曜日からPCがつかなくなって、
電源ユニットが原因っぽかったので買いに行って交換したら直ったのは良かったのですが、
なんとも言えない週の開始でした・・・。

さて、今週の小ネタ。
Getterのみのプロパティってこういう感じで書いてたのですが。

private string _test;
public string test
{
get
{
return _test;
}
}


これ1行にできるんですね。

private string _test;
public string test => _test;


とまぁ、特になんてことないんですが、個人的にはこちらのほうがいいのでご紹介。
ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】コルーチンのお話。Aコルーチン中にAコルーチンを止めてBコルーチンを動かす方法。 

おはようございます。坂内です。

さっそくUnityのお話。

コルーチン使ってますか?

Cor1が終わってからCor2を動かしたいとき。


using System.Collections;
using UnityEngine;

public class Test20191028 : MonoBehaviour
{
IEnumerator Start()
{
StartCoroutine(Cor1());
yield return new WaitForSeconds(2f);
StartCoroutine(Cor2());
}

private IEnumerator Cor1() {
yield return new WaitForSeconds(2f);
Debug.Log("1");
yield return new WaitForSeconds(2f);
}

private IEnumerator Cor2() {
yield return new WaitForSeconds(2f);
Debug.Log("2");
yield return new WaitForSeconds(2f);
}

}



もちろんこんな結果




こういう書き方しちゃってます?

ちゃんとCor1が終わってからCor2を動かすなら、こう書くのがいいのかな?


using System.Collections;
using UnityEngine;

public class Test20191028 : MonoBehaviour
{
IEnumerator Start()
{
yield return StartCoroutine(Cor1());
yield return StartCoroutine(Cor2());
}

private IEnumerator Cor1() {
yield return new WaitForSeconds(2f);
Debug.Log("1");
yield return new WaitForSeconds(2f);
}

private IEnumerator Cor2() {
yield return new WaitForSeconds(2f);
Debug.Log("2");
yield return new WaitForSeconds(2f);
}

}



もちろん結果は同じですけどね。



さて、それではCor1をやっている途中(Cor1が開始されてから1秒後)で処理をCor2に移したい場合はどうでしょうか。


using System.Collections;
using UnityEngine;

public class Test20191028 : MonoBehaviour
{
private IEnumerator coroutine;
IEnumerator Start()
{
coroutine = Cor1();
StartCoroutine(coroutine);
yield return new WaitForSeconds(1f);
StopCoroutine(coroutine);
coroutine = Cor2();
StartCoroutine(coroutine);
}

private IEnumerator Cor1() {
yield return new WaitForSeconds(2f);
Debug.Log("1");
yield return new WaitForSeconds(2f);
}

private IEnumerator Cor2() {
yield return new WaitForSeconds(2f);
Debug.Log("2");
yield return new WaitForSeconds(2f);
}
}



IEnumeratorの変数を作って、そいつでCor1を動かします。
Cor2に移るタイミングでStopCoroutineでCor1を止めてからCor2を行います。

結果は




Cor1のはじめの待ち時間2秒のうち、1秒経ったところで、Cor2が開始され、ログとしては2のみが出力されました。

こんな感じでIEnumratorにコルーチンを突っ込んで実行してあげることで、Aコルーチン処理中にBコルーチン処理を強制的に実行することができます。

ということで、本日は簡単なコルーチンのお話でした。

あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0