名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

【Unity】ゲームオブジェクトのCenterの位置を求めてみた

こんにちは、SAT-BOXのコアラです。

今回は↓の記事の続きです。
sat-box.hatenablog.jp

前回の記事では、UnityのCenter座標がどう求められているかを調べました。
Center座標とは↓の画像の通り、PivotではなくCenterになっているときの操作の起点ですね。
f:id:sat-box:20181015172103p:plain

今回は、このCenter座標を求める処理を書いてきました。
早速載せます。

using UnityEngine;
public class Sample {
    
    public static Vector3 GetCenterPosition(Transform target)
    {
        //非アクティブも含めて、targetとtargetの子全てのレンダラーとコライダーを取得
        var cols = target.GetComponentsInChildren<Collider>(true);
        var rens = target.GetComponentsInChildren<Renderer>(true);

        //コライダーとレンダラーが1つもなければ、target.positionがcenterになる
        if (cols.Length == 0 && rens.Length == 0)
            return target.position;
        
        bool isInit = false;
        
        Vector3 minPos = Vector3.zero;
        Vector3 maxPos = Vector3.zero;

        for (int i = 0; i < cols.Length; i++)
        {
            var bounds = cols[i].bounds;
            var center = bounds.center;
            var size = bounds.size / 2;

            //最初の1度だけ通って、minPosとmaxPosを初期化する
            if (!isInit)
            {
                minPos.x = center.x - size.x;
                minPos.y = center.y - size.y;
                minPos.z = center.z - size.z;
                maxPos.x = center.x + size.x;
                maxPos.y = center.y + size.y;
                maxPos.z = center.z + size.z;

                isInit = true;
                continue;
            }
            
            if (minPos.x > center.x - size.x) minPos.x = center.x - size.x;
            if (minPos.y > center.y - size.y) minPos.y = center.y - size.y;
            if (minPos.z > center.z - size.z) minPos.z = center.z - size.z;
            if (maxPos.x < center.x + size.x) maxPos.x = center.x + size.x;
            if (maxPos.y < center.y + size.y) maxPos.y = center.y + size.y;
            if (maxPos.z < center.z + size.z) maxPos.z = center.z + size.z;
        }
        for (int i = 0; i < rens.Length; i++)
        {
            var bounds = rens[i].bounds;
            var center = bounds.center;
            var size = bounds.size / 2;

            //コライダーが1つもなければ1度だけ通って、minPosとmaxPosを初期化する
            if (!isInit)
            {
                minPos.x = center.x - size.x;
                minPos.y = center.y - size.y;
                minPos.z = center.z - size.z;
                maxPos.x = center.x + size.x;
                maxPos.y = center.y + size.y;
                maxPos.z = center.z + size.z;

                isInit = true;
                continue;
            }
            
            if (minPos.x > center.x - size.x) minPos.x = center.x - size.x;
            if (minPos.y > center.y - size.y) minPos.y = center.y - size.y;
            if (minPos.z > center.z - size.z) minPos.z = center.z - size.z;
            if (maxPos.x < center.x + size.x) maxPos.x = center.x + size.x;
            if (maxPos.y < center.y + size.y) maxPos.y = center.y + size.y;
            if (maxPos.z < center.z + size.z) maxPos.z = center.z + size.z;
        }

        return (minPos + maxPos) / 2;
    }
}

ちょっと長いので詳しい説明は省きますが、この関数にtransformを入れればCenter座標を取得できます。


これでCenter座標求められたわけですが、次はそれを活用する例を紹介します。


f:id:sat-box:20181112185741p:plain
ここに人間と額縁があります。


どう見ても人間と額縁ですね。


人間のPivotは足にあり、額縁は中央にあります。
まず単純に、人間を額縁に入れてみたいと思います。

using UnityEngine;
public class Sample : MonoBehaviour {
    public Transform frame;
    public Transform human;

    void Start()
    {
        human.position = frame.position;
    }
}

こうすると


f:id:sat-box:20181112190846p:plain
はみ出しましたね。

これを、Center座標を求めてやれば収まることでしょう。
処理はコチラ↓

using UnityEngine;
public class Sample : MonoBehaviour {
    public Transform frame;
    public Transform human;

    void Start()
    {
        //Center座標を求める
        Vector3 humanCenterPos = GetCenterPosition(human);

        //humanをどれだけ動かすと、Pivotの位置にCenterを持ってこられるか求める
        Vector3 centerDis = human.position - humanCenterPos;

        //frameの座標と、humanのPivotとCenterの位置の差を足せば完了
        human.position = frame.position + centerDis;
    }
    
    public static Vector3 GetCenterPosition(Transform target)... //略しました
}


結果は・・・


f:id:sat-box:20181112191417p:plain

頭ぶつけてますが、中央に来ていることが分かります。

このように、Center座標を使って位置を合わせたり色々なことに使えそうです。

以上です。

新作Switchゲーム【ボクらの消しゴム落とし】リリース開始!!

みなさん、こんにちは!SAT-BOXのツバメです!

以前からお伝えしていた【ボクらの消しゴム落とし】

今日からリリースになります!

f:id:sat-box:20181025130011p:plain

価格は、税込み1,400円 になります。

もし、みんなでワイワイ遊びたい方は、ぜひ買ってみてください!

お子さんがいる方は一足早いクリスマスのプレゼントにどうでしょうか?

あらかじめダウンロードをしていただいた方は、ぜひ楽しんでください!

 

「ボクらの消しゴム落とし」専用紹介ページ

ボクらの消しゴム落とし  

 

↓購入はコチラから!

ec.nintendo.com

 

↓紹介動画

 

↓開発者のプレイ動画

以上、ツバメでした!

任天堂スイッチソフト[ボクらの消しゴム落とし]が発売間近です!

こんにちわ、SAT-BOXのペンギンです。

 

先日からお伝えしております、

任天堂スイッチソフト【ボクらの消しゴム落とし】の発売日は 11/8(木)です!

 もう今週ですよ!

 

11/7(水)までなら、あらかじめダウンロードで30%OFF

1,400円 980円 で購入することができます!

 

ニンテンドーeショップはコチラから

ec.nintendo.com

 

また、他の任天堂スイッチソフトも11/8(木)までセール中です!

・「Voxel Shot for Nintendo Switch(ボクセルショット)」※20%OFF
 800円 →  640円

・「机でサッカー」※20%OFF
 800円 →  640円

・「チョークダッシュカーニバル」※40%OFF

 800円  → 480円

 

 

※キャンペーン・セール情報についての詳細はコチラから

www.nintendo.co.jp

【ボクらの消しゴム落とし】開発者たちがやってみた【Nintend Switch】

こんにちは、SAT-BOXのコアラです。

11月8日(木)に配信開始される「ボクらの消しゴム落とし」を開発者たちでプレイしてみました!

4人プレイですごく盛り上がりました!是非ご覧ください!



ボクらの消しゴム落とし」は11月8日(木)配信開始!
税込1400円で購入できます!

11月7日(水)までならあらかじめダウンロードで980円です!


↓購入はコチラのニンテンドーeショップから!
ec.nintendo.com


↓「ボクらの消しゴム落とし」専用紹介ページです!
ボクらの消しゴム落とし


↓紹介動画もご覧ください!


新作Switchゲーム「ボクらの消しゴム落とし」のあらかじめダウンロードが始まりました!

みなさん、こんにちは。SAT-BOXのツバメです!

 

f:id:sat-box:20181025130011p:plain

弊社の新作Switchゲーム「ボクらの消しゴム落とし」の

あらかじめダウンロード今日から始まりました!

情報の方を公開させていただきます!

 

【「ボクらの消しゴム落とし」専用サイト】

ボクらの消しゴム落とし

 

【紹介動画】

www.youtube.com

 

f:id:sat-box:20181025130341p:plain

 

今作は、みんなでワイワイ遊ぶことができるパーティゲームになっており、

友達や家族と盛り上がること間違いなしです!

また、多彩なモードで1人~最大4人まで、手軽に楽しめる遊びがいっぱいあり、

一人でも十分やりこめる内容になっています!

 

いまなら、あらかじめダウンロードをすることで

1,400円980円30%OFFで購入することができるので、お得になっております!

期間は、11月7日(水)の23:59までとなりますので注意してください

 

Nintendo eShop

ec.nintendo.com

もし、興味のある方はこれを機会に購入を検討してみてはいかがでしょうか?

リリース日は11月8日(木)になりますので、よろしくお願いいたします。

 

以上、ツバメでした!

【Unity】ゲームオブジェクトのアイコン機能

皆さん、こんにちは!SAT-BOXのツバメです。

もうすぐ、10月も終わり、いよいよ冬の時期になってきますね

寒いの苦手なんですよね…。朝起きるのが辛いのが一番の理由ですね。

共感できる人もいるのではないでしょうか?

 

さて、本題になりますが、今回はUnityのゲームオブジェクトに付けることができる

アイコン機能の説明をしようかなと思います。

UnityのScene上に表示されるゲームオブジェクトですが、数が多くなってくると

かなり複雑なものになります。どのゲームオブジェクトなのかをHierarchy上で探すのも面倒ですよね。そこで、便利な機能がゲームオブジェクトのアイコン機能です。

f:id:sat-box:20181023122346p:plain

Inspectorのチェックボックス横のアイコンをクリックすると上記の画像のような

アイコンのリストが表示されます。

アイコンの種類としては、

1.ゲームオブジェクト名を表示するアイコン

f:id:sat-box:20181023123313p:plain

2.丸型・ひし形のアイコン

f:id:sat-box:20181023123320p:plain

3.Otherボタンで指定したテクスチャをアイコンとして表示

f:id:sat-box:20181023123329p:plain

になります。私はいつも1のゲームオブジェクト名を表示するアイコンを使ってます。

2と3は、実体のないオブジェクトに使うことが多いですね。

 

そして、アイコンの機能はもう一つ便利なのがありまして、

アイコンをクリックすることでアイコンが付いたゲームオブジェクトを

選択することができます!

なぜ、便利なのかと言うと、以下の点があります。

 

1.Scene上でMeshRendererなどがないオブジェクトは、クリックしても選択が

  出来ないので、アイコンを付けることで、Hierarchy上で探す手間が省ける

f:id:sat-box:20181023125137p:plain

2.Scene上で実体のあるオブジェクト同士がかぶっていると、選択が面倒くさいが

  アイコンをクリックすれば奥行きを無視してすぐに選択できる

f:id:sat-box:20181023125151p:plain

これらの点があるので、マップ作成などの複雑なシーンになる場合は結構重宝します。

ただ、アイコンだらけにすると返って分かりづらくなるので、ご利用は計画的に!

 

以上、ツバメでした!

【Nintendo Switch】ハロウィンセールのお知らせ!

こんにちわ、SAT-BOXのペンギンです。

 

今日は、ニンテンドースイッチのダウンロード用ソフトの

ハロウィンセールをお知らせします!

f:id:sat-box:20181018161559j:plain

・「Voxel Shot for Nintendo Switch(ボクセルショット)」※20%OFF
 800円(税込) →  640円(税込)

 

・「机でサッカー」※20%OFF
 800円(税込) →  640円(税込)

 

・「チョークダッシュカーニバル」※40%OFF
 800円(税込)  → 480円(税込)

 

期間は 2018.10.18 0:00 ~ 11.8 23:59 までとなっております。

 

※キャンペーン・セール情報についての詳細はコチラから

www.nintendo.co.jp

 

また、各ソフトの詳細については下記リンクからでも移動できます!

 

※Voxel Shot for Nintendo Switch(ボクセルショット)

ec.nintendo.com

 

※机でサッカー

ec.nintendo.com

 

※チョークダッシュカーニバル

ec.nintendo.com

 

セールで安くなっているので、購入を検討している人は今がお買い得ですよ! 

 

以上、ペンギンでした。