ぱふの自由帳

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

【Unity】EventTriggerを使ったらScrollViewが機能しなかった話

はじめに

Unityのデフォルト機能であるScrollViewを使っているときに下のような問題にぶち当たりました。

  • ButtonだとScrollViewは動く
  • EventTriggerをアタッチしたオブジェクトだとScrollViewが動かなくなる

参考GIF↓↓↓(Button以外はEventTriggerがアタッチされています) f:id:PafuOfDuck:20180818214959g:plain

Buttonはイベントの発行タイミングをイジれないので使いたくない...。
なので、EventTriggerを使いたいのに...こんなのヒドい!

となりまして、解決したのでメモを残しておきます〜。

代替案

Unityの内部を理解していないので詳しくは分かりませんが、あるオブジェクトAにEventTriggerを使ってしまうとAの上ではScrollViewのスクロールが無効化(当たり判定が貫通しなくなる?)されるようです。

そこで、EventTriggerと同じ機能を自前で実装することで解決します。
(おそらく、厳密には同じではないです。同じだとScrollViewが機能しませんから笑)

実装

今回は例として、EventTriggerのPointer Clickと同じ機能をつけたいと思います。

以下のスクリプトを実装して、EventTriggerの代わりにアタッチしましょう。

using UnityEngine;
using UnityEngine.EventSystems;

public class ContentClickListener : MonoBehaviour, IPointerClickHandler {
    
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("クリックされたよ。");
    }
}


すると、以下のGIFのようにScrollViewのスクロールを妨げずにEventTriggerと同じ機能が使用可能になります!パチパチ!!

f:id:PafuOfDuck:20180818221138g:plain


今回はPointer Clickを実装したかったのでIPointerClickHandlerを実装してOnPointerClickメソッドを実装しましたが、他のイベントも【基本的に】同じように実装できます。

GIFを見ると、ドラッグするとクリックが無効化されていますね。これはUnityの仕様で、ドラッグが始まるとクリックがキャンセルされるようです。(気になる方はググってみてください)

おわり

EventTrigger (EventSystem側?) でも当たり判定を貫通させるパラメータありそうだけど見つからなかったので、この方法で押しました〜。
知っている方がいましたら教えてください!

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

【Unity】あれっ...広告が表示されない!そんな時【アプリ全般?】

はじめに

以下の方に役立つかもしれません。

  • テスト広告は出るのに、本番用の広告が出ない
  • ちょっと前まで広告が出ていたのが、急に出なくなった

あくまで解決法の1つですので、解決しない場合はグーグルの海に戻りましょう。笑

対処法

広告IDをリセットすると直る場合があります。

Android

Android端末からGoogle設定 > 広告 > 広告IDをリセットを選んでIDを新しく生成しましょう。

iOS

iOS端末から設定 > プライバシー > 広告 > Advertising Identifierをリセットを選んでリセットしましょう。

(ついでに『追跡型広告を制限』がOFFかを確認しましょう。)

なんで表示されない?

本番用の広告を連続で大量に取得してしまうと、広告会社からIDで識別されて弾かれているケースがあるようです。そのためIDを変えることで再度表示されるようになる場合があるようです。

おわり

そもそもですが、IDが弾かれる程の本番用の広告をテストで取得してしまうと広告のアカウント自体がBANされてしまう可能性がありますよ!規約違反なので。笑(経験者は語る)
どうしても不安な方はリリース前の瞬間だけチラッと確認する程度に抑えておきましょうね!

ちなみに、IDをリセットすると自分にあった広告を出さなくなる(初期化されてしまう)ので、実際に使っている端末でテストする場合は気をつけて下さいねー!

【Unity】iOSでcocoapodの初期設定が必須になった?【.xcworkspace消失事件】

はじめに

いつの間にか、iOSのプロジェクトをxcodeでビルドする際にはcocoapodで設定を行わないと. xcworkspaceすら作成されなくなったので対処法を書いておきます。

!!注意!!
きちんと調査していませんので、事実と異なる場合があります。
もしかしたら、私の環境だけかもしれませんし...

訂正があればじゃんじゃん言ってくれると助かります!

cocoapod?

iOS/Mac向けのアプリを作成する際のライブラリ管理を行ってくれます。

cocoapodの環境を構築する

ターミナルを起動して以下のように打ちましょう
sudo gem install cocoapods

インストールが終了したら以下のコマンドを打って下さい
pod setup

以上で完了です。

cocoapodでプロジェクトにライブラリを導入する

ターミナルでコマンドを打って、プロジェクトファイル (UnityでiOSビルドを行って出来上がるフォルダです) まで移動して下さい。そして、以下のコマンドを打ちましょう。
pod init

こうすることでPodfileが作成されます。確認してみて下さい。

ここで、Podfileに変更したい内容があれば編集しましょう。今回は編集内容については省略させていただきます。

cocoapodを用いて、プロジェクトにライブラリを初めて導入するときは以下のコマンドを実行します。
pod install

なお、2回目以降の場合 (追加や削除) は以下のコマンドを実行します。
pod update

すると......
無事、hogehoge. xcworkspaceが出来上がっていると思います!

おわり

最初は「.xcworkspaceが無い!!なんで??」ってパニックになりましたが、cocoapodで初期設定するとなぜか出来上がりました...笑

cocoapodの使い方については書きます。きっと..きっと......。

何か補足や訂正があればコメントください...><。

【Unity】positionやColorの要素を変更するコードについて

はじめに

まずは下のコードを見て下さい。

// (1f, 1f, 1f, 1f)のColorのImageコンポーネントを持ったオブジェクトAがある
// このAのImageのColorを(0.5f, 1f, 1f, 0.1f)にしたい

Color tmp = A.GetComponent<Image>.color;
tmp.r = 0.5f;
tmp.a = 0.1f;
A.GetComponent<Image>.color = tmp;

// もしくは
Color tmp = A.GetComponent<Image>.color;
tmp = new Color(0.5f, 1f, 1f, 0.1f);
A.GetComponent<Image>.color = tmp;

中級者以上の方は分かりませんが、初心者の方ならこんな感じで書いているのではないでしょうか? このコードを書いていて、以下の悩みをお持ちの方に役立つ記事だと思います。

  • コードが長くなって見づらい
  • これを一発で行う関数が欲しい
  • どの要素を変更したのか見やすくしたい

知っておくと良い(?)前提知識

以下の知識は必須ではありませんが、知っていればコードの意味が理解できます。

  • 拡張メソッド
  • null許容型 (int? ←コレ)
  • 名前付き引数

ソースコードをぺたっとな。

public static class ImageExtension
{
    public static Image ChangeColor(this Image image, float? r = null, float? g = null, float? b = null, float? a = null)
    {
        var c = image.color;
        if (r.HasValue) c.r = r.Value;
        if (g.HasValue) c.g = g.Value;
        if (b.HasValue) c.b = b.Value;
        if (a.HasValue) c.a = a.Value;
        image.color = c;
        return image;
    }
}

【超初心者の方へ】
ImageExtension.csというファイルを作成して、そこにこのコードを貼れば大丈夫です。ファイルの作り方がわからない場合は...ググろう!!

使い方

”はじめに”で見本として使ったコードを書き換えてみますよー。

// (1f, 1f, 1f, 1f)のColorのImageコンポーネントを持ったオブジェクトAがある
// このAのImageのColorを(0.5f, 1f, 1f, 0.1f)にしたい

// 必要な要素だけ指定して変更できる
A.GetComponent<Image>().ChangeColor(r:0.5f, a:0.1f);

どうでしょう???
スッキリ&可読性が向上した気がしませんか?!

おわり

「おー。イイネ。」と思った方は是非導入してみて下さい〜。

......
ちなみにですが、このコードはUniQuという私が運営している初心者OKのUnity助け合いコミュニティで ”すずきかつーきさん (@divideby_zero)" からいただいたコードの一部をそのまま使用しています。

UniQuについて、気になった方は私のTwitterのDMからご連絡ください〜。
↓以下UniQu参考記事↓

pafu-of-duck.hatenablog.com

【Unity】NCMBを使うとビルドエラーが出るときのパフ流解決法

はじめに

タイトル通りNCMBをプロジュクトにインポートしてビルドするとエラーが起こることがあります。以下の要件に心当たりがある場合はこの記事が奴に立つかもしれません!

  • Admobを使用している
  • Googleが提供している機能を使用している
  • 良く分からないけど、何かしらの追加機能ライブラリをネットから追加した気がする

注意!!!

この記事は2018年7月に書いたものですが、この解決法を実践したのは2018年3月ぐらいです。
現在は通用しない可能性があります!

(新しく記事書くとみんなに喜ばれるしおすすめだよ...!笑)

原因探し

色々ネットで探してもあまり原因がわからず... 「ぐぬぬ...」と試行錯誤していく内に "Androidの設定ファイルが重複している" ことが原因なのかなという結論に。

語弊があるかもですが、多分、おそらく、コンフリクトだと思います。

解決方法

と、いうわけでAndroidの設定ファイルを整理してあげましょう!

Asset > Plugins > Androidフォルダの中身を以下のようにして下さい。

f:id:PafuOfDuck:20180718193815p:plain

そしてビルドしてみましょう。
...なおったはず?

おわり

あくまで自己流なので、写真にも不要なモノが入っていたり、もっと最適な方法があるかもしれません!

...
...
...動けば良いのだー!笑

【Unity】Animationから関数を呼び出す方法

はじめに

Animationの中で変数は変更出来るケド...関数って呼び出せるの?

という方のために、関数を呼び出す方法についてですー。

環境

  • Unity2018.1.0f2

やり方

下画像はAnimationウィンドウのスクショです。
赤枠をクリックか黄色枠で右クリックすることで関数を呼び出すAnimation Eventを追加することが出来ます。
f:id:PafuOfDuck:20180512042319p:plain

追加すると以下の画像のような印がつきます。
f:id:PafuOfDuck:20180512042639p:plain

印部分をクリックするとInspectorが以下のように表示されるので、実行したい関数を選択しましょう。
f:id:PafuOfDuck:20180512042809p:plain

すると、Animationの実行時に関数が実行されるはずです。

注意

  • Animationを行っているオブジェクトにアタッチされているスクリプトの関数を選択可能です。子オブジェクトにアタッチしているスクリプト内の関数を呼び出すことは出来ません。

  • privateでもpublicでも関係なく呼び出せます。

さいごに

Animationで子の値を弄れるんだから、子オブジェクトの関数も呼び出せるようにして欲しかったり...(。´・ω・`)

Twitterのフォロー歓迎です...(`・ω・´) ぜひ!

【Unity】ProBuilderに入門した! #03 家を建築 ~屋根作り~

はじめに

前回の記事では部屋と廊下を作成しましたー。
今回は屋根づくりをやって見たいと思います〜。

環境

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

  • Unity2018.1.0f2
  • ProBuilder 3.0.6

早速、家づくり

屋根のモトを追加

これは前回の復習ですね。
屋根となる部品をShiftを押しながら追加しましょう。

f:id:PafuOfDuck:20180505175150g:plain

屋根作り(基本)

ここから少し複雑です。
まず、屋根に不要な上面を削除します。
上面を選択して、Delete Facesをクリックすると削除できます。

f:id:PafuOfDuck:20180505175258g:plain

次に、削除した面の頂点を全て選択します。
一つずつ選択していく方法とSelect Holesを使って一気に選択する方法があります。GIFアニメは後者を使用しています。

f:id:PafuOfDuck:20180505175305g:plain

最後に、Collapse Verticesで選択した頂点を合わせます。(キュッと結びつけるようなイメージ)

f:id:PafuOfDuck:20180505175405g:plain

はい。屋根っぽくなりましたね。

屋根作り(応用?)

時間がある方はこちらをどうぞー。
尖った屋根を一般的(?)な形に直していきたいと思います。

まず、屋根の面を2つほど削除したいのですが、頂点を共有しているので上手く削除できません。なので、Split Verticesで頂点の共有を削除しましょう。
共有を削除したのちに、2つの面を削除しましょう。

f:id:PafuOfDuck:20180505190310g:plain

次に、残った2面を良い感じに変形します。
そして、空いている箇所をFill Holeという機能を使って埋めます。

f:id:PafuOfDuck:20180505193722g:plain

最後に、追加した面が砂時計のような6角形になっているので、Connect Verticesを利用して分割しておくと良いようです。(6角形は色々と不便らしいです)

f:id:PafuOfDuck:20180505193730g:plain

もう一つの部屋にも適当な屋根を作る

お好きなように作ってください。作らなくても良いです。笑 GIFアニメのような適当さでも問題ありません。

f:id:PafuOfDuck:20180505194229g:plain

部屋が完成!

記事としては長いですが、慣れれば5分程度の作業量だと思います!

今のところ、家の中を見ることは出来ません(下のスクショ参照)が次回は内側から見られるように設定していく予定です〜。

次記事はコチラ

工事中

前記事はコチラ

pafu-of-duck.hatenablog.com

Twitterのフォロー歓迎です...(`・ω・´) ぜひ!

【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

さいごにお願い

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

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