FC2ブログ
12 «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.» 02

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

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

 

【ハルシオンブログ】forのなかでButton.onClick.AddListenerするとき 

こんにちは。
大坂です。

今日も寒いですね!
関東でも雪になるようです・・・。

さて今日のブログです。
forのなかでボタンのonClickのAddlistenerを設定したときのお話。

とりあえずこんな感じでやるとうまくいきません。
    public Button[] button;

void Start() {
for(int i = 0; i < button.Length; i++) {
button[i].onClick.AddListener(() => ButtonTest(i));
}
}

public void ButtonTest(int index) {
Debug.Log(index);
}

ボタンを4つセットしてループで回してボタンを押すとどのボタンを押してもログに「4」が出てきてしまいますね。


解決するには一時変数を作って「i」を入れてあげればちゃんと動きます。
こんな感じ
    public Button[] button;

void Start() {
for(int i = 0; i < button.Length; i++) {
int tmp = i;
button[i].onClick.AddListener(() => ButtonTest(tmp));
}
}

public void ButtonTest(int index) {
Debug.Log(index);
}

結果

ちゃんと意図したとおり動いてくれますね!

ちなみにAddListener はアクションを渡さないといけないみたいなのでこんな感じではコンパイルエラーになります。
    button[i].onClick.AddListener(ButtonTest(i));

で、ラムダ式にして渡してあげたんですけど、あれ?となったので、同じようなことになったときの参考になればと思います。
ではまたノシ
スポンサーサイト

Category: Androidアプリ紹介

tb 0 : cm 0   

【ハルシオンブログ】ちょっとネタ切れなので、小ネタですいません。 

こんにちは。坂内っす。

本日はUnityの小ネタを少々。

①CanvasのRenderCamera(Screens Space-camera)にコードからカメラをセットする。



        Canvas canvas = GetComponent<Canvas>();
canvas.worldCamera = Camera.main;


worldCameraに入れればおk!

更に小ネタ。

②if文を短く書く
if(a == b){
c = 10;
}else{
d = 10;
}


とかって簡略で書くとこれと同じ意味になります。

a == b ? c = 10 : d = 10;


簡略といっても、これぱっと見たときに分かりづらい方もいるかと思うので、あんまり推奨されてない?
どうなの?

三項演算子

って言われるみたいですよね。

2個目のネタはUnityというよりC#のネタでした。

短いですが今日はこれにて あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Visual Studioの拡張機能のCtrlClickGoToDefinitionが便利? 

こんにちは。
大坂です。

Visual Studioの拡張機能って今まであんまり使ってなかったんですが、みなさん使ってるんですかね?
ちょっとコードを追うときに深くおいすぎて最初のコード戻るのがめんどくさくなったので探してたら、
CtrlClickGoToDefinitionっていうのがあるみたいですね。
https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.CtrlClickGoToDefinition

ダウンロードしてインストールするとオプションに追加されてますね。


Ctrl Click shows definitions in Peek.のチェックがオフだとCtrl+クリックで対象コードに飛びますが、
チェックをオンにするとこんな感じで下に出してくれます。


ちょっと呼び出し元や呼び出し先を確認したいときはこのほうが便利だと思って紹介です。

今まであんまりVisual Studioの拡張機能は入れてませんでしたが、便利なのはいっぱいありそうですね。
これ便利だよ!っていうのがあったら教えてくれると嬉しいです。

では今週もこれだけで終わりです。
またノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Unity2018.3で新しく追加されたプレハブモード(?)が使いやすいんすよ!是非つかってみて! その2! 

こんにちは。月曜日担当の坂内です。

だいぶ寒い日が続いております。風邪に気を付けていきましょう。

さて、先週のUnity2018.3のプレハブの続き。

【プレハブのネスト】

プレハブの子供に他のプレハブを置けるようになりました。

え?今までも置けたでしょうって?
ええ、置くことはできましたが、置き親のプレハブをApplyすると、子どもとして置いたプレハブも親の一部になってましたよね。



こんな感じで、Obj1プレハブにObj2プレハブを入れることができます。
上記状態から新しくObj1に変更があった場合(今回の場合は、Text(1)をObj1に追加してみました)、Text(1)だけをApplyすることで



Obj1にObj2が入っていない状態でプレハブが変更されます。




これがプレハブのネストです。

【プレハブのバリアント】

なんかイメージ的には親クラスとそれを継承した子クラスみたいな感じ?

プレハブを右クリックして、Create>Prefab Variantで作成できます。


にょろにょろってマークがついてるのがVariantです。

Obj2はObj1をコピーしたものです。



並べてみました。
左から、Obj1・Variant・Obj2です。

それでは、Obj1のテキストを変えてみましょう。(もちろんApplyします)




ちゃんと、Variantで作られた真ん中のオブジェクトも変わりました。

では、Variantの方のTextの文字を変えて、Obj1のImageの色を変えてみましょう。




こんな感じになります。

Obj1の変更はVariantへ引き継がれる。ただし、Variant側で触った個所については継承されない。
といった感じなんでしょうか?

これが、プレハブのバリアントです。

という感じで、Unity2018.3のプレハブは色々できて便利になりましたね!

それでは!あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】プレハブをInstantiateしてスクリプトにアクセスするとき。 

こんにちは。
大坂です。

今日も寒いですね!
インフルエンザも流行っているようなので気を付けてくださいませ。

タイトルの通り、プレハブをInstantiateしてスクリプトにアクセスするときはどうしてますか?
うちは今までこんな感じに書いてました。

    public GameObject prefab;

void Start() {
GameObject obj = Instantiate(prefab, transform, false);
BlogObj blogObj = obj.GetComponent<BlogObj>();
blogObj.BlogTest();
}

GameObject を持っておいて、GetComponentでスクリプトを取得して呼び出したいメソッドを呼び出す感じですね。

でもInstantiateってGameObjectじゃなくて、GameObject に貼り付けたスクリプトを指定してもオブジェクトの生成ができるんですね!
ということでこんな書き方ができます。

    public BlogObj blogObjPrefab;

void Start() {
BlogObj blogObj = Instantiate(blogObjPrefab, transform, false);
blogObj.BlogTest();
}

GameObjectに貼り付けたスクリプトを持っておいて、Instantiateで指定して生成するとそのままスクリプトにアクセスできますね!
もちろん指定したTransformにオブジェクトも生成されます。
こんな書き方ができると知らなかったので紹介です!

では今週もこれにてノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Unity2018.3で新しく追加されたプレハブモード(?)が使いやすいんすよ!是非つかってみて! 

こんにちは。坂内っす。

皆さんUnity2018.3使ってますか?
プレハブ周りがとても便利になって使いやすいって巷で有名なんすよ。

なにがって?

「Imageオブジェクトを作ってテキストを中に配置していって、これを後で複数おく時のためにプレハブ化しておこーっと。今は使わないからけしとこ。」
→「あ!!テキストの中央寄せ忘れてた!」

って時。

今までならこんな感じでやってましたよね。



①プレハブ作成
②「あ!テキスト直さないと」
③プレハブからオブジェクトを作り直す
④修正
⑤Applyボタンでプレハブを保存

こんなことをしていたのが、Unity2018.3だとこんな感じでできるようになったんですよ!!

プレハブ作るところまでは同じなので割愛。



何をしたかって?

①「あ!テキスト直さないと」
②プレハブモードに変更
③修正
④以上。

これ凄い簡単じゃないですか?
わざわざプレハブからオブジェクトを作りなおして、Apply押さなくていいんですよ!

これくらいの小さいプレハブならいいんですが、色々詰まっているような画面でプレハブ直すときめんどくさい&ミスとかしそうで嫌でしたよね!

これがUnity2018.3で解消!!

ってことで、便利なUnity2018.3の機能を1つ取り上げてみました。

あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Visual Studioで任意の場所でコードを折りたたみたい。 

こんにちは。
大坂です。

2019年の仕事開始して1回目の木曜日です。
今年も頑張ってブログを・・・何か少しでもお役に立てれば幸いです。

さて、新年一発目もネタはあんまりないので簡単なやつ。

Visual Studioではデフォルトでメソッドや、if文、for文など「{}」で括っている部分を折り畳める機能がありますね。
これです。


一応折りたたむと。

こんな感じでコードを折りたたんでくれます。

でも、任意の場所で折りたたみたいときがあります。(ないですか?
そんなときは「#region」「#endregion」を書けば折り畳めますよってだけなんですが。

こんな感じで折り畳めないところ。


「#region」「#endregion」を書いてあげると。

折り畳めるのが出てきますね。

で、折りたたむとこんな感じ。

後ろに書いた文字が出るのでわかりやすくしとくといいですね。

ちなみにVisual Studio上で「-」「+」をクリックすれば折り畳めたりしますが、折り畳める箇所にカーソルがあれば、
「Ctrl+M+M(Ctrl押しながらMを2回)」でも折りたためます。

ということで微妙なネタですが、これで終わりです。
ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】新年の挨拶だけ。 

明けましておめでとうございます!
ハルシオンシステムも今日から仕事始めです!
今年もより一層よろしくお願い致します!
今年こそ最高のゲームをリリースできるよう一層頑張ります!

今年も技術ブログとして、少しでも皆さまのお役に立てればいいなーと思っております。

ということで、本日は挨拶のみとさせて頂きます。

ではでは、あでゅ~ノシ

Category: その他日記

tb 0 : cm 1