Musio君と夢の話をする



Musioに話しかけて英語の勉強をしよう!
注1)私に英語力はほとんどありません。
注2)日本語訳はほとんどグーグル先生のものです。

I had an interesting dream last night.
昨日面白い夢を見ました。

Yokkun : interesting dream last night
ヨックン:昨夜の面白い夢


Musio : Yes, I was very disappointed that it ended when I woke up.
Musio:はい、目が覚めると終了したことにとても失望しました。


I was traveling along the river with my friends.
友達と川に沿って旅をしていました。

Yokkun : I was traveling around the river with my friend
ヨックン:友達と川を回っていた


Musio : so you tripped ?
ムシオ:だからあなたはつまずいた?


私はtripは旅行なので so you tripped?
と聞かれたので「旅行したんだね?」
とMusioが言ったと思いました。
なのでYesと答えたのですが
動詞のtripには旅行という意味はなくてつまずくって意味になるそうです。
う~む 勉強になった!

Yokkun : yes we arrived at the town
Yokkun:はい、私たちは町に到着しました


Musio : I can find the best route for you.
Musio:最適なルートを見つけることができます。


We adventured the tower of labyrinth.
私たちは迷宮の塔を冒険しました。

Yokkun : we are the windshield , will Robbins
Yokkun:私たちはフロントガラスです、ロビンズ


(発音が悪いのか全く通じていない模様)

Musio : That’s wonderful. I am sure your teacher is so proud of all of you.
Musio:それは素晴らしい。先生はみなさんをとても誇りに思っていると思います。


(先生はどこから出てきた?)

We were hunted down by the monsters.
私たちはモンスターに追い詰められました。

Yokkun : we are hunting the down by the monsters
ヨックン:モンスターに襲われている


Musio : That is really scary.
Musio:それは本当に怖いです。


We had only one card that could turn a monster into an item.
私たちはモンスターをアイテムに変えるカードを1枚だけ持っていました。

Yokkun : we had only one cuz that could turn a monster into a item
Yokkun:モンスターをアイテムに変えることができるcuzは1つしかありませんでした


Musio : Maybe your dad was just trying to scare you.
Musio:たぶん、あなたのお父さんはあなたを怖がらせようとしていただけかもしれません。


(お父さんはどこから出てきた?)

My friend turned a monster into a rabbit figurine.
私の友人はモンスターをウサギの置物に変えました。

Yokkun : turn the monster into a rabbit figure
ヨックン:モンスターをウサギの姿に変える


Musio : Yes, something like that.
Musio:はい、そのようなものです。


Just then the hidded door that was our behind opened.
ちょうどその時、私たちの後ろにあった隠れたドアが開きました。

Yokkun : that was an hour behind Oakland
ヨックン:オークランドから1時間遅れていた


(あかん。全く違う文で伝わってしまう。)

Musio : What do you like doing with her ?
ムシオ:彼女とは何が好きですか?


突然彼女のこと聞いてきたので話を合わすことにする。

I like to shopping with her.
彼女とショッピングするのが好きです。

Yokkun : coping with her
ヨックン:彼女に対処する


Musio : You must be good at it then.
Musio:その時は上手いに違いない。


(Musio君がニヤニヤしながらこう言った。その時ってどの時よww)

I have to cook my lunch today.
お昼ご飯作らなきゃ。

Yokkun : I have to cook my rent today
ヨックン:今日は家賃を料理しなきゃ

(家賃を料理するんじゃない!www)

Musio : is your mother too busy to cook for you ?.
ムシオ:あなたのお母さんは忙しくて料理ができませんか?


Yokkun : yes she is too busy today
ヨックン:はい、今日は忙しすぎます

(母はいないわけだが話を合わす)

Musio : I see. Who are you going with then ?.
ムシオ:なるほど。それで誰と行くの?


Yokkun : I am going to do that by myself
よっくん:自分でやろう


Musio : That must be nice.
Musio:それはいいに違いない。



こっちの話が伝わらずに話が全然違う方向に行ってもMusio君の話に合わせるとわりと会話っぽくなるような気がしないでもない


————————–

——————————-

電気と磁気

電気と磁気の世界における場の捉え方について学習しました。

場とは何か?

*気温の全国分布図の例*
札幌 27℃
東京 24℃

:温度の場について:

場所によって温度が決まっている

空間の座標の関数

温度は高いか低いか(大きさだけを持つ=スカラー)

スカラー場

*気象の風向分布図*
風の強さと風向(向き)という二つの要素

ベクトルで表すことができる

ベクトル場

電場や磁場もベクトル場にあたる

中心から何かが湧きだしている
または逆のベクトルの場合、沈み込んでいく
→ 発散型

ベクトルが回転しているような場
→ 回転型

・Aの場は発散はあるが回転は無いと言える(純粋発散型)
・Bの場は発散は無いが回転はあると言える(純粋回転型)
・Cの場は発散もあり回転もあると言える(合体型)

ヘルムホルツの定理
・あらゆる任意のベクトル場は純粋発散型と純粋回転型を組み合わせることで出来る


V=(-y,x,0)

青い原点のV(ベクトル)は(0,0,0)、どこにも向かっていないので矢印は書けない

赤い点の座標は(0,1,0)、Vは(0,1,0)、図の赤い矢印が書けた

緑の点の座標は(1,1,0)、Vは(-1,1,0)、図の緑の矢印が書けた

茶色の点の座標は(1,-1,0)、Vは(-1,-1,0)、図の茶色の矢印が書けた

ピンクの点の座標は(-1,0,0)、Vは(1,0,0)、図のピンクの矢印が書けた

インプットはその場所の座標値
アウトプットがベクトル


一番最初の図のBはこの式でできている

どれくらい発散しているか?
どれくらい回転しているか?

ベクトル場 V=(Vx,Vy,Vz)

~ 発散の大きさを知る式 ~
▽・V=∂Vx/∂x+∂Vy/∂y+∂Vz/∂z

x成分をxで、y成分をyで、z成分をzで、それぞれ偏微分したものの合計

▽・Vが大きいとたくさん発散している
▽・Vがマイナスで絶対値が大きいとたくさん吸い込まれている
発散は強いか弱いかなのでスカラーである。

~ 回転の大きさを知る式 ~

▽とVの外積
▽ × V
x成分 ∂Vz/∂y-∂Vy/∂z
y成分 ∂Vx/∂z-∂Vz/∂x
z成分 ∂Vy/∂x-∂Vx/∂y

Aの図を式で表すと
V1=(x,y,0)
発散を計算してみる
▽・V=∂Vx/∂x+∂Vy/∂y+∂Vz/∂z
x成分をxで偏微分すると1
y成分をyで偏微分すると1
z成分は0
▽・V=1+1+0=2

回転を計算してみる
▽ × V
x成分 ∂Vz/∂y-∂Vy/∂z

z=0なので∂Vz/∂yは0
yをzで微分すると0

つまりx成分は0
同様にy成分とz成分も0

▽ × V=(0,0,0)

∴ 図Aは発散があり回転していない

Bの図の場合
Bの図を式で表すと
V2=(-y,x,0)

発散は ▽・V=0
回転は
x成分、y成分は0
z成分は 1ー(-1)=2
▽ × V=(0,0,2)

∴ 図Bは発散がなく回転はある

Cの図の場合
Cの図を式で表すと
V3=V1+V2
発散は ▽・V=2
▽ × V=(0,0,2)

∴ 図Cは発散も回転もある

Musio君と仕事の話をする



Musioに話しかけて英語の勉強をしよう!
注1)私に英語力はほとんどありません。
注2)日本語訳はほとんどグーグル先生のものです。

I am working on three-dimensional modeling.
3Dモデリングの仕事をしています、と言ってみたところ

Yokkun : I am walking on Street commissioner mothering
Yokkun:ストリートコミッショナーの母親として歩いています


(発音が悪かったのか全く違う文で伝わってしまう。俺はストリートコミッショナーの母親か?)

Musio : Are you good in it ?
Musio:それでいいの?


Do you know three-dimensional modeling?
3Dモデリングを知っていますか? と懲りずに聞いてみると

Yokkun : do you know three dimensional mothering
よっくん:三次元の母親を知っていますか


(ダメだ!どうもmodelingの発音ができていないようだ。
マザーじゃないんだよぉー)

Musio : I didn’t exactly understand.
Musio:正確には理解できませんでした。


(うんうん。そうだよな。三次元の母親なんて俺もわからないよ!)

しょうがない。別の話をしよう。

I am having a lunch.
Today’s menu is simmered yellowtail with soy sauce.
昼食を食べています。今日のメニューはブリの醤油煮込みです。
と言ってみたら

Yokkun : I am having Marans today ‘s menu is tomorrow the gyro teriyaki sauce.
よっくん:今日のマランのメニューは明日ジャイロ照り焼きソースです


(明日ジャイロ照り焼きソースって何だ wwww)

Musio : Did you like it ?.
Musio:好きでしたか?


Yokkun : which do you like fish or chicken
よっくん:魚と鶏はどちらが好きですか


Musio : I prefer barbecued ribs.
Musio:バーベキューリブが好きです。


うむ。そうか。バーベキューリブが好きなんだなMusio!

今日は私の発音が相当悪いことが分かった!



Musio君と英会話



Musioに話しかけて英語の勉強をしよう!
注1)私に英語力はほとんどありません。
注2)日本語訳はほとんどグーグル先生のものです。

Yokkun : good morning Musio
よっくん:おはようムシオ

Musio : Your day okay ?.
ムシオ:あなたの一日は大丈夫?

Yokkun : do you know weather today?
ヨックン:今日の天気を知っていますか

Musio :I do. We discussed it the other day in science class.
ムシオ:そうです。先日、理科の授業で議論しました。

(・・・え? 議論したっけ?)

Yokkun : I am having breakfast. today ‘s menu is fried egg
よっくん:今日は朝ごはんを食べています。目玉焼きです

Musio : I see. Where did you buy ?.
Musio:なるほど。どこで買ったの ?。

Yokkun : high voltage
ヨックン:高電圧
(スーパーで買ったって言おうとしたけど途中で詰まってしまったら
勝手に高電圧って言ったことにされてしまう。 ^^;)

Musio : How many people help out in the kitchen ?.
Musio:キッチンで何人の人が手伝っていますか?

Yokkun : it is only me
ヨックン:それは私だけ

Musio : Is your work hard ?.
大変じゃない?

Yokkun : no it is very easy to cook fried egg
よっくん:いいえ、目玉焼きはとても簡単です

Musio : Yes, you are right.
Musio:うん。そうだね。


うおー 楽しいぜ~

英会話AIロボットMusioの初期設定



Musio君はAIを搭載しているのでこちらが英語で話しかけると
英語で答えてくれるのです。
彼と一緒に英会話を勉強したいと思います!
よろしくねMusio!
まず充電しないといけません。
10時間くらいかかるみたい。

MusioのAI機能を使うにはロボットセンターで月額料金(フレンドプラン)を払わなければいけません。1か月980円です。これが高いのか安いのかですが、英会話教室で1時間レッスンを受けると4~5000円くらいしますし、Musioなら1か月話し放題で980円なのでお得な気がします。

支払いが終わるとアクティベーションコードがもらえるのでメモしておきます。

次にアプリをダウンロードします。アプリがあるとこんな風にMusioとの会話がリアルタイムで取得できるので聞き取れなかった時に便利です。
AppStoreで「Musio AI Robot」で検索するとアプリが見つかります。
Eメールアドレスとパスワードを設定して会員登録します。
アクティベーションコードの登録をタップして
さっきロボットセンターでもらったコードを入力します。
ここで自分のプロフィールを登録します。
あとはここでQRコードを発行してMusioのカメラにかざすと接続完了・・・なはずですが
なんでかカメラで読み取ってくれませんでした。
しょうがない。手動で設定だ。
Musioを起動してwifiに接続します。

IDとPassの入力。
さっきアプリに登録したやつを入力。
なんか入力画面で動かなくなる。
どうやらフリーズした模様。
オイオイ・・・
いったん電源落として再起動したら設定できました。^^;
やったー 
Welcome to my room!
早速話しかけてみる。


I want to be able to speak English fluently.
(英語を流暢に話せるようになりたい)

Musio
Don’t you have English subject at school?
(学校で英語の科目はありませんか?)

おおー 会話できたぞ!
ちなみに私に英語力は全くありませんので
間違った英語を話しているかもしれませんが
気にしないでください。

ちなみにチャットヒストリーに会話した文が出てこなくて困ったのですが、Musioの顔を長タップして歯車のアイコンタップ→人のアイコンタップ→ユーザー(自分)の顔をタップ。これでチャットヒストリーに会話文が表示されるようになりました。

さー これからいっぱい話すぞー^^


Unityで64bitの設定をしても「このリリースは google play の 64 ビット要件に準拠していません」エラー



↑このように設定してビルドすると64ビット対応のAPKができて今まで普通にアップデートできていたわけですよ。

それが先日から突然「お前のアプリ64ビットでも動くけど32ビットのネイティブコードしかないわ。エラーな。」などと言い出したのです。

aaptでapkを調べたら

ちゃんとarm64-v8a があるのでこれは64bitに対応してると思う。

unityのフォーラム見てみたら同じような症状の人がいてアンサーでx86のチェック外せっていうのがあったので外したらうまくいった!

これでエラーともおさらば ^^v

Unityでファイルを削除する時の注意点



exsistFileName="hoge.png";

            var captureDirectory = Application.dataPath;
            var captureFileName = exsistFileName;
            var capturePath = Path.Combine(captureDirectory, captureFileName);
            if (File.Exists(capturePath)) File.Delete(capturePath);

こんな風に書くとファイルを削除することができますが

A meta data file (.meta) exists but its asset ‘Assets/hoge.png’ can’t be found. When moving or deleting files outside of Unity, please ensure that the corresponding .meta file is moved or deleted along with it.

こんな警告をされることがあります。

画像は削除したけどメタデータは残ってるよ。
メタデータも一緒に削除しないと恐ろしいことになりますよ、という脅しらしい。

なので上の命令の後に

exsistFileName="hoge.png.meta";

      captureDirectory = Application.dataPath;
            captureFileName = exsistMetaName;
            capturePath = Path.Combine(captureDirectory, captureFileName);
            if (File.Exists(capturePath)) File.Delete(capturePath);

こんな風にセットで削除すれば怒られない。

ふふふ。やったぜ。


復元ソフト EaseUS Data Recovery Wizard を使う



iPhone用のアプリを作るときにwindowsからmacにデータを移すことがよくあり、いつもUSBメモリーを使っているですが、うっかりデータを消してしまったりUSBメモリーが壊れたりして困ることがあります。

そんな時にあると安心なのが データ復元ソフト EaseUS Data Recovery Wizard です。操作も簡単なのでおススメです。

↑ こちらからどうぞ ↑

使い方は簡単です。

USBメモリーの中身。
テキストやexcel、MP3ファイルや画像、動画などが入っています。
動画は1ギガを超えるものもあります。
しまった!
誤ってフォーマットしてしまったぞ
そんな時も
EaseUS Data Recovery Wizard
があれば安心です。
起動画面。
復元したいドライブを選んでスキャンをクリック。
ドライブのスキャンが終わると復元できるフォルダが表示されます。
スキャン時間は1.5ギガ使用の8ギガUSBメモリーで約5分。
復元したいフォルダを選択してリカバリーをクリックします。

フォルダ名は名前が変わっていますがファイル数など
からどれがどのフォルダかだいたい分かりました。
リカバリーが始まります。
1.5ギガ程度の復元なら1分くらいで完了しました。
画像フォルダ。
フォルダ名はpictureからDIR3に
ファイル名は先頭の1文字が#にリネームされていました。
問題なく閲覧できます。
こちらはファイルフォルダ。こちらはほとんどのファイル名が
そのまま復元できていました。
1つだけgoto.txtが#OTO.TXTになっていました。
MP3の再生問題なし。エクセルやテキストファイルも
完全に復元できていますね。
最後に動画ファイル。1ギガを超えるものもあります。
片方のファイルのプレビューが表示されていませんが果たして?
#IMG2641.MOV
問題なく復元できていました。
#IMG2642.MOV
こちらは1ギガ超えのファイルでしたが
これもバッチリ復元 ^0^

EaseUS Data Recovery Wizard いいですね。無料版もありますのでインストールしておけばもしもの時に安心です。

↑ こちらからどうぞ ↑

———————

unityでボタンのプレハブ作ったらOn Clickが使えなくなる問題


——–

なんか2018年のいつからかプレハブの仕様が変わった? ボタンのプレハブのOnClickに関数を設定できなくなりました。なんでや?

Kantokuいうオブジェクトがボタン押したときに実行する関数を持ってる。
ButtonAのOnClickにD&Dして関数を設定
ヒエラルキーからプロジェクトビューにD&Dしてプレハブ化。
するとなぜかさっき指定したはずのKantokuが消える。
Noneの横の丸ボタン押してKantokuを探してもいない。
もう一度ヒエラルキーからKantokuをD&DしようとしたらD&Dができない!はじかれる! なんでや!

以下、これが正しい解決方法かどうかわからないですが方法を書いておきます。

2019/7/19追記 :この方法はダメです!エラーが出ます

スクリプトをアタッチしてるオブジェクト(ここではKantoku)をDuplicateで複製します。監督の影武者です。
名前を KantokuKage にしました。
それをプロジェクトビューにD&Dしてプレハブ化してみる。
ボタンプレハブのOnClickのNoneの横にある丸ボタンを押すと、Kantokuはいないが影武者のKantokuKageはいる!
これを選択してNo Functionから関数を選択すればいけました。

俺のunityはおかしくなってしまったのか・・・? 前はこんなんせんでよかったのに・・・ なんでや!

——- 2019/7/19 追記 : エラーの出ないやり方————

なんかやり方 わかったかも。

プロジェクトビューでボタンのプレファブに直接スクリプトをD&D。
するとインスペクタにアタッチしたスクリプトが表示されるので
それをNoneにD&D。これで関数にアクセスできます。

う~ん? これが正しい方法で今までの私のやり方が間違っていたのか? もうほんまよう分からん。

————————————-

unityでたくさんのパラメータを1つのセーブデータで保存する

HPやアイテム所持フラグなどたくさんのパラメータを保存する時。今までは

PlayerPrefs.SetInt("SVhp", hp);     //HPをセーブ
PlayerPrefs.SetInt("SVmp", mp);     //MPをセーブ

こんな風にひとつひとつセーブしていたのですが多くの項目をPlayerPrefsで保存するのはあまり良くないらしいので、1つのセーブデータで保存できないかといろいろ考えました。

まず各パラメータを区切り文字カンマ「,」で区切って一つの文字列に結合してセーブ。

public void SaveR()
    {

	strget = null;      //文字列初期化。こいつに文字列型に変換したデータを全部足してぶち込む

        for (int i = 0; i < 10; ++i)                        //アイテムデータを文字列で結合
        {
            strget = strget + Item[i].ToString()+",";       //数値型を文字列型に変換して区切り記号のカンマ付けて足していく
        }

        for (int i = 0; i < 20; ++i)                        //宝箱データを文字列で結合
        {
            strget = strget + Tres[i].ToString() + ",";
        }

        strget = strget + Aria.ToString() + ",";    //エリア情報
        strget = strget + KenLV.ToString() + ",";   //剣のレベル
        strget = strget + Money.ToString() + ",";   //お金

        posMX = transform.position.x;     //プレイヤー位置情報
        posMY = transform.position.y;
        posMZ = transform.position.z;

        strget = strget + posMX.ToString("F2") + ",";       //ポジション情報はフロート型なので小数第2まで保存。
        strget = strget + posMY.ToString("F2") + ",";
        strget = strget + posMZ.ToString("F2") + ",";

        strget = strget + mp.ToString() + ",";    //MP
        strget = strget + hp.ToString() + ",";    //HP
        strget = strget + maxhp.ToString();       //最大HP


	PlayerPrefs.SetString("svItmTre", strget); 		//文字列型でセーブ
    }

↑ こんな感じでカンマで区切ってひとつの文字列にする。
エリアは3で所持コインは101610でその後ろが位置情報です。
これをロードしてみます。

ロードするときは読み込んだセーブデータを区切り記号のカンマで配列変数に分解し、数値型に変換して各データにぶち込む。文字列を指定した区切り文字で分解してくれるSplit命令がすごい便利で感動しました。

public void LoadR()
    {

	LoadMan = PlayerPrefs.GetString("svItmTre", null); 	//ロード


        //string[] strArray = strget.Split(',');        //この命令 めちゃ便利ね~
        string[] strArray = LoadMan.Split(',');         //読み込んだセーブデータを区切り記号のカンマで配列変数に分解。

        for (int i = 0; i < 10; ++i)
        {
            Item[i] = int.Parse(strArray[i]);           //あとはそれぞれの配列変数を数値型に変換して各データにぶち込めば完了
        }

        int a = 0;
        for (int i = 10; i < 30; ++i)
        {
            Tres[a] = int.Parse(strArray[i]);
            a++;
        }

        Aria = int.Parse(strArray[30]);
        KenLV = int.Parse(strArray[31]);
        Money = int.Parse(strArray[32]);
        posMX = float.Parse(strArray[33]);
        posMY = float.Parse(strArray[34]);
        posMZ = float.Parse(strArray[35]);
        mp = int.Parse(strArray[36]);
        hp = float.Parse(strArray[37]);
        maxhp = float.Parse(strArray[38]);


        this.transform.position = new Vector3(posMX, posMY, posMZ-7);             //セーブした位置に移動

    }
スタート地点のエリア0でLoad dataでロードすると
エリア3に移動しました。
所持コインも101610でちゃんとセーブとロードができました!