05 «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.» 07

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

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

 

【ハルシオンブログ】CanvasScalerをいじったら、Androidのタブレットで妹ちゃんが見えなくなった!?なんでやねん! 

こんにちは!坂内です!

大阪で大きな地震があった模様です。
震度6弱の大地震。死傷者もいるらしく、復旧も大変そうです。
知り合い関連はみんな無事ぽいかな?
あとアプリ開発界隈も無事ぽいかな?

さて、本日のネタは、「Canvas ScalerにあるScreenMatchModeを変更したら、Androidの一部の端末(タブレット系)で異変が起きた」です。

事の発端は、今回のバージョンアップでのお話。

今回のバージョンアップ前は、Canvas Scalerの設定は以下のようになっています。


ちょうどこの度私がGalaxyS9+を買い、縦長のスマホが出てきたっていうことで、今回のアプデでは以下のように設定しました。


これが問題の発端。

なんと!タブレットで起動するとこうなってしまうんです!!



ぎゃぁー 横100%でやったから上下が切れてしますんですよね・・・・じゃない!!
妹がいなくなったじゃぁあーりませんか!
これ、消えてしまう原因はちゃんとは把握していませんが・・・

ということで、CanvasScalerの設定を以下にしました。



たぶんこれがベストなんでしょうね。

【公式Canvas Scalerのドキュメント】
https://docs.unity3d.com/jp/530/Manual/script-CanvasScaler.html



ぶっちゃけ、ドキュメントみても全然意味わかりません。

Expandにした結果を簡単に説明すると、「縦横比はそのままで、縦か横のどちらかが画面サイズいっぱい」までスケールって感じですかね。
タブレットだと縦を基準に、縦長端末だと横を基準にスケールしてくれます。

いやー 上下が切れるのはわかるんですが、なんでキャラが見えなく・・・・こればかりは謎ですね・・・

んで、Scale With Screen SizeをExpandにしたら、タブレットではこんな感じになりました。



ということで、今後はExpandでいきますよ!


本日は以上!あでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】タップしている間の処理(長押し中の処理)はこうやればできますよね。これで●●ッピーバードも作れちゃうね! 

コンニチハ バンナイデス。

Unityの難しくない技術はハルシオンブログへ。
「あぁこうやってやればいいのか、簡単じゃん」をモットーにやっております。

「へぇ・・こうやるとできるんだ。でもちょっと良く分からないや…」っていう技術的に難しい話題は、ここでは扱いません(俺が理解できないものは記事にしません)


ということで、本日は「タップしている間」のやり方をば。
これ多分以前も書いたと思うんですが、最近また使う機会があったので再度書いちゃいます。

とりあえず、こんな感じでハトを置いてみました。


ボタンを離すと下降し、ボタンを押している間上昇するようなものを作ってみます。

次にハトが動くためのコードをちゃちゃっと書きます。
【Blog.cs】
using UnityEngine;

public class Blog : MonoBehaviour {

public GameObject objHato;

enum HATO_STATE {
UP,
DOWN,
}
HATO_STATE state = HATO_STATE.DOWN;

/// <summary>
/// 押した時の処理
/// </summary>
public void OnTapDown() {
state = HATO_STATE.UP;
}

/// <summary>
/// 離した時の処理
/// </summary>
public void OnTapUp() {
state = HATO_STATE.DOWN;
}

private void FixedUpdate() {
if(state == HATO_STATE.UP) {
objHato.transform.Translate(0f,0.1f,0f);
} else {
objHato.transform.Translate(0f, -0.1f, 0f);
}
}
}


「押している間」というのは、「押してから離すまで」というわけで、OnTapDownが「押した時」、OnTapUpが「離した時」として処理しています。

あとはボタンが押された時と離された時に上記の処理を呼んであげればいいわけです。

では、押された時と離された時の設定をしてみましょう。

始めはボタンとしてオブジェクトを作ったので、こんな感じになっています。



しかし、ボタンコンポーネントには押された時、離された時という判断はできません。
なぜならば、「ボタン」というのは、「ポチっと”押す”+”離す”」の一連の処理のことを指します。
そのため、押す、離すのそれぞれの処理を捕まえようと思っている場合は、一度Buttonコンポーネントを外します。

代わりに、「Event Trigger」コンポーネントを付けます。



EventTriggerではドラッグを始めるや、押す、離すなどの処理を取ることができます。

今回はEventTriggerのPinterDownにOnTapDownを、PinterUpにOnTapUpを指定します。


これで完成!


こんな感じでタップ中の処理を作ることができます。

また、今回はボタンのようなものを準備しましたが、「画面のどこをタップしてもおk」という場合は、EventTriggerを使わない方法もあります。

【Blog.cs】
using UnityEngine;

public class Blog : MonoBehaviour {

public GameObject objHato;

enum HATO_STATE {
UP,
DOWN,
}
HATO_STATE state = HATO_STATE.DOWN;

/// <summary>
/// 押した時の処理
/// </summary>
public void OnTapDown() {
state = HATO_STATE.UP;
}

/// <summary>
/// 離した時の処理
/// </summary>
public void OnTapUp() {
state = HATO_STATE.DOWN;
}

private void Update() {
if(Input.GetMouseButtonDown(0)) {
OnTapDown();
} else if(Input.GetMouseButtonUp(0)) {
OnTapUp();
}
}

private void FixedUpdate() {
if(state == HATO_STATE.UP) {
objHato.transform.Translate(0f,0.1f,0f);
} else {
objHato.transform.Translate(0f, -0.1f, 0f);
}
}
}


Update処理にあるInput.GetMouseButtonDownとGetMouseButtonUpが、「画面をタップしたとき」「画面から指を離した時」の処理になります。


以上で本日の記事終わり!あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】今週もiOSでちょこちょこと。 

こんにちは。
大坂です。

関東も梅雨入りしたみたいですね。
今日は起きたら雨やんでましたが。。

さて、今週もネタがないのでiOS対応ででちょこちょこ。
特に役には立たなそうですが。

最近Admobの「GoogleMobileAds.framwork」で「GLkit」と「MessageUI」を入れてなくてLinkerError出るのが数回。
毎回Xcodeで追加するのも面倒なので、Unityで「Assets」-「Plugin」-「iOS」に「GoogleMobileAds.framwork」を突っ込んで、
選択するとこんなのがあるのでチェックしてあげてビルドすると自動で追加されるよって話。

2018-06-07 1

もう一個、こんなエラーが出た時の対策。
2018-06-07 2

なんか「IPods-Unity-iPhone」のライブラリがないって言われてるね。
見てみるとそれっぽいのはあるんですけどね。

2018-06-07 3

でちょっと調べたらこいつ消したらいけるような感じだったので消してクリーンしてみて再ビルドしたら行けました。

はい!今週もこれだけです。
またノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】ポケガにアドフリくん入れてるんだけど、最新SDKで動画や動画ネイティブがでないんだよ!!!の対応方法 

こにゃにゃちは。坂内っす。

アプリ系の皆様。
動画広告いれてますか?
Admobのメディエーションですか?

うちはアドフリくんを入れてます。

最新のアドフリくんのSDKを入れて、Androidのプロジェクトに動画広告と動画ネイティブを入れようとしたら、

①動画を再生すると画面が真っ暗になって動画でない。
②動画ネイティブが再生されない。が、ネイティブの場所をタップすると画面は遷移する。

という2つの問題が発生しました。

解消方法としては、後程説明しますが、AndroidManifestに一部設定を追加する必要がありました。
(アドフリくんのマニュアルには乗ってない設定が必要)

※通常のプロジェクトではアドフリくんのマニュアル通りで動くと思いますが、複数のSDKが実装されている場合、AndroidManifestの設定が他のSDKで上書きされている可能性があるため、以下の設定が必要??

【①の対応】
AndroidManifest
マニュアルでは以下を追加と記載されている。
<activity android:name="com.glossomads.sdk.GlossomAdsFullScreen" 
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"/>
<activity
android:name="com.glossomads.sdk.GlossomBillboardAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>


動画再生で画面が真っ暗になって再生されてない時、AndroidManifestに以下を追加。
(赤文字追加)
<activity android:name="com.glossomads.sdk.GlossomAdsFullScreen" 
android:configChanges="keyboardHidden|orientation|screenSize"
android:hardwareAccelerated="true"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"/>
<activity
android:name="com.glossomads.sdk.GlossomBillboardAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>



【②の対応】
うちのプロジェクトではPrime31を導入しているので(楽天ポイントのSDKで使用)、AndroidManifestは以下のようになってたりします。
    <activity android:name="com.prime31.UnityPlayerNativeActivity" android:label="@string/app_name" 
android:screenOrientation="landscape" android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
</activity>


このままだと、動画ネイティブが表示されない模様。
そこで、こんなのを追加する必要があるみたいです。
(赤文字追加)
    <activity android:name="com.prime31.UnityPlayerNativeActivity" android:label="@string/app_name" 
android:screenOrientation="landscape" android:launchMode="singleInstance"
android:hardwareAccelerated="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
</activity>


ということで、この2つを追加することで、動画と動画ネイティブが出るようになりました。
(アドフリくんサポートありがとう!)

ということで、同じような現象が起きた方は、是非①や②をやってみてください!

では、あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 2   

【ハルシオンブログ】ダウンロードした画像を表示したらぼやーっとするようになった件 

こんにちは。
大坂です。

さてはて今日のネタ。
下の記事から処理も変えずにUnity2017.3にして実機で画像をダウンロードしてから
表示したら画像がぼやーっとなって見えなくなったというお話。
【Unity他】リア充ちょーすげー!そしてお邪魔します。からのー ネットワーク越しのデータ取得方法。

こんな風になっちゃいましたね。。

※クリックで拡大

とりあえず対策としてはここを参考に処理を変えたらとりあえずぼやーっとはしなくなりました。
【Unity】ダウンロードした画像からスプライトを作成する。

変えたのはこんな感じ。
Texture2D tex2D = www.textureNonReadable;
//画像を保存しているパスから画像の全バイトを読込む。
byte[] bytes = File.ReadAllBytes(Application.persistentDataPath + "/download/" + file[i] + ".png");
//テクスチャ2Dのコンストラクタ
Texture2D texture = new Texture2D(tex2D.width, tex2D.height, TextureFormat.RGBA4444, false);
//バイトデータから画像を読込み
texture.LoadImage(bytes);
//任意。
texture.Compress(false);

sprite[i] = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);


※クリックで拡大

とりあえず読める感じにはなりますね。
拡大すると汚いようですけど。。

では今週もこれでノシ

Category: 開発日記(Unity)

tb 0 : cm 0