ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、Railsかじり始めましたー!良ければフォローお願いします(`・ω・´)

【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のフォロー歓迎です...(`・ω・´) ぜひ!