ぱふの自由帳

週3更新(火・木・日)を目指すUnityブログ。良ければフォローお願いします(`・ω・´)

【Unity】ProBuilderに入門した! #02 家を建築 ~部屋と廊下作り~

はじめに

前回の記事では導入についての説明でしたー。
今回は「ProBuilderのこのボタンはこの機能で〜」のような説明回です!
...と言いたいところですが、紹介がめんど...とっても多機能なので、いきなり3Dモデルを作ります!

そして....
記事を書いている内に長くなる予感がしたので、家建築編は何回かに分けたいと思います〜。

環境

シリーズ通して変化しませんが、一応書いておきます。

  • Unity2018.1.0f2
  • ProBuilder 3.0.6

そうだ、家作ろう

早速、前記事の続きから作業を始めていきましょう!
今回の記事から家を作っていきますよ〜。

ProBuilder Windowの追加

Tools > ProBuilder > ProBuilder Windowを選択してProBuilder Windowを追加しましょう。このProBuilder Windowは頻繁に操作するそうなので、触りやすい所に配置するのが良いみたいです。

f:id:PafuOfDuck:20180505000138p:plain

追加すると、Scene画面にも変化が出ます。(赤枠)

f:id:PafuOfDuck:20180505000218p:plain

ProGridsの設定

この設定が何を意味するのか今の所不明ですが、オススメされたので従っておきましょう。以下のように設定して下さい。

f:id:PafuOfDuck:20180505001706p:plain

Cubeの追加

これは、いつも通り。お好きな方法でCubeを作成しましょう。
場所だけ(0,0,0)にしておきましょう。

f:id:PafuOfDuck:20180505001613p:plain

CubeをProBuilderで編集できるようにする

このCubeはフツーのCubeです。なので、ProBuilderで弄れるCubeに変身させましょう。
Cubeオブジェクトを選択して、ProBuilderizeボタンを押してください。

f:id:PafuOfDuck:20180505002554g:plain

ProBuilderizeボタンを押すことでProBuilderで編集可能になるようです。

Cubeをデカくする

ProBuilderのツールバーを面モードに変更します。

f:id:PafuOfDuck:20180505004829p:plain

すると、Scene上で面が選択できるようになり、面を色々弄れるようになります。
Wを押して操作モードを変更してCubeを大きくしましょう。

f:id:PafuOfDuck:20180505005434g:plain

CubeのとなりにCubeを作る

CubeのとなりにCubeを作るといっても、Cubeオブジェクトを追加するわけではありません。それでは何の意味もありません...笑

Shiftを押しながらサイズを大きくしてみましょう。切れ目(?)が入っていることから、Cubeが大きくなったのではなく、独立したCubeが作られたことが分かりますね。 (今後も説明のために”独立した”という表現を多用します。)

f:id:PafuOfDuck:20180505010113g:plain

このShiftを押しながらという行為はProBuilderでは、独立したモノを新たに追加するという意味合いを持つようです。(次のステップでも使用しますよ!)

出っ張りを作る

今度は拡大縮小の機能をShiftを押しながら使ってみましょう。(キーボードのRに割り当てられていると思います。)
すると、独立したサイズの違う面が生成されるはずです。次に、その面を一つ前のステップで行ったように伸ばしてあげましょう。

f:id:PafuOfDuck:20180505011609g:plain

はい。あっという間に出っ張りが出来ましたね。

出っ張りの隣にもう1つCubeを作ろう

今までの操作が理解出来ているか試すのにちょうど良いので、下のGIFアニメのような操作を行って下さい。(ヒント:Extrudeと表示されていないときにはShiftを押していません)

f:id:PafuOfDuck:20180505014402g:plain

最後の微調整は何をしていたかって?
では、次のステップにお進み下さい。

はい、出来た。

2つの部屋と渡り廊下が完成しましたねー。
最後のは渡り廊下っぽくするために部屋との高さを合わせたっぽいです。

一旦終了

長いと(読者さんも私も)ダレちゃうので、一旦休憩です!

次回は屋根作るっぽいので頑張るぞー。

次記事はコチラ

工事中

前記事はコチラ

pafu-of-duck.hatenablog.com

Twitterのフォロー歓迎です...(`・ω・´) ヨロシク!

【Unity】ProBuilerに入門した! #01 導入編

はじめに

「unityroomとのコラボイベントもあるし、ProBuilder使うかー!」と思い立ったので、数回に分けて【ProBuilderの導入〜モデリングの作成】を記事にしていきたいと思いますー。

なお、基本的にはチュートリアル(Unite Tokyo 2018 Training Day)に沿って学習するので、そっちを見たほうが早かったりするかもです...(`・ω・´)

ProBuilderとは?

Unity2018から無料で使えるようになった3Dモデリングツール。
どうやら便利らしい。

環境

  • Unity2018.1.0f2
  • ProBuilder 3.0.6

いざ、導入

どうやらProBuilderの他に2つほどAssetを追加すると良いらしいです。
(必須ではなさそう?)

この2つはAssetStoreから各自インストールお願いします。
(AssetStoreが分からない人はググってね! )

ProBuilderの導入

  1. Unity2018以前のバージョンの方はこちらからアップデートをしてください。 ※ アップデートすると古いプロジェクトがうまく立ち上がらなくなる可能性もあるので、自己責任でお願いしますー。

  2. Unity2018が用意できたら3Dのプロジェクトを作成してください。

  3. UnityにProbBuilderをインストールします。
    Window > Package Manager を開き、Allの方からProBuilderをインストールしてください。(未インストールの場合、赤枠の箇所にinstallボタンがあるはずです)
    f:id:PafuOfDuck:20180504181818p:plain f:id:PafuOfDuck:20180504182943p:plain

導入完了?

動画曰く、全ての導入が終わるとScene画面が以下のようになるらしいです。

f:id:PafuOfDuck:20180504232138p:plain

「あれ?ツールバーみたいなの出てないんだけど...」という私のような方も慌てないでください。Tools > ProGrids > ProGrids Windowを選択すると表示されるようになります!

導入完了!

ProGridsやPolybrushの用途もまだ不明ですが、以上で導入は完了です!
次回はProBuilderを実際に使ってみた記事になるはず...?

次記事はコチラ

pafu-of-duck.hatenablog.com

Twitterのフォロー歓迎です...(`・ω・´) ヨロシク!

【Unity】UniQuはじめました。(2018/7/19最終更新)

目次

はじめに

Unityの質問用コミュニティUniQuをSlackで作成しましたー!

この記事はそんなUniQuについてまとめております〜。
参加者は一度目を通してくださいね!

UniQuってどういう意味?

UniQu = Unity + Questionです。

...ネーミングセンスは気にするな!

UniQuへの参加方法は?

私(@PafuOfDuck)にTwitterでDMを送ればOKです!
この記事へのコメントでも大丈夫かも...?

「I'mガチ初心者!OK?」「Slack?美味しいの?」という方もご相談ください〜。

参加後に行うことは?(読んでね!!)

  • randomで挨拶
  • 全てのルームにデフォルトで参加するので、興味のない部屋は適当に扱う

で大丈夫です!slackへの絵文字の追加もご自由にどうぞ!

各チャンネルの使い方

チャンネル名 目的
demand コミュニティへの要望を書き込んじゃいましょ!
general 「コミュにチャンネル追加しました!」のような全体連絡に使用します。 基本的に使用はしないでください。
promotion 「作品を見てくれ!」「評価してくれ!」用のチャンネル。宣伝はココのみでお願いします。
question_box 質問用です。気軽に聞いてみましょう!(質問のルールは必ず読んでください!)
random 全員が使えるおしゃべり場
share 「良いこと知った!or 良い記事見つけた!教えてやんよ!」は是非こちらに!
times_XXX 個人用の進捗を呟いたり、個人Twitter感覚でどうぞ!(以下に詳細あり)

times_XXXの運用方法

このチャンネルは個々人で作成してください。作成したらrandomチャンネルで宣伝するのを忘れずに!

  • 進捗をつぶやく
  • 上手く動かないなぁ...(チラチラ)
  • 「今起きた」「おやすみ」とかつぶやく

のような感じで、自分の好きなようにお使いください!

このチャンネルへの参加は任意ですので、気になる方のチャンネルに自由に参加してくださいね!

ここからチャンネル一覧を確認して、times_XXXのチャンネルへ参加できます。

f:id:PafuOfDuck:20180719134454p:plain

質問のルール(必読!!!)

ルールといっても簡単です!

  1. 質問をする方は最後に(未解決)をつけてください。
    f:id:PafuOfDuck:20180430085318p:plain

  2. 質問に答える方はスレッドを開始して返信をお願いします。
    f:id:PafuOfDuck:20180430085321p:plain

  3. スレッド内で会話する際は画像の赤枠のチェックボックスにチェックをつけないでください。
    f:id:PafuOfDuck:20180430085314p:plain

  4. 質問が解決したら、質問者の方は最後の(未解決)(解決済み)に変更してください。 f:id:PafuOfDuck:20180430085324p:plain

以下は間違えやすいので注意です!!

  • 質問した内容は削除せずに残しておいてください(後々誰かの役に立ったり、同じ質問に再度回答する手間を軽減出来そうだからです)

  • 途中で自己解決した場合は返信がついていなければ削除を、返信がある場合は「自己解決しましたのように」一言&(解決済み)に変更して消さないでください

チャンネルへの参加方法

好きなチャンネルを選んで参加可能です。
チャンネルへの参加方法はこちらの記事を参考にしてください。

よく分からない場合は個別に質問を貰えれば対応します。

会話のルール

現在、確立しているルールを掲載しておきます。

  • スレッドに返信する場合は下の画像のようにチェックを付けずに投稿してください。(付けると会話画面が見づらくなってしまうためです)
    f:id:PafuOfDuck:20180430222528p:plain

さいごにお願い

善意で成り立つコミュニティなので、分かる質問があればアドバイスをお願いします!もちろん、自分の時間を無理やり削ったりしなくて大丈夫です(`・ω・´)!

また、分からない質問であっても「こうしたらいけるかも?」「力になれません!」のような交流があると活気ある良いコミュになりそうなので、ご協力をお願いします...!

【Unity】'Random' is an ambiguous reference between 'System.Random' and 'UnityEngine.Random' というエラーを解決する

はじめに

タイトルでも書いていますが、'Random' is an ambiguous reference between 'System.Random' and 'UnityEngine.Random'というエラーが出た時の対処法をメモしておきます。

原因

コード内にRandom使ってるけど、System.RandomUnityEngine.Randomのどっちを使うつもりなの?ということがエラーの原因です。

ちなみにですが、このエラーはusing System;を追加した時に現れるはずです。

解決方法

どっちのRandomを使用するかを明示的に示してあげれば大丈夫です。
例えば、Random.Range(...)というコード部分でエラーが出ていれば、UnityEngine.Random.Range(...)と書き換えてください。

追記(2018/4/22)

フォロワーさんからusing Random = UnityEngine.Randomという方法を教えていただきましたー!
コード内で何度も同じことを書かずに済むので、こちらが良いですね!

おわり

SystemUnityEngineのどちらを使っても同じ動きをするとは限らないので、気になる方は双方のリファレンスをチェックしてから使用してくださいね!(`・ω・´)

【RuboCop-Linter】align the elements of a hash literal if they span more than one line.という警告に対処する

はじめに

タイトルにも書いたとおり、 align the elements of a hash literal if they span more than one line.という警告文に対処する方法です。

対処法

これは、2行以上であれば要素を揃えなさいという警告です。半角スペース1つでもズレていれば怒られます!
(上は半角スペース1つ分足りずに警告が出ています)

f:id:PafuOfDuck:20180409193309p:plain

f:id:PafuOfDuck:20180409193355p:plain

おわり

記事の内容ペラッペラですが、メモを残すことは大事というわけで...(`・ω・´)

【Unity2017.1】親オブジェクトの回転を無視したい!

はじめに

”親オブジェクトは回転させたいんだけど子オブジェクトは回転させたくない!”という方向けの記事です。

意外なことに、この方法の紹介記事が見当たらなかったので記事にしましたー。選択肢の一つとしてどうぞ!

Quaternion.Eulerを直接代入しよう!

子オブジェクトに以下のスクリプトをアタッチしてみましょう。

void Update(){
    gameObject.transform.rotation = Quaternion.Euler(x, y, z);
}

これで子オブジェクトの回転が親オブジェクトの回転に関係なく固定されるはずです。

注意:(x, y, z)にはWorld座標から見たオブジェクトのRotationを代入してください。 『World座標から見た』という意味が分からない方は、親オブジェクトを持たない状態でのRotationの値と考えてもらえれば良いです。

注意点?

gameObject.transform.rotationgameObject.transform.localRotationにしないようにしましょう。

おわり

一番最初に思いつきそうな単純な方法なのですが、なぜ記事がなかったのか...ぐぐーる力が無いのでしょうか...(。´・ω・`)

【Android】アプリのインストール時に発生する「このアプリはインストールされていません」というエラーの解決法

はじめに

Unityの実機デバッグ時にAndroidで.apkファイルを開いてインストールしようとするとこのアプリはインストールされていませんというエラーが出てしまう...。
そんな時に役立つ(かもしれない)記事です。

おそらくUnity以外で生成した.apkでも大丈夫です。

解消法

  • 設定 > アプリケーションからアプリがインストールされているか確認して、インストールされていればアンインストールしてください。

  • 設定 > アプリケーションからアプリがインストールされているか確認して、すべてのユーザーからアンインストールを選択して全てのユーザーからアンインストールをしてください。

私は2つ目の方法が必要な状況に遭遇したことないのですが、ネットで見つけたので参考に記述しておきました〜。

おわり

単純なことなのですが、このエラーに出会った時は「なんやこれ?!」ってなったので記事に直しましたー。

記事とは関係ないのですが、スマホにマルチユーザー機能とかあるのですねー。こういうテストもしなければならないのでしょうか..(´・ω・`。)メッチャタイヘン

【Xcode】”〜のiPhone is busy: Preparing debugger support for 〜のiPhone”というエラーを解消出来るかもしれない方法

はじめに

〜のiPhone is busy: Preparing debugger support for 〜のiPhoneというエラーに困っていませんか?
今回はこのエラーを解消できるかもしれない方法のメモです。

解消法紹介

以下の方法のどれかで解決するはずです。
解消しない場合はいくつか試してみてください。

※数字が小さいほど(個人的に)直る確率が高いものです

  1. PC上でiTunesが開いていれば閉じる
  2. iphoneを再起動
  3. Xcodeを再起動
  4. iphoneXcodeに接続し直す
    Window > Devices and Simulatorsを開いてUnpair Deviceを実行して登録を解除した後、再度登録し直します。

    f:id:PafuOfDuck:20180308231248p:plain

    f:id:PafuOfDuck:20180308231252p:plain

おわり

基本はiphone再起動+Xcode再起動で直る気がしますー!

「他の方法で解決したよ!」という方がいれば情報をいただけると嬉しいです〜。

switch文のスコープのお話

はじめに

ふとした時に役立つswitch文のスコープについての話です。

switch文のスコープ

違いが分かりますか?

2種類のswitch文を使用したコードを載せます。
違いを答えることが出来ますか?

switch(hoge){
  case 0:
    int i = 2;
    break;

  case 1:
    int i = 4;
    break;
}
switch(hoge){
  case 0:
    {
      int i = 2;
      break;
    }

  case 1:
    {
      int i = 4;
      break;
    }
}

違いを解説

1つ目のコードは動きませんが、2つ目は問題なく動きます。
原因は...そう!記事のタイトルにもあるようにスコープです。

switch文のスコープはデフォルトのままだとswitch文全体に及びます。すなわち、case 0内で宣言した変数をcase 1内でも使用できるのです。なので、1つ目のコードは同じ変数名で宣言をしているとみなされて動かなかったんですね。
しかし、case内で{}を用いると...{}内部にのみ適応されるスコープが出来上がります。そのため、2つ目のコードは問題なく動いたのです。

おわり

switch文の内部で凝った実装をするとスコープが邪魔をしてきます。
「実装方法に問題がある!」と言われてしまえばそれまでですが、変数のスコープで困った場合は{}で解決しちゃいましょう!

追記:{}で囲むとswitch文に限らず新たなスコープを作成できるようです。指摘してくれた方、ありがとうございます! ((((一回も使ったことなくて知らなかった...

【Unity】2点間の距離を求めるいくつかの方法

はじめに

2点間の距離を求める方法がいくつかあるので紹介したいと思います!
是非、自分好みの方法を探してみて下さい〜。

方法紹介

その1:三平方の定理

三平方の定理の詳細は解説サイトにお任せします。

直角三角形の斜辺をC, その他の辺をAとBとすると、
A^2 + B^2 = C^2 ってなるやつですね。


コードはこちらになります。

Vector2 posA = new Vector2(1f, 2f);
Vector2 posB = new Vector2(3f, 4f);

float distance = Mathf.Sqrt(Mathf.Pow(posA.x - posB.x, 2) + Mathf.Pow (posA.y - posB.y, 2));
  • Mathf.Pow()は累乗を行う関数

  • Mathf.Sqrt()は与えた数を平方根に直す関数

その2:magnitude

magnitudeはベクトルの長さを返してくれます。
そのため、最初に2点の引き算を行うことでベクトルに変換して使用します。

Vector2 posA = new Vector2(1f, 2f);
Vector2 posB = new Vector2(3f, 4f);

float distance = (posA - posB).magnitude;

その3:Distance()

Distance()は2点を与えると2点間の距離を返してくれます。

Vector2 posA = new Vector2(1f, 2f);
Vector2 posB = new Vector2(3f, 4f);

float distance = Vector2.Distance(posA, posB);

さいごに

個人的にはその3が好きですね〜。
距離っていう名前の関数名なので後から見ても分かりやすいですし!

好きな方法を模索してみて下さい!では〜。