ゆるゆる〜tech ver〜

勉強したこととかかく

HelloARして水平認識のGridLineを消す

anapple07-tech.hatenablog.com

こちらの記事の続きになります。

ARcoreで地面を認識すると白や赤、紫などの線がでてきますよね。 それを消していきましょう。

検索ワードは「arcore helloar remove white line」で検索して

github.com

こちらのコメントを参考にしました。

と言ってもYoutubeの動画を参考にしたのですが。。。

ちなみに今回の記事はarcore-unity-sdk-v1.6.0.unitypackage に関してになります。

上の参考にしたURLのコメントの中にあるyoutubeの動画は1.0.0なのでちょっと違うところがあり、 1.0.0ではTrackedPlaneVisualizer.csが1.2.0以降ではDetectedPlaneVisualizer.csになっています。

さて、地面認識のGridLineを消すには DetectedPlaneVisualizer.cs を開いてUpdateの中にあるL97あたりの

m_MeshRenderer.enabled = true;

こちらをコメントアウト。 あとはL111あたりのpublic void Initialize(DetectedPlane plane)の中の

m_MeshRenderer.enabled =true;

こちらを

m_MeshRenderer.enabled =false;

にすることでいけました。

f:id:anapple07_jp:20181225133013j:plain

HelloAR :)

ってことでHelloAR!!

ちなみに macOS Mojave Unity 2018.2.14f1 Galaxy S9+(Android8.0)

です。

基本的に下記のこちらの通りにやれば行けるのですが、

Quickstart for Android  |  ARCore  |  Google Developers

なにせAndroidアプリに間することは4年前にとりあえずやってみた以来で、今のPCにはとりあえずinstallして立ち上げたことのないAndroidStudioが入っているだけ、だったので何かと困りました。

開発者モードの設定

Build&Runしたら、No Android devices connectedって言われて、MacAndroid繋いだら充電はされるけど、何もおきずあれ??

[設定]→[端末情報]→[ソフトウエア情報]→[ビルド番号]連打で開発者向けオプションが爆誕

USBデバッグをアクティブにし、その後

https://www.android.com/filetransfer/:Android File Transfer

こちらをMacに入れておきます。

SDKのインストール

Android StudioをinstallするときにSDKも入れるかチェックをするらしいのですが、とりあえず私は入れてなかったらしく。 適当にprojectを作って f:id:anapple07_jp:20181222053646p:plain

この右上のところから

f:id:anapple07_jp:20181222053717p:plain

Android8.0のSDKをいれました:)

Build

それで前述のこのあたり通りにやりました。 Quickstart for Android  |  ARCore  |  Google Developers

Player Settings > Other Settings > Minimum API Level
Player Settings > Other Settings > Target API Level

Android 8.0にしました。

Buildする前に、Unity側で [Unity]→[Preference]→[External Tool]でJDKのpathを入れます。 (SDKはbuildするときに勝手にいれてくれた) f:id:anapple07_jp:20181222054342p:plain ちなみにJDKのpathは

/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

でした。

で、よーし!Build & Run!!

ってやってもアプリはinstallされたのですが、 Unityの初期の画像がでてくるだけで、カメラが起動するわけでもなくなにもおきず、、、。

事象としては

github.com

こちらと一緒で Scens>SampleScen

のチェックを外せば行けるそうですが、それでもうまくいかず、、、。

一時は途方にくれましたが、一旦一度入れたアプリをアンインストールして再度Buidl&Runしたらできました(^O^)/ワーイ

最初USBデバッグ有効にしてなくて、なんでデバイス認識してくれないのかわかんなくて、 apkファイルをメールで送って、、、とかってしてたからかなあ??

とりあえず部屋でもやってみたけど狭いからあんまり認識してくれるところがないので、 駅行く途中の道とかでドロイドくんを量産して 振り返って「まだいるーw」ってやって一人で遊んでる(^O^)/

HelloARしただけだけど、めっちゃ楽しい :) Hello worldできたときのキラキラした気持ちを思い出した :)

もっと色々できるようになりたいなー :)

動揺したけど、普通にただの配列のマージだね...

for my $x (@hoge, @fuga) {} みたいなコードあってなにこれ?!ふぁ?!って動揺したけど、普通にただの配列のマージだね...

#!/usr/bin/env perl
use strict;
use warnings;

my @hoge = (1,2,3);
my @fuga = (11,22,33);

for my $x (@hoge, @fuga) {
    print $x . "\n";
}

## output
#1
#2
#3
#11
#22
#33

herokuのDBにPSequelから接続する

heroku pg:credentials:url --app <app name>

Connection information for default credential.
Connection info string:
   "dbname=xxxxx host=xxxxx port=5432 user=xxxx password=xxxx sslmode=require"
Connection URL:
   postgres://xxxx

がでるので、PSequelのnew connectionでhostなどを入れる。

USE SSLにもチェックを入れる。

シェル書いててちょっとハマったこと

for file in `\find /hoge -maxdepth 1 -type f`; do
 echo $file
 # TODO...
done

ってやって /hoge/以下のディレクトリ名に対して操作したかったんだけど、 /hoge/配下にあるシンボリックリンクecho $file でファイル名が取り出されない。

それがわからなくてちょっとハマった。

Perlのdefindeとexists

definde はkeyがあってもundefならfalseになる。

exists はkeyがあればtrueになる。

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;

my $result;
$result->{test1} = 'undefind...';
$result->{test2} = '';
$result->{test3} = undef;

#defined
{   
    if ( defined $result->{test1} ) { 
        print 'defined test1 is ok' . "\n";
    }
    if ( defined $result->{test2} ) { 
        print 'defined test2 is ok' . "\n";
    }
    if ( defined $result->{test3} ) { 
        print 'defined test3 is ok' . "\n";
    }
    if ( defined $result->{test4} ) { 
        print 'defined test4 is ok' . "\n";
    }
    
    ### output ###
    ##defined test1 is ok'
    ##defined test2 is ok'
}

#exists
{
    if ( exists $result->{test1} ) { 
        print 'exists test1 is ok' . "\n";
    }   
    if ( exists $result->{test2} ) { 
        print 'exists test2 is ok' . "\n";
    }   
    if ( exists $result->{test3} ) {
        print 'exists test3 is ok' . "\n";
    }
    if ( exists $result->{test4} ) {
        print 'exists test4 is ok' . "\n";
    }

    ### output ###
    ##exists test1 is ok'
    ##exists test2 is ok'
    ##exists test3 is ok'
}