09 «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.» 11

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

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

 

【ハルシオンブログ】Unityで複数オブジェクトをアサインする時にいっぱいあるとめんどいですよね。こうすればいいらしいですよ? 

こんにちは!
台風過ぎたら暑いっすねぇ~ 坂内です。

さて、今週は金曜日にTGS2017にいてきますよ!
全然飲みでしか外出しないくらい歩いてないので、毎年TGS行くと足が攣ったり筋肉痛に・・・
どんだけひ弱なんでしょうか。
今年もいくつかのブースにお邪魔しますが、面白い話聞けたらいいなぁ
とりあえずTGS終わった後に飲もうかなって思ってますが、金曜の夜海浜幕張辺りで飲みたいと思ってる方いたら、Twitterで@zabosamaまでお声かけください。

それじゃUnityのお話。

ちょっとした小技ですが、「複数のオブジェクトをまとめてアサインする方法」です。

例えばこんな感じの物を作って。



こんなコードを書いた場合。
using UnityEngine;
using UnityEngine.UI;

public class TestBlog : MonoBehaviour {

public Text[] texts;

void Start () {
for (int i = 0; i < texts.Length; i++) {
texts[i].text = "テキスト" + i;
}
}
}


textsにuGUIのテキストを全部アサインしようとすると、こうやってました。



めんどくさーーーーい!!

これ、7個くらいならまだいいけど、20個とかそれ以上とかいちいちやってられませんよね!

そんな時は以下のようにすると1発でできますよ!

①アサイン先のコンポーネントのInspectorをLock!!!
②テキストオブジェクトを全部選択して、アサイン先へドラッグ&ドロップ!!

これだけ!!!





ほら!ほらほら!
めっちゃ簡単!

あれ?皆さん知ってました?

俺最近知りましたよ・・・・

って簡単な小技でした!あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】シーンにあるオブジェクトを別シーンに移すのに一回プレハブにして移すときは気をつけようねって話 

こんにちは。
大坂です。

今週ももう木曜日ですね。
あっという間に日が進んでいる気がします。
年だからですかね?

まぁ今週も適当なネタで書いていきますかね。

現状作っているシーンのオブジェクトをそのシーンからは消して、新しいシーンに移すときなんかに一回プレハブにして移すんですかね?
この前そんな感じでやった時にミスったので気をつけようねって話です。
まぁそんなことする人はあんまりいないのかもしれませんが。

とりあえずこんな感じでやると失敗するよと。








うん。なくなりましたね。
そりゃそうなんでしょう。
ということでちゃんとプレハブのつながりを消しましょうということで、Hierarchyのプレハブのオブジェクトを選択して、
メニューの「GameObject」-「Break Prefab Instance」をしましょうねというだけの話。
これね。


これやってから消したら解決です。


ということで今週も適当に終わりです。
ではまたです。ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】UnityにてInstantiateしたあとにSetParentしたらサイズがでかいんすけど?え?こうすればいいんじゃない?って話 

こんにちは!
もう来週TGSじゃないですか、やだー
遠いな・・・・楽しみだけど。

さて、Unityのちょっとしたネタ。

PrefabをInstantiate化した後に、SetParentをするとサイズがぶっ飛ぶお話し。
これ以前にも一度したことがあるんですが、ちょっと気になったTLがあったので書いてみます。


さて、実験してみましょ。

groupオブジェクトは空のGameObject。


redオブジェクトと、blueオブジェクトはそれぞれPrefabにしておきます。

Canvasオブジェクトに、以下のコンポーネントを付けます。

[Test.cs]
using UnityEngine;

public class Test : MonoBehaviour {

public GameObject redPref;
public GameObject bluePref;

void Start () {
Instantiate(redPref);
Instantiate(bluePref);
}
}



これで実行しても↓こんな感じのサイズになってしまいます。
といってもCanvasの下にないので表示されていませんが。


それでは、親をgroupオブジェクトにしてInstantiateしてみましょう。

using UnityEngine;

public class Test : MonoBehaviour {

public GameObject redPref;
public GameObject bluePref;
public Transform transformGroup;

void Start() {
GameObject redObj = Instantiate(redPref);
redObj.transform.SetParent(transformGroup);

GameObject blueObj = Instantiate(bluePref);
blueObj.transform.SetParent(transformGroup,false);
}
}




赤いオブジェクトの方が大きいまま、青いオブジェクトが小さい(想定サイズ)になります。

違いは、青いオブジェクトのSetParentの第2引数に「false」を入れています。



公式ドキュメントにも書かれていますが、第2引数がtrue(何も書かないとき)は「オブジェクトが以前と同じワールド空間位置、回転、およびスケールを維持」
ということで、falseを入れてあげることでプレハブのサイズ等を反映する感じになるっぽいっす。

ただし、以前ハルシオンブログで書かれているこちら
http://halcyonsystemblog.blog.fc2.com/blog-entry-330.html

こっちの方が楽なので、こっちでいいんじゃないかと。

using UnityEngine;

public class Test : MonoBehaviour {

public GameObject redPref;
public GameObject bluePref;
public Transform transformGroup;

void Start() {
Instantiate(redPref,transformGroup,false);
Instantiate(bluePref,transformGroup,false);
}
}





ということでInstantiateしてSetParentする流れについてでした。

それではあでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】いろんなシーンのクラスからアクセスが必要な時にやってること。 

こんにちは。
大坂です。

今日はすごくジメジメいしていますね。
Tiwtterのトレンドでも湿度100%とかって上がってました。。

さて、今週もちょっとしたネタです。
ゲームを作っているときに必要な情報を使用していろんなクラスからの処理をしたいときに、
いろんなクラスで毎回GameObjectを探してGetComponentしてってやるのも面倒なので、Staticにアクセスできるようにすると楽だよねってお話です。

とりあえずこんな感じ。
public class ItemManager : MonoBehaviour {

protected static ItemManager instance;
public static ItemManager Instance {
get {
if(instance == null) {
instance = (ItemManager)FindObjectOfType(typeof(ItemManager));
}
return instance;
}
}

void Awake() {
// シーン遷移では破棄させない
DontDestroyOnLoad(gameObject);
}

public void AddItem(ItemData data) {
// アイテムを追加する処理
~~~~~
}
}

かなり簡略化した例ですけど、アイテムを管理するクラスです。
ショップでアイテム買ったときとかドロップしたアイテムを拾うとか。
違うシーンで使うことを想定している感じです。

使い方はこんな感じ。
public class ItemTest : MonoBehaviour {
void Start() {
ItemData data = new ItemData();
// アイテム情報を作る処理は省略
~~~~~
ItemManager.Instance.AddItem(data);
}
}

簡単に処理を呼び出せますね。

と、こんなクラスを利用してゲームを作ったりしてますよってお話でした。
ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】UnityのuGUIで、ImageのサイズをTextのサイズと連動したいよねって時のやり方。 

こんにちは。坂内っす。
いきなり涼しくなってきました。
風邪にお気をつけてくださいまし。

さてもういくつねるとTGSですね。
多分今年も行くんじゃないかと思ってます。

さて、Unityのお話。

uGUIのImageの表にTextを置き、Textの量によって後ろのイメージのサイズも大きくしたい!!

こういうのね。




普通にImageの子供にText置くだけだと、こうなっちゃいますよね。




以下の設定をすると背景のサイズも変わりますよ。




背景のImageの設定
[追加]Vertical Layout Group
[追加]Contet Size Fitter
⇒Vertical FitをPreferred Sizeへ変更

Textの設定
[追加]Contet Size Fitter
⇒Vertical FitをPreferred Sizeへ変更

はい、これだけ。

ちなみにImageのPivot-Yを「1」にすることで、上部の位置を固定して、以下のような動きになります。
(こっちのほうが使うかな)




ということで、本日はこれまで!あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0