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

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

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

     

    【ハルシオンブログ】ファイルの更新日付が知りたかったよ。 

    こんにちは。
    大坂です。

    今年もあと少しで終わりですね!
    一応、今年最後のブログになりますかね。
    今年も一年適当なネタでなんとなく続けてこれました。

    そして最後でも適当ネタです。
    ファイルの更新日付がほしいときですねー。
    こんな感じ。
        
    public void TestMethod(string fileFullPath)
    {
    DateTime lastWrite = File.GetLastWriteTime(fileFullPath);
    }

    取得するだけならこれで終わりですね。
    使った時はPrefsに保存した日付より新しければ処理するような感じで使いました。
        
    private void TestMethod()
    {
    if (CheckFileDate("FilePath"))
    {
    // 保存したのが新しいので処理する
    // --- 処理 ---

    // 保存しておく日付を更新
    EditorPrefs.SetString("write", DateTime.Now.ToString());
    }
    }

    private bool CheckFileDate(string fileFullPath)
    {
    // 保存しておいたのを取得
    string saveDataStr = EditorPrefs.GetString("write");

    if(string.IsNullOrEmpty(saveDataStr))
    {
    // 保存したデータがないので最新
    return true;
    }
    else
    {
    DateTime lastWriteData = File.GetLastWriteTime(fileFullPath);
    DateTime saveData = DateTime.Parse(saveDataStr);
    if (lastWriteData > saveData)
    {
    // 保存したデータより更新日のほうが大きいので最新
    return true;
    }
    }
    return false;
    }

    てな感じでファイル単位ですが更新日を見て処理をしたかった時のお話でした。

    それでは今年のブログはこれで終わりです。
    皆様良いお年を~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】2019年最後になりました。来年こそハクスラ制作をすすめたい!! 

    あと1週間で年末ですね!
    今年も川崎大師に夜中の3時ころに初詣行く予定です!
    はい、坂内です。

    今年は結局作成していたハクスラRPGが一切進捗無しといった感じでしたね。
    まぁ今受けてる案件が来年もずっと続くぽいので、来年も進まないのかもしれませんが・・・・

    予定では今年の受託で潤って、来年こそハクスラ制作進める予定だったのですが、紆余曲折がありまして、全然潤わなかった・・・
    潤わないどころか、自分たちの生活で精いっぱい。あ、いつもと同じですね。
    来年こそ余裕持てるくらい稼いで、ハクスラの制作に入りたい所存であります!


    さて、本日は特にネタもないので、来年の目標で〆させていただきます。

    来年もよろしくお願い致します。

    Category: その他日記

    tb 0 : cm 0   

    【ハルシオンブログ】クラス名とかメソッド名とかをログに出すときは「nameOf 演算子」が便利 

    こんにちは。
    大坂です。

    今年もあと1週間ちょっと終わりです。
    なんとも早い事です。

    さて、クラス名とかメソッド名をログとして出しておくことがあると思いますが、
    そんな時は「nameOf 演算子」を使用しておくとリファクタリング機能なんかで名前を変えたときに一緒に変わってくれるので便利ですよって話。

    こんな感じです。
        
    public class Test_1 : MonoBehaviour
    {
    private void Start()
    {
    TestMethod_1();
    }

    public void TestMethod_1()
    {
    Debug.Log($"{nameof(Test_1)}.{nameof(TestMethod_1)}");
    }
    }

    一応ログ


    リファクタリング機能でメソッド名を変えてみる。
    「1」を「2」にしてるだけですけど。


    って感じで一緒に書き換わってくれるので変更忘れなどがなくなると思います。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】「A~Cからランダムで取得」的なやつを重みづけでランダム取得してますよ。これより簡単な方法ってありますか? 

    こんにちは!坂内っす。

    もう12月も半分終わりですね・・・・あぁ~ 年末なっちゃうわー!
    そういえば、年末ジャンボ宝くじまだ買ってないんですよね・・・・
    買わないとなぁ

    さて、Unityの話。

    今まで「A~Cのどれかをランダムで選択」というときには、


    public class Item{
    public int weight;
    public string itemName;
    }

    List<Item> items = new List<Item>();
    Item item1 = new Item();
    item1.weight = 2;
    item1.itemName = "A";
    items.Add(item1);

    Item item2 = new Item();
    item2.weight = 6;
    item2.itemName = "B";
    items.Add(item2);

    Item item3 = new Item();
    item3.weight = 2;
    item3.itemName = "C";
    items.Add(item3);

    // どれかを選択
    public string GetRandomItemName(){
    string retItemName = "";
    int total = 0;
    foreach(Item item in items){
    total += item.weight;
    }
    int value = Random.Range(0, total + 1);
    for(int i = 0; i < items.Count; i++){
    if(value < items[i].weight){
    retItemName = items[i].itemName;
    break;
    }else{
    value -= items[i].weight;
    }
    }
    return retItemName;
    }



    って感じでやるといいらしいっすよ。


    ほかにももっと簡単なやり方があったら教えてほしいっすけどね!

    ってことで、今日は「いくつかのアイテムにウエイトを付けて、取得する方法」についてでした。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Animatorでアニメーション管理しているときに終了を待ったりスキップしたりしたかった 

    こんにちは。
    大坂です。

    Animtorを使用しているときにスクリプトでアニメーションの終了を待ったり、アニメーションを最後まで飛ばしたいときのお話。

    終了を待つのはこんな。
        
    private IEnumerator PlayAnimation()
    {
    var animator = GetComponent<Animator>();
    animator.SetTrigger("Show");
    // Animatorのステート変更に1フレームかかるので待つ
    yield return new WaitForEndOfFrame();
    // 終了するまで待つ
    yield return new WaitWhile(() => animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f);
    Debug.Log("アニメーション 終わったよ。");
    }

    なんか1フレーム待たないとうまく動かないみたいです。
    AnimatorのLayer変えてる場合は「GetCurrentAnimatorStateInfo(0)」の「0」を変える必要があります。
    BaseLayer使っているならそのままです。

    さて続いて最後まで飛ばしたいとき
        
    private IEnumerator SkipAnimation()
    {
    var animator = GetComponent<Animator>();
    animator.SetTrigger("Show");
    // Animatorのステート変更に1フレームかかるので待つ
    yield return new WaitForEndOfFrame();
    // アニメーションの最後にする
    animator.Play(animator.GetCurrentAnimatorStateInfo(0).fullPathHash, 0, 1);
    }

    こんな感じですね。
    まぁ実際にはアニメーションを動かしてすぐに最後に飛ばすなんてことはないと思うので工夫して使ってください!

    では今週もこの辺でノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】ListをLinqを使って並び替え。第2キーもつかえるよ! 

    こんにちは。坂内っす。
    昨日はいろいろバタバタしていてブログ書き逃しました・・・・・

    UnityというかC#のお話。

    Linqを使ってListのデータを降順に並べる方法。

    ●noの昇順で並び替える


    public class AAA{
    public int no;
    public int str;
    public int dex;
    }

    public List aaaAry = new List();

    ~中身つっこむ~

    aaaAry.OrderBy(x => x.no);



    ●strの降順で並び替え、第2キーとして、dexの降順で並び替える


    public class AAA{
    public int no;
    public int str;
    public int dex;
    }

    public List aaaAry = new List();

    ~中身つっこむ~

    aaaAry.OrderByDescending(x => x.str).ThenByDescending(x => x.dex);




    という感じで簡単にできますね。


    ってことで、今日はここまで!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】パーティクル再生終了を知りたいとき 

    こんにちは。
    大坂です。

    スクリプトでパーティクル再生終了後に処理したい時ってありますかね?
    この前ちょうどそんな場面があったのでご紹介。

    コルーチンの中になりますがこんな感じ書いたらできます。
        ParticleSystem particlePrefab;
    private IEnumerator PlayParticle()
    {
    ParticleSystem particle = Instantiate(particlePrefab, transform);
    particle.Play();

    yield return new WaitWhile(() => particle.IsAlive(true));
    Debug.Log("パーティクル 終わったよ。");
    }

    はい。簡単ですね。
    今週もこれだけです。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】”1,2,3,4"とかってstringをListに入れる方法。(Linq使用) 

    なんかめっさ雨降ってますね。
    坂内です。


    もう今年残り1か月切りました!
    こわい!こわいよー!11月が烈火のごとく速度で消えた感じです!
    今作ってる受託のやつが今月リリースってことで、爆進中!

    UnityというかC#のお話。

    string で 「1,2,3,4」とはいってるやつを、Listにする方法。

    とっても簡単。


    string source = "1,2,3,4";
    List array = source.Split(',').Select(a => int.Parse(a)).ToArray();



    これだけ。あ using System.Linq; を忘れずに。


    この1行で変換できますよ。

    すいません、忙しいのでこれだけです。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0