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

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

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

 

【ハルシオンブログ】コードの可読性についてツイッターで聞いてみた結果。(switch文のcaseのあとにifが・・・) 

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

今週終わればゴールデンウィークですね!
みなさんどこかへお出かけの予定は?
僕は家にいます。

さてさて、こんなコードを見かけました。

switch(a){
case 0:if(b == 0)
処理A
break;
}


き”も”ち”わるいー!!

「ネットにこんな書き方ありましたよ?」

え?まじで?まじかよ。気持ち悪いの俺だけなの?
と思って、色々調べてみたら、某大学の教授の講義?にこんな書き方があったんですよ・・・・
まじかぁ~

ってことで、ツイッターで聞いてみました。




558票の回答ありがとうございます!そして色々なご意見ありがとうございます!

【結果】
気持ち悪い 80%!
普通 20%!



やっぱり皆気持ち悪いとのこと。

ただし、普通に思っている人が20%もいるので、皆さんもいつか出会うことがあるかもしれません。

ただ、このアンケートのコード例が悪く、”フロー自体をこうやった方がいい”等のご意見が多かったです。
ほんと申し訳ないですorz
caseのところだけ書いておけばよかったと反省しております。
あ、あとC#って書いてませんでしたね・・・・

そこじゃないんだ!見てほしいのはそこじゃないんだ!と常に思っておりました(笑)

このコード、可読性が悪いのが問題だと思っております。

switch(a){
case 0:if(b == 0)
処理A
break;
}


これって、こう書けばいいだけよね。

switch(a){
case 0:
if(b == 0){
処理A
}
break;
}


まだこうやった方が可読性があがると思いませんか?

上も下も処理の流れ自体は全く同じ物になります。

自分も結構コードぐちゃぐちゃに書いていってしまうことはありますが、なるべく可読性も考えた書き方にしていきたいっすね。

ということで、皆さま可読性に気を付けてコードを書きましょう!という回でした。

それでは、あでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】コンソールログのコピペ 

こんにちは。
木曜なのを忘れてました・・・。

何もなかったので小ネタです。
コンロールログのコピーをするときにこの部分でCtrl+cをしてもトレースまでコピペできるよって話。
ここです。


こんなですね。


ではこれで・・・ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】ScriptableObjectを使う時の注意点。そのまま使うとマスタの値が変わっちゃうよ? 

今日は素敵な天気ですね!こんな日は散歩がしたくなります!
まぁ しませんけど。坂内です。

以前ScriptableObjectの作成方法や、使い方を紹介しました。
【ハルシオンブログ】UnityでScriptableObjectを作成して、使う方法の紹介。なんか使いやすいように使ってください! 】

マスタデータ的な感じで使うことが多いかと思いますが、使う上で気を付けないといけない点があるので、紹介。

こんなデータを作成します。
【Enemy.cs】
public class Enemy : ScriptableObject
{
public List enemys = new List();

[System.Serializable]
public class EnemyData {
public string name;
public int maxHp;
public int hp;
public int atk;
public Sprite image;
}
}




これで、敵のデータ作成完了。

次に画面にボタンを置き、クリックすることで、敵に攻撃をする感じのを作ります。



【Script20190415.cs】
using UnityEngine;
using UnityEngine.UI;

public class Script20190415 : MonoBehaviour
{
[SerializeField]
Enemy enemyMst;
Enemy.EnemyData currentEnemy;

// UI
public Text lblEnemyName;
public Text lblEnemyHP;
public Image imgEnemy;

private void Start() {
MakeNewEnemy();
}

public void OnClickAttack() {
// 攻撃ダメージ(10~30)
int atkDmg = Random.Range(10,31);
currentEnemy.hp -= atkDmg;
if (currentEnemy.hp <= 0) {
MakeNewEnemy();
return;
}
lblEnemyHP.text = currentEnemy.hp + "/" + currentEnemy.maxHp;
}

private void MakeNewEnemy()
{
// 敵のデータをランダムで1体作成
currentEnemy = enemyMst.enemys[Random.Range(0, enemyMst.enemys.Count)];
lblEnemyName.text = currentEnemy.name;
lblEnemyHP.text = currentEnemy.hp + "/" + currentEnemy.maxHp;
imgEnemy.sprite = currentEnemy.image;

}
}


ボタンをクリックしたときにOnClickAttackを呼ぶようにします。

そうすると・・・・




えっ!

なんかおかしい・・・・
調べてみると、こうなっているのが分かります。



えー!マスタの値がかわってるうううううう!!!

これじゃマスタとしての意味なくなってしまいます。

これ、値渡しじゃなくて参照渡しだから起きちゃうんですよね。

なので、ScriptableObjectのオブジェクトを使う場合にはディープコピーにて使ってあげるといいと思います。

なんかいい方法あるのかもしれませんが、今のところこんな感じでやってます。

【Enemy.cs】
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "EnemyData", menuName = "ScriptableObjects/MakeEnemyData")]
public class Enemy : ScriptableObject
{
public List<EnemyData> enemys = new List<EnemyData>();

[System.Serializable]
public class EnemyData {
public string name;
public int maxHp;
public int hp;
public int atk;
public Sprite image;
public void Copy(EnemyData enemyData)
{
this.name = enemyData.name;
this.maxHp = enemyData.maxHp;
this.hp = enemyData.hp;
this.atk = enemyData.atk;
this.image = enemyData.image;
}
}
}


コピーメソッドを付けてあげます。

次にScript20190415.csのMakeNewEnemyメソッドを次のように変えます

Private void MakeNewEnemy()
{
// 敵のデータをランダムで1体作成
currentEnemy = new Enemy.EnemyData();
currentEnemy.Copy(enemyMst.enemys[Random.Range(0, enemyMst.enemys.Count)]);

lblEnemyName.text = currentEnemy.name;
lblEnemyHP.text = currentEnemy.hp + "/" + currentEnemy.maxHp;
imgEnemy.sprite = currentEnemy.image;
}



こんな感じでやれば、ちゃんと動くようになります。



気を付けないと、マスタデータが書き換わってしまいます。

という感じで、今日はScriptableObjectを使う上での注意点でした。

あでゅ~ノシ

Category: 開発日記(Unity)

Tag: Unity  ゲーム  ゲーム開発  C#  ScriptableObject 
tb 0 : cm 4   

【ハルシオンブログ】ファイルの拡張子だけとか拡張子抜いた文字列が欲しい時 

今週もこんにちは。

さてネタはファイルの拡張子とかが欲しい時です。

Splitを使ってもいいのですがPathを使うと簡単に取れます。
System.IOなので「using System.IO;」を加えてあげてください。
    string testName = "test1.png";
// ファイル名全部を取得
string fileName = Path.GetFileName(testName);
// 拡張子のみを取得
string ext = Path.GetExtension(testName);
// 拡張子なしを取得
string noneExt = Path.GetFileNameWithoutExtension(testName);

Debug.Log("ファイル名:" + fileName);
Debug.Log("拡張子のみ:" + ext);
Debug.Log("拡張子なし:" + noneExt);


結果。


これだけだと微妙なのですがパスが含まれてても大丈夫なところが便利です。
testName変えてるだけです。
    string testName = "c:\\test\\test2.jpg";
// ファイル名全部を取得
string fileName = Path.GetFileName(testName);
// 拡張子のみを取得
string ext = Path.GetExtension(testName);
// 拡張子なしを取得
string noneExt = Path.GetFileNameWithoutExtension(testName);

Debug.Log("ファイル名:" + fileName);
Debug.Log("拡張子のみ:" + ext);
Debug.Log("拡張子なし:" + noneExt);


結果。

ちゃんとパスなしで取得できてますね!

では今週もこれにてノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】TokyoSandboxに初めて遊びにいってみたよー 写真ぶっれぶれでやんの! 

こんにちは!坂内っす。

先週土曜に秋葉原でTokyoSandboxが行われたので、行ってきたよ。
https://tokyosandbox.com/
(インディーゲームの展示会みたいなもんすかね)

とまぁ、いつも通り知り合いのブースを覗いて遊ばせてもらってをしてました。
(今回は写真がいつも以上にぶれているため、勝手にツイート貼らせてもらう形にします)

【果てのマキナ】
知る人ぞ知るおづみかんさんのブース。
遊ばせて頂いたが、面白い!
2Dアクションですね!

操作がコントローラのRとLメインという感じでしたが、中々なれなかった・・・・








【ジラフとアンニカ】
これまた良い作品!
紙パレットさんの3Dアドベンチャー&音ゲー(?)ジラフとアンニカ!
あれ なんか写真これしかないけど・・・・


これがすごい良い!

ちょうどいいTLあったので紹介!

めちゃめちゃ面白そうですよ!




【フライングガールストライカー】
taniさんのブース。
3Dシューティングがすごい!
スマホなのにぬるぬる動くんすよこれ。







【ガラクタファクトリー&CURUPON】
タイラーさんのブース。




(なんかタイラーさんのブースの写真だけあんまりぶれてない・・・・)

パズルゲームのCURUPONとシミュレーションのガラクタファクトリーを展示してました。
CURUPONやらせてもらったけど、難しい!慣れると連鎖とか狙えるようになるやつやね!
手触り感いい感じだったので、皆さんもやってみてね!CURUPONはリリースされてるぽいよ!




【ことだま日記】
Ske6さんのブース。
あれ?名前変わってる?以前は「ことだまっち」だったのに・・・
いつもながらの可愛いブース。
放置育成ゲームを作っています。








他にもいくつかブース回りましたが、みんな凄いっす!

負けてられません!

ということで、本日はここまで!

次のイベントはデジゲーかな?Bitsummitは今のところ行くかどうか不明です。

ではあでゅ~ノシ

Category: その他日記

tb 0 : cm 0