【ハルシオンブログ】エスケープ文字を一気に変換したい場合
こんにちは。
大坂です。
暖かくなったり寒くなったりの季節の変わり目で体調を崩しやすい感じですね。
皆様気を付けてくださいまし。
色々なエスケープ文字が入っている場合の置換がめんどくさいときがありますね。
そんな時は「Regex.Unescape」を使いましょう。
サポートされているエスケープ文字はAPIのほうで、見てみてください。
https://docs.microsoft.com/ja-jp/dotnet/api/system.text.regularexpressions.regex.unescape?view=net-5.0
適当ですが今回はこんな感じで一応やってみました。
あ、使用するときは「using System.Text.RegularExpressions;」を付けてあげましょう。
結果

ちゃんと改行とタブになってますね。
今週も短いですが、これにてノシ
大坂です。
暖かくなったり寒くなったりの季節の変わり目で体調を崩しやすい感じですね。
皆様気を付けてくださいまし。
色々なエスケープ文字が入っている場合の置換がめんどくさいときがありますね。
そんな時は「Regex.Unescape」を使いましょう。
サポートされているエスケープ文字はAPIのほうで、見てみてください。
https://docs.microsoft.com/ja-jp/dotnet/api/system.text.regularexpressions.regex.unescape?view=net-5.0
適当ですが今回はこんな感じで一応やってみました。
private void Start() {
string test = "ああああ\\r\\nいいいいい\\tうううう\\nえええええ";
Debug.Log(Regex.Unescape(test));
}
あ、使用するときは「using System.Text.RegularExpressions;」を付けてあげましょう。
結果

ちゃんと改行とタブになってますね。
今週も短いですが、これにてノシ
Category: 開発日記(Unity)
【ハルシオンブログ】iOSの審査でGuideline 4.2.3に当たったよ!対応したらちゃんとアプデリリース通りました!
こんにちわ。坂内っす。
みなさんゲーム開発進んでますか?
うちは微小ながらも進んでいるような気がしなくもない感じです・・・・
頑張って進めましょう!
さて、以前こんな記事を書きました。
【ハルシオンブログ】またビルドでおおはまり!Androidのビルドは通ったけどIOSビルドが・・・
http://halcyonsystemblog.jp/blog-entry-763.html
こちらも無事にビルドが通りアップルさんに審査を投げたところ、こんなご返事が‥‥
「Guideline 4.2.3にぶちあたってるよ!なおしてね!」
4.2.3とはなんぞやと?
ここにアップルさんのガイドラインが書いてますね。
https://developer.apple.com/jp/app-store/review/guidelines/
これによると
4.2.3
(i)Appは独立して機能するものである必要があります。そのAppを実行するために別のAppのインストールを求めることはできません。
(ii)起動時にAppが正しく機能するよう、バイナリに十分なコンテンツが含まれるようにしてください。
(iii)初回起動時に正しく機能させるために追加のリソースをダウンロードする必要があるAppでは、ダウンロードする前にその追加データのサイズをユーザーに開示してください。
とのこと。
こちらに対応するために、ダウンロードサイズを表示するポップアップを追加しました。
なんか、以前聞いたことありますね。
最近ダウンロードサイズを書かないといけなくなったとか(1,2年前から?)
そして審査にぶちなげ!!
結果。
「Guideline 4.2.3にぶちあたってるよ!なおしてね!」
は?
色々調べたところ、「ゲーム始まってないのにダウンロードさせるなよ」
ガイドラインでいう
(ii)起動時にAppが正しく機能するよう、バイナリに十分なコンテンツが含まれるようにしてください。
これに当たってるんじゃないかと考え以下のような修正を施しました。
ポケガ2の初回起動の流れ
旧)起動>タイトル画面>ダウンロード>チュートリアル(見るか見ないかはユーザに選択させる)>ゲーム開始
修正)起動>タイトル画面>チュートリアル(強制)>ダウンロード>ゲーム開始
こんな感じで、初めは必ずチュートリアルをみてからダウンロードする流れに変えました。
これで審査通ったんです!!
ってことで、Guideline 4.2.3の対応は。
この2点ですね。
ダウンロードサイズの明記とダウンロードタイミング。
是非はまった方いましたら、こちらを対応してみてくださいませ。
ってことで、ポケガ1、ポケガ2共に最新で動くはずです!
では、あでゅ~ノシ
みなさんゲーム開発進んでますか?
うちは微小ながらも進んでいるような気がしなくもない感じです・・・・
頑張って進めましょう!
さて、以前こんな記事を書きました。
【ハルシオンブログ】またビルドでおおはまり!Androidのビルドは通ったけどIOSビルドが・・・
http://halcyonsystemblog.jp/blog-entry-763.html
こちらも無事にビルドが通りアップルさんに審査を投げたところ、こんなご返事が‥‥
「Guideline 4.2.3にぶちあたってるよ!なおしてね!」
4.2.3とはなんぞやと?
ここにアップルさんのガイドラインが書いてますね。
https://developer.apple.com/jp/app-store/review/guidelines/
これによると
4.2.3
(i)Appは独立して機能するものである必要があります。そのAppを実行するために別のAppのインストールを求めることはできません。
(ii)起動時にAppが正しく機能するよう、バイナリに十分なコンテンツが含まれるようにしてください。
(iii)初回起動時に正しく機能させるために追加のリソースをダウンロードする必要があるAppでは、ダウンロードする前にその追加データのサイズをユーザーに開示してください。
とのこと。
こちらに対応するために、ダウンロードサイズを表示するポップアップを追加しました。
なんか、以前聞いたことありますね。
最近ダウンロードサイズを書かないといけなくなったとか(1,2年前から?)
そして審査にぶちなげ!!
結果。
「Guideline 4.2.3にぶちあたってるよ!なおしてね!」
は?
色々調べたところ、「ゲーム始まってないのにダウンロードさせるなよ」
ガイドラインでいう
(ii)起動時にAppが正しく機能するよう、バイナリに十分なコンテンツが含まれるようにしてください。
これに当たってるんじゃないかと考え以下のような修正を施しました。
ポケガ2の初回起動の流れ
旧)起動>タイトル画面>ダウンロード>チュートリアル(見るか見ないかはユーザに選択させる)>ゲーム開始
修正)起動>タイトル画面>チュートリアル(強制)>ダウンロード>ゲーム開始
こんな感じで、初めは必ずチュートリアルをみてからダウンロードする流れに変えました。
これで審査通ったんです!!
ってことで、Guideline 4.2.3の対応は。
この2点ですね。
ダウンロードサイズの明記とダウンロードタイミング。
是非はまった方いましたら、こちらを対応してみてくださいませ。
ってことで、ポケガ1、ポケガ2共に最新で動くはずです!
では、あでゅ~ノシ
Category: 開発日記(Unity)
【ハルシオンブログ】変数の値を別クラスに渡して更新したいときは参照渡しをしよう
こんにちは。
大坂です。
C#のメソッド引数は基本的に値渡しになるのでメソッド内で値を変えても呼び出し元には影響しないですね。
呼び出し元にも影響させたい場合は「ref」を使って参照渡しをしましょうというお話。
こんな感じで使用するだけですね。
実行するとちゃんとisTestがTrueになりますね!

別クラスとかの処理を呼び出して、そのクラスの処理が終わったときに変数の状態を変更したいときとかに便利ですね。
では今週もこれにてノシ
大坂です。
C#のメソッド引数は基本的に値渡しになるのでメソッド内で値を変えても呼び出し元には影響しないですね。
呼び出し元にも影響させたい場合は「ref」を使って参照渡しをしましょうというお話。
こんな感じで使用するだけですね。
public class Test_1 : MonoBehaviour
{
public Test_2 test2;
private void Start() {
bool isTest = false;
test2.Test2(ref isTest);
Debug.Log(isTest);
}
}
public class Test_2 : MonoBehaviour
{
public void Test2(ref bool isTest) {
isTest = true;
}
}
実行するとちゃんとisTestがTrueになりますね!

別クラスとかの処理を呼び出して、そのクラスの処理が終わったときに変数の状態を変更したいときとかに便利ですね。
では今週もこれにてノシ
Category: 開発日記(Unity)
【ハルシオンブログ】UnityのSuperTextMeshを使う際に、途中で文字色を変えたくても変わらないっていう話。
こんにちは。坂内です。
一昨日の夜の地震すごかったですね・・・・
また地震が続いてしまうと思うと大変すぎです・・・
福島の皆さんお気をつけてください。
今日は雨!また大雨の地域もあるようなのでお気をつけくださいませ。
さて、Unityのお話。
SuperTextMeshという文字関連のアセットを使ってるのですが、文字色を途中で変えようとしても変わらない現象が・・・
ちゃんとドキュメントとか見てないのがいけないのかもしれませんw
uGUIのTextやTextMeshProとかだと「().color = 色」とかで変わるじゃないですか。
これが効かない。
「ボタンを押すと、ボタンの中の文字の色を変える」というのを作ってみましたが、こんな感じで色の部分は変わってるのですが、実際の画面の文字色が変わらないという感じになります。

SuperTextMeshだと色の変え方が別なのかもしれません・・・・
ただ、カラーピッカーのところを手で変えると文字の色も変わるんですよ・・・・

これってSuperTextMeshのバグなんでしょうか?
ってことで、こんなコードを無理やり書いて対応すれば、ちゃんと変わるようになります。
無駄に text.enable = falseとtrueをしてあげると・・・・・

ちゃんと変わってくれました!
って無理やりな方法で対応してみたけど、もっといい方法ありますか?
なにかわかる方いましたら教えてくださいませ。
.colorで変えようとしていること自体が違うのかもしれませんorz
ということで、今日はSuperTextMeshの文字色の変更についてでした。
では、あでゅ~ノシ
一昨日の夜の地震すごかったですね・・・・
また地震が続いてしまうと思うと大変すぎです・・・
福島の皆さんお気をつけてください。
今日は雨!また大雨の地域もあるようなのでお気をつけくださいませ。
さて、Unityのお話。
SuperTextMeshという文字関連のアセットを使ってるのですが、文字色を途中で変えようとしても変わらない現象が・・・
ちゃんとドキュメントとか見てないのがいけないのかもしれませんw
uGUIのTextやTextMeshProとかだと「
これが効かない。
「ボタンを押すと、ボタンの中の文字の色を変える」というのを作ってみましたが、こんな感じで色の部分は変わってるのですが、実際の画面の文字色が変わらないという感じになります。

SuperTextMeshだと色の変え方が別なのかもしれません・・・・
ただ、カラーピッカーのところを手で変えると文字の色も変わるんですよ・・・・

これってSuperTextMeshのバグなんでしょうか?
ってことで、こんなコードを無理やり書いて対応すれば、ちゃんと変わるようになります。
using UnityEngine;
using UnityEngine.UI;
public class Blog20210215 : MonoBehaviour
{
[SerializeField] Button btnChangeColor;
private void Awake() {
btnChangeColor.onClick.AddListener(OnClickButton);
}
public void OnClickButton() {
SuperTextMesh text = btnChangeColor.transform.GetComponentInChildren();
text.color = new Color(Random.Range(0f,1f), Random.Range(0f, 1f), Random.Range(0f, 1f));
text.enabled = false;
text.enabled = true;
}
}
無駄に text.enable = falseとtrueをしてあげると・・・・・

ちゃんと変わってくれました!
って無理やりな方法で対応してみたけど、もっといい方法ありますか?
なにかわかる方いましたら教えてくださいませ。
.colorで変えようとしていること自体が違うのかもしれませんorz
ということで、今日はSuperTextMeshの文字色の変更についてでした。
では、あでゅ~ノシ
Category: 開発日記(Unity)
【ハルシオンブログ】Unityの2Dで光と影を使う方法。※どこかで見た記事です
おはようございます!坂内っす。
ポケガ3の開発は少しずつ進んでます。
えぇ 少しずつ・・・・
これでいいのか!?って感じになってますが、このまま進んでいこうと思います・・・・
前にも書いた気がしましたが、UniversalRPで2Dでライティングとかが簡単にできるという話を聞いたので、試してみました。
2Dなのに影も出せるらしいですよ!
使用するパッケージは「Universal RP」。
まずはこれをインポートします。

Create>Rendering>Universal Render Pipeline>Pipeline Asset(Forward Renderer)を作成。

Create>Rendering>Universal Render Pipeline>2D Renderer(Experimental)を作成

次にProject SettingsのGraphicsの「Scriptable Render PipelineAsset」に先ほど作成したPipelineAssetを指定します。

2D Renderer(Experimental)をPileline AssetのRendererListにセットします。

この時点で画面は真っ暗になります。

さて、それではSpriteを置いてみましょう
もちろん真っ暗なので何もみえません・・・
ではライトを置いてみます。
Light>2D>Point Light 2D(Experimental)でライトを置いてみます。

この状態だとライトの光が小さいので光の調整をします。
OuterRadiusを300くらいにしてみると、こんな感じになります。


ついにSpriteがみえました!
ライトを動かすとちゃんと光も動きます。
こんな感じ。

そして、背景も追加!
また、おにぎりのSpriteにShadow Caster 2Dを追加します。

ShadowCaster2DのShapeを絵に合わせます。

これにより、2Dなのに影を付けることができるようです!

あ、Lightの影の設定で影の強さとかは調整できるようです。

ということで、2Dで光と影を使う方法でした。
あでゅ~ノシ
ポケガ3の開発は少しずつ進んでます。
えぇ 少しずつ・・・・
これでいいのか!?って感じになってますが、このまま進んでいこうと思います・・・・
前にも書いた気がしましたが、UniversalRPで2Dでライティングとかが簡単にできるという話を聞いたので、試してみました。
2Dなのに影も出せるらしいですよ!
使用するパッケージは「Universal RP」。
まずはこれをインポートします。

Create>Rendering>Universal Render Pipeline>Pipeline Asset(Forward Renderer)を作成。

Create>Rendering>Universal Render Pipeline>2D Renderer(Experimental)を作成

次にProject SettingsのGraphicsの「Scriptable Render PipelineAsset」に先ほど作成したPipelineAssetを指定します。

2D Renderer(Experimental)をPileline AssetのRendererListにセットします。

この時点で画面は真っ暗になります。

さて、それではSpriteを置いてみましょう
もちろん真っ暗なので何もみえません・・・
ではライトを置いてみます。
Light>2D>Point Light 2D(Experimental)でライトを置いてみます。

この状態だとライトの光が小さいので光の調整をします。
OuterRadiusを300くらいにしてみると、こんな感じになります。


ついにSpriteがみえました!
ライトを動かすとちゃんと光も動きます。
こんな感じ。

そして、背景も追加!
また、おにぎりのSpriteにShadow Caster 2Dを追加します。

ShadowCaster2DのShapeを絵に合わせます。

これにより、2Dなのに影を付けることができるようです!

あ、Lightの影の設定で影の強さとかは調整できるようです。

ということで、2Dで光と影を使う方法でした。
あでゅ~ノシ
Category: 開発日記(Unity)
【ハルシオンブログ】SuperTextMeshで途中から文字の色を変更する
こんにちは。
大坂です。
最近プロジェクトでSuperTextMeshを使っていますが、
途中から文字の色を変える方法です。
まぁ大した話ではないです。
タグで<c={色の名前}>を付けてあげれば変わります。

デフォルトで使える色はこれのようです。
https://docs.unity3d.com/ScriptReference/Color.html
独自の色を使いたい場合は「#554039」みたいな感じで指定するとできるみたいですね。

というところで今週もこれにてノシ
大坂です。
最近プロジェクトでSuperTextMeshを使っていますが、
途中から文字の色を変える方法です。
まぁ大した話ではないです。
タグで<c={色の名前}>を付けてあげれば変わります。
public SuperTextMesh txtTest;
private void Start() {
txtTest.text = "test<c=red>だよ。<c=white>戻すよ。";
}

デフォルトで使える色はこれのようです。
https://docs.unity3d.com/ScriptReference/Color.html
独自の色を使いたい場合は「#554039」みたいな感じで指定するとできるみたいですね。
public SuperTextMesh txtTest;
private void Start() {
txtTest.text = "<c=cyan>cyanだよ。<c=#554039>独自の色だよ。";
}

というところで今週もこれにてノシ
Category: Androidアプリ紹介
【ハルシオンブログ】Unityでオブジェクトを消す方法3種類。SetActive、enable=false、Destroyの違いについて
こんにちは!坂内っす。
2月になりました。
令和3年2月
令和元年が短かったせいか、やけに令和3年になるのが早かったですね!
さて、Unityでオブジェクトを消す場合、SetActive(false)、enable = false、Destory(gameObject)
この三通りの消し方がありますよね。
みなさんどんな使い分けしてますか?
こんな感じのものを作ってみました。

Cubeの子供にCylinderを置き、ボタンを1つ作成。
ボタンを押すとCubeに対してSetActiveや、enableやDestroyを行います。
コードは以下の感じ。
[Blog20210201.cs]
まずは「meshCube.enabled = false;」から。


enable = false
によって起きる処理としては、「対象のコンポーネントを無効にする」といった感じですね。
上記のコードの場合はmeshCubeはCubeのMeshRendererだけなので、それが無効になっただけで、オブジェクトは残っています。
そのためCubeは消えてしまいましたが、Cylinderは残ってるといった感じになります。
次は「meshCube.gameObject.SetActive(false);」です。
OnClickHideCubeのメソッドの中のmeshCube.gameObject.SetActive(false);の行のコメントを外します。

Cubeのオブジェクトが非アクティブになり、その子供も一緒に非アクティブになりました。
オブジェクト自体のアクティブ状態を変えるならSetActiveを使うべきですね。
では、「Destroy(meshCube.gameObject);」はどうなるでしょうか?
想像通りの動きになるとおもいますが、もちろんCubeが消えます。

Cube自体が消えました。
表示画面的には、SetActive(false)とDestroy(meshCube.gameObject)と同じですが、Destroyのほうはオブジェクト自体が消えてしまうので、そのあと再度使う予定のあるオブジェクトに関してはSetActiveがいい感じですね!
もう使わないオブジェクトを消す時は確実にDestroyで消してあげましょう。
ということで、オブジェクトの消し方でした。
基本的なところでしたが、いろいろと消し方があるという確認でした!
では、あでゅ~ノシ
2月になりました。
令和3年2月
令和元年が短かったせいか、やけに令和3年になるのが早かったですね!
さて、Unityでオブジェクトを消す場合、SetActive(false)、enable = false、Destory(gameObject)
この三通りの消し方がありますよね。
みなさんどんな使い分けしてますか?
こんな感じのものを作ってみました。

Cubeの子供にCylinderを置き、ボタンを1つ作成。
ボタンを押すとCubeに対してSetActiveや、enableやDestroyを行います。
コードは以下の感じ。
[Blog20210201.cs]
using UnityEngine;
using UnityEngine.UI;
public class Blog20210201 : MonoBehaviour
{
[SerializeField] Button btnHide;
[SerializeField] MeshRenderer meshCube;
private void Start() {
btnHide.onClick.AddListener(OnClickHideCube);
}
void OnClickHideCube() {
meshCube.enabled = false;
//meshCube.gameObject.SetActive(false);
//Destroy(meshCube.gameObject);
}
}
まずは「meshCube.enabled = false;」から。


enable = false
によって起きる処理としては、「対象のコンポーネントを無効にする」といった感じですね。
上記のコードの場合はmeshCubeはCubeのMeshRendererだけなので、それが無効になっただけで、オブジェクトは残っています。
そのためCubeは消えてしまいましたが、Cylinderは残ってるといった感じになります。
次は「meshCube.gameObject.SetActive(false);」です。
OnClickHideCubeのメソッドの中のmeshCube.gameObject.SetActive(false);の行のコメントを外します。

Cubeのオブジェクトが非アクティブになり、その子供も一緒に非アクティブになりました。
オブジェクト自体のアクティブ状態を変えるならSetActiveを使うべきですね。
では、「Destroy(meshCube.gameObject);」はどうなるでしょうか?
想像通りの動きになるとおもいますが、もちろんCubeが消えます。

Cube自体が消えました。
表示画面的には、SetActive(false)とDestroy(meshCube.gameObject)と同じですが、Destroyのほうはオブジェクト自体が消えてしまうので、そのあと再度使う予定のあるオブジェクトに関してはSetActiveがいい感じですね!
もう使わないオブジェクトを消す時は確実にDestroyで消してあげましょう。
ということで、オブジェクトの消し方でした。
基本的なところでしたが、いろいろと消し方があるという確認でした!
では、あでゅ~ノシ
Category: 開発日記(Unity)
| h o m e |