FC2ブログ
    01 «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.» 03

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

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

     

    【ハルシオンブログ】Listとかのログ出すとき。 

    こんにちは。
    大坂です。

    なんも書くことがないので、たまに使っているやつの紹介。
    List中身を全部ログで出すときにこんな感じでやったりしますかね?

    List<int>List<int> test_1 = new List<int> { 0, 1, 2, 3, 4, 5 };

    string text = "";
    foreach (int i in test_1)
    {
    text += $"{i},";
    }
    Debug.Log("foreach:" + text);

    まぁこれでもいいんですけど、こんな感じでもかけますよね。
    List<int>List<int> test_1 = new List<int> { 0, 1, 2, 3, 4, 5 };

    Debug.Log("join:" + string.Join(",", test_1));

    一応両方の結果です。

    似たような結果が得られますね。
    書くのが短く済む「string.Join」をよく使っていますというお話でした。

    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】パーティクルの一部の値をコードから変えたった。(Emission、Shapeの一部の値) 

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

    ちょっとParticle(Shuriken)の一部の値をコードで変えようとした時に、どうやるの?ってなったので調べてみた。

    どの値かというと、ここの値。



    ①EmissionのBurstの中の"Count"の値

    var particle = GetComponent<ParticleSystem>();
    particle.emission.SetBursts(new ParticleSystem.Burst[] { new ParticleSystem.Burst(0f, 1f) });



    こんな感じでBurstの中身を作ることができるぽいです。
    ちなみにBurstを作成する際の引数はこんな感じ。



    Emissionのモジュールについては、こちらがUnityのドキュメントになってます。
    https://docs.unity3d.com/ja/2018.4/Manual/PartSysEmissionModule.html


    ②ShapeのPositionの値

    var particleShape = particle.shape;
    particleShape.position = new Vector3(0f, 0f, 1f);



    こんな感じ。
    これよくわからないのが、以下の書き方だとエラーがでるってこと。


    particle.shape.position = new Vector3(0f, 0f, 1f);



    なんか違うの?

    Shapeのモジュールについては、こちらがUnityのドキュメントになってます。
    https://docs.unity3d.com/ja/2018.4/Manual/PartSysShapeModule.html

    ということで、今日はこの辺であでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Linqの「Union」「Intersect」「Except」について 

    こんにちは。
    大坂です。

    今週ももう木曜日ですね。
    ネタがないのでLinqのネタ。
    Linqで「Union(和集合)」「Intersect(積集合)」「Except(差集合)」をやると簡単だよねって話。

    Union(和集合)-どちらかに含まれている要素
    List<int> test_1 = new List<int> { 0, 1, 2, 3, 4, 5 };
    List<int> test_2 = new List<int> { 1, 2, 5, 6};
    var union = test_1.Union(test_2).ToList();


    Intersect(積集合)-どちらにも含まれる要素
    ListList<int> test_1 = new List<int> { 0, 1, 2, 3, 4, 5 };
    List<int> test_2 = new List<int> { 1, 2, 5, 6};
    var intersect = test_1.Intersect(test_2).ToList();


    Except(差集合)-対象のリストからもう一方のリストに属する要素を取り除く
    List<int> test_1 = new List<int> { 0, 1, 2, 3, 4, 5 };
    List<int> test_2 = new List<int> { 1, 2, 5, 6};
    var except = test_1.Except(test_2).ToList();


    こんなことをしたいときはLinq使うと簡単ですね!
    ではこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Foreachで回している元の配列等の要素を消したかったけどエラーがでたので、こうしたよ。 

    こんにちは!坂内っす。

    UnityでListの中の特定の要素を消そうと思ったときに、エラーが出てしまう話。


    public class Test0217 : MonoBehaviour
    {
    private void Start() {
    List<int> array = new List<int>();
    array.Add(1);
    array.Add(2);
    array.Add(3);
    array.Add(4);
    array.Add(5);

    foreach(var intInAry in array) {
    if(intInAry == 1 || intInAry == 3) {
    array.Remove(intInAry);
    }
    }

    for(int i = 0; i < array.Count; i++) {
    Debug.Log(array[i]);
    }
    }
    }



    こんなことをやろうとすると、以下のエラーがでてしまいます。


    InvalidOperationException: Collection was modified; enumeration operation may not execute.
    System.ThrowHelper.ThrowInvalidOperationException (System.ExceptionResource resource) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Collections.Generic.List`1+Enumerator[T].MoveNextRare () (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Collections.Generic.List`1+Enumerator[T].MoveNext () (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    Test0217.Start () (at Assets/Scripts/Test0217.cs:16)



    Foreachの処理中に大本のリスト等に変化が生じると出るエラーのようです。

    そうですよね、foreachでarrayを回している最中にarrayの要素を消そうとしているんですから。

    こんな時は一度違う変数に突っ込んでからやるといいらしいですよ。


    public class Test0217 : MonoBehaviour
    {
    private void Start() {
    List<int> array = new List<int>();
    array.Add(1);
    array.Add(2);
    array.Add(3);
    array.Add(4);
    array.Add(5);

    // arrayBufferにarrayの中身をコピーしておく
    List<int> arrayBuffer = new List<int>();
    foreach(var intInAry in array) {
    arrayBuffer.Add(intInAry);
    }

    foreach(var intInAry in arrayBuffer) {
    if(intInAry == 1 || intInAry == 3) {
    array.Remove(intInAry);
    }
    }

    for(int i = 0; i < array.Count; i++) {
    Debug.Log(array[i]);
    }
    }
    }


    これでちゃんと結果まで出ます。



    こんな感じで一度別の変数に突っ込んでからやりましょう!

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】型スイッチのお話。 

    こんにちは。
    大坂です。

    なんか色々疲れていますが、週末まで後2日なので頑張っていきましょう。

    さて、今週もちょっとしたネタを書いていきますよ!

    if文で型を調べて型が一致したら処理するなんてのを書くことがあります。
    こんな感じのやつです。

    object obj = "test";
    if(obj is string) {
    Debug.Log(((string)obj).Length);
    }

    なんか判定してキャストしてと手間がかかりますね。
    C#7から型判定時にキャストもできるようになったようです。

    object obj = "test";
    if(obj is string s) {
    Debug.Log(s.Length);
    }

    ちょっとしたことですけど、地味に便利ですね!
    ということで今週も役に立つかたたないか微妙なやつの紹介でした!

    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】enumを拡張して色々使えるようにしまっしょい!(他人の記事紹介w) 

    こんにちは!また寒い日々が・・・・さむい!坂内っす。

    家がもう50年超えのぼろ家なので、隙間風がやばい・・・・・


    さてUnityの話。

    みんな大好きEnumですが、いい感じで拡張してやれば文字列も設定・取得ができるって話ですね。


    <参考>
    https://qiita.com/tricogimmick/items/38fe86a09e8e0865d471

    こちらの記事にちゃんと書いてるところがあったので、ご紹介。


    これ凄いイイっすね!

    使ってみようと思います。

    enum自体は結構使っているけど、生で使ってばっかりっす。

    もうちょっと使いやすいようにいじってみますかね。

    ってことで、いい感じのenumの使い方の紹介でした。


    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】リストとかの中の重複した値を消したい時 

    こんにちは。
    大坂です。

    さて今週のブログですね。
    リストの中の重複した値を消したい時です。

    これはLinqのDistinctを使うと簡単にできますね。
    こんな感じです。

        private void Start()
    {
    List test = new List<int>{ 0, 1, 1, 2, 3, 3, 4, 5 };
    Log(test);
    test = test.Distinct().ToList<int>();
    Log(test);
    }

    private void Log(List test)
    {
    string text = "";
    foreach(int i in test)
    {
    text += $"{i},";
    }
    Debug.Log(text);
    }
    結果。


    ちゃんと重複した数字が消えてますね~。
    ということで簡単にできました!
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity+Playfabでのタイトルデータの取得方法。 

    こんにちは!坂内です。

    少しずつ暖かくなってきた気がする今日この頃。
    結局関東では積もるほどの雪は降ってないですね。

    さて、Unity+Playfabのお話。

    タイトルデータからデータをとってくる方法。

    タイトルデータとはなんぞや?というのはこちらをご覧あれ。
    https://docs.microsoft.com/ja-jp/gaming/playfab/features/config/titledata/

    マスタデータみたいな感じで、ゲームの設定情報を保存しておける感じですかね。
    キーにはJSONでデータを登録しておくことができます。

    例)キー:gametime
       バリュー:120
       
    こんな感じでデータを保存しておけます。

    JSONでデータが保存できるので、こんな感じでも登録しておけます。
    例)キー:itemData
      バリュー:
      [{
        "itemName":"アイテム1",
        "itemType":0
      },
      {
        "itemName":"アイテム2",
        "itemType":1
      },
      {
        "itemName":"アイテム3",
        "itemType":2
      }]
      


    タイトルデータを取得する際には、キーがあるかを見てから取得するので、以下の感じで取り出すといいぽいです。



     public IEnumerator GetTitleData() {
       int retInt = 0;
       bool isWait = true;
       GetTitleDataRequest request = new GetTitleDataRequest();
       PlayFabClientAPI.GetTitleData(request, OnSuccess, OnError);
       while(isWait) {
        yield return null;
       }
       void OnSuccess(GetTitleDataResult result) {
         if (result.Data.ContainsKey(result.Data["gametime"])) {
           retInt = int.Parse(result.Data["gametime"]);
         }
       }
       void OnError(PlayFabError error) {
         Debug.Log(error.GenerateErrorReport());
         isWait = false;
       }
     }



    itemDataのほうを取り出すにはこんな感じで取れます。


     public class ItemData{
      public string itemName;
      public int itemType;
     }
     
     ~~~略~~~~
     ItemData itemData;
     if (result.Data.ContainsKey(result.Data["itemData"])) {
       itemData = JsonHelper.ListFromJson(result.Data["itemData"].Value);
     }
     


    ってな感じで、簡単に使えますよ!
    Unity+Playfabはお勧め!

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0