無限に学べる英単語RPG

英単語を勉強しながら冒険できるローグライクRPGを公開予定です。

プロモーション動画
プレイするたびに地形が変わるので何度でも冒険できます。
敵と遭遇すると英単語バトルがスタート!
4択問題に正解すると敵にダメージを与えることができます。
各フロアには必ず1つ宝箱があります。
強力な武器や防具が手に入るので
上の階に上がる前に取るのがおすすめです。
メニュー画面で正答率や間違えた単語を確認できます。
また、出題問題の難易度を変更できます。
有料版『無限に学べる英単語RPGエキスパート』では
自分で問題を作ることができます。
各項目を入力して入力完了ボタンをタップで登録完了。

登録した単語を削除する時は登録順に番号が付いているので
削除する単語の番号を問題削除の欄に入力して
DELETEをタップしてください。
メニュー画面で問題難易度に『自作問題』を選択すると
次の階から登録した単語が出題されます。
様々なフィールドで英単語の学習をお楽しみください。

Blenderで次元を作ってアニメーションさせる



↑作成動画
ガンマンには夕日がよく似合うぜ!
正面からと真横から見た下絵を描きます。
顔のパーツとか腕、腰の位置などは正面と横で揃えて描きます。
プロパティパネルの下絵にチェック入れて下絵を読み込む。
正面の画像は座標軸メニューから前を選択、横の画像は右を選択。
不透明度を調整して前を選択。
下絵に沿ってペタペタ面を張っていきます。
頂点や辺を押し出すにはEキー。
新しく頂点をつくるにはctrl+左クリックだよ

こんな感じになりました。
次はこれにボーンという骨格を入れて動かせるようにしよう
追加→アーマチュア→単一ボーンでボーン作成。
編集モードで先端を選択してEキーで押出し。
人体のモデルに沿って骨格を作っていきます。
こんな感じになったよ。
次はボーンとボディオブジェクトを関連付けします。
bodyオブジェクトを全部選択した後、shiftキー押しながら
ボーンオブジェクトを選択。
オブジェクト→親→自動のウエイトで→自動のウエイトで
これでボーンを選択→ポーズモードから
ボーンを動かすと体も動きます。
これで思い通りに動くのかといえばそんなことは稀で
大抵はこんな風にオブジェクトが破綻したりします^^;
ウエイトペイントモードにしてボーンの影響範囲を設定します。
Drawでボーンがオブジェクトに与える影響度を設定します。
塗れば塗るほど赤くなって影響度が強くなります。
影響度を強め過ぎたらSubtractで弱めます。
あとはポーズモードでボーンを動かしてポーズを作って
iキーでキーフレーム打って
またちょっとフレーム動かしてポーズ作って
iキーでキーフレーム打って
パラパラ漫画の要領でアニメを作ります。
はーい 完成でーす ^0^


Rigidbodyのfreezeにチェックを入れたり外したりする



突進してくるボスと戦闘中に壁に挟まれるとプレイヤーが上に持ち上げられて壁を越えてしまうというバグが出てしまった。

そこでボス戦に突入したらRigidbodyのFreeze PositionのYにチェックを入れて上に上がらないようにしてボス戦が終わったらこのチェックを外して再び上下に移動できるようにしたい。

public Rigidbody rigidy;        //rigidbody

.
.
.

//Freezeしたいタイミングで

this.rigidy = this.GetComponent<Rigidbody>();
this.rigidy.constraints = RigidbodyConstraints.FreezePositionY;      //これでYだけフリーズされる

//どうもfreeze使うとRotationまでチェック外れるぽいのでチェック入れる
this.rigidy.freezeRotation = true;	

これでボス戦だけはY軸方向に移動不可能

ボス戦が終わったらFreezeのチェックを外してまた段差を移動できるようにするんやけど、特定の項目だけチェック外すいうのができんらしい。

this.rigidy.constraints = RigidbodyConstraints.None; 

まずこれで全部のチェックを外す。するとRotationも外れてしまうので
Rotationに再びチェックを入れる

this.rigidy.freezeRotation = true;
これでOK ^^v

↑このゲームはこちらで公開中↓

Google Play で手に入れよう

Transformで敵を動かすと壁をすり抜ける



if (this.a == 1) { this.transform.Translate(Espd, 0, Espd); }
if (this.a == 2) { this.transform.Translate(-Espd, 0, -Espd); }
if (this.a == 3) { this.transform.Translate(-Espd, 0, Espd); }
if (this.a == 4) { this.transform.Translate(Espd, 0, -Espd); }

↑こんな風にtransformで敵を動かしたら壁をすり抜ける現象がたまに起こってしまった。上下左右に移動させる敵はすり抜けないけど斜めに移動させたらすり抜けた。

敵の移動にtransformは使わないほうがいいよとは聞いていたけどやっぱりいろいろ挙動がおかしくなるのね^^;

そこでRigidbodyを付けてaddforceで動かすことにする。

int a = 1;		//移動方向を決めるのに使う
float delta = 0;	//数を数えるのに使う
float span = 3.0f;	//方向転換させるタイマー
float maxSpd = 5;       //最高速度
float nowSpd = 0;       //今のスピード。最高速度以下なら加速させる
float powX = 25;        //X方向に加えるスピード
float powZ = 25;        //Z方向に加えるスピード


void FixedUpdate() {

        this.delta += Time.deltaTime;    //数を数える


        if (this.delta > this.span)   //スパンまで加算したら
        {
            this.delta = 0;
            this.a = Random.Range(1, 5);     //ランダムに方向転換
        }

        //歩く速度を計測する
        this.nowSpd= Mathf.Abs(this.GetComponent<Rigidbody>().velocity.x)+ Mathf.Abs(this.GetComponent<Rigidbody>().velocity.z); 	//歩く速度を計測。

        //壁にハマって動かなくなるのを防止。移動速度が極端に低いということは壁にハマっとる。方向転換させる。
        if(this.nowSpd < 1) { this.a = Random.Range(1, 5); }


        if (this.a == 1)    //左下
        {
            if (this.nowSpd < maxSpd)
            {
                this.GetComponent<Rigidbody>().AddForce(transform.right * 1 * powX);
                this.GetComponent<Rigidbody>().AddForce(transform.forward * 1 * powZ);
            }
        }

        if (this.a == 2)    //右上
        {
            if (this.nowSpd < maxSpd)
            {
                this.GetComponent<Rigidbody>().AddForce(transform.right * -1 * powX);
                this.GetComponent<Rigidbody>().AddForce(transform.forward * -1 * powZ);
            }
        }

        if (this.a == 3)    //左上
        {
            if (this.nowSpd < maxSpd)
            {
                this.GetComponent<Rigidbody>().AddForce(transform.right * 1 * powX);
                this.GetComponent<Rigidbody>().AddForce(transform.forward * -1 * powZ);
            }
        }

        if (this.a == 4)    //右下
        {
            if (this.nowSpd < maxSpd)
            {
                this.GetComponent<Rigidbody>().AddForce(transform.right * -1 * powX);
                this.GetComponent<Rigidbody>().AddForce(transform.forward * 1 * powZ);

            }
        }
    }


これですり抜けなくなった^^v

↑このゲームはこちらで公開中↓

Google Play で手に入れよう
ー広告ー

ITMS-90809問題でUnityをアップデートしたらAdMobが表示されなくてハマる



長くなるので最初に問題の概要と解決を書きます。

問題1.アプリをAppStoreにアップロードしたらAppleからITMS-90809:WebViewやめろメールが来た。

解決法:
https://issuetracker.unity3d.com/issues/ios-apple-throws-deprecated-api-usage-warning-for-using-uiwebview-when-submitting-builds-to-the-app-store-connect
↑ここにこの問題を修正したバージョンが載ってるのでそのバージョンにUnityをアップデートする。
私の場合2018.4.16f1 を使うといけた

問題2.Unityをアップデートしてビルドしたらテスト広告は表示されるのに本番IDの広告がiPhoneで表示されない。と思ったらiPadでは表示される。なにコレ?

解決策:スマートバナーを使ったら表示された

BannerView bannerView = new BannerView(adUnitId, AdSize.SmartBanner, AdPosition.Top);

問題3.Xcodeでビルドしたら
GADUNativeExpressAd.m cannot be found

解決策:
Assets/Plugins/iOS/GADUNativeExpressAd.h
Assets/Plugins/iOS/GADUNativeExpressAd.m
Xcodeでこいつらを削除。

問題4.↑上の問題を解決してビルドしたら今度は
library not found for lgoogleutilities

解決策:Unityでビルドして出来たファイルで
hogeApp.xcodeproj じゃなくて
hogeApp.xcworkspace の方を開く

問題5.↑上の問題を解決してビルドしたら今度は
80 duplicate symbols for archtecture arm6

解決策:
a.最新Google Mobile Ads Unity Pluginをダウンロード
b.AssetのGoogleMobileAdsとPlayServicesResolverとPluginsフォルダをUnityから削除。
c.最新のやつをインポートしてビルド
d.ビルドするときreplaceかappendか聞かれるとreplaceで一旦置き換える。この時最初はDestinationがなんたらでエラー出るけど2回目は出なかった
e.出来たhogeApp.xcworkspaceを開いてxcode起動。その時duplicate symbolsのエラーが出てるけどビルドしたら消える。
f.最新Google Mobile Ads SDKをダウンロードしてxcodeのフレームワークに追加。最新のAdsSDKには4つフレームワークあるけど入れるのはGoogleMobileAds.Frameworkだけで他の訳分からんの入れたらビルド時にduplicate symbolsのエラー。

問題6.xcworkspaceからプロジェクト開くと証明書関連がなんかおかしくなる

解決策:
debug—Apple Development
Any iOS SDK—iOSDeveloper
Release—Apple Distribution
Any iOS SDK—iOSDeveloper
ReleaseForProfiling—Apple Distribution
Any iOS SDK—iOSDeveloper
ReleaseForRunning—Apple Distribution
Any iOS SDK—iOSDeveloper
この設定にしたらいけた

問題7.ArchiveのあとValidateしようとしたら
appstore connect operation error
一旦戻ってもう一回やろうとしたら
no app store connect account

解決策:Macを再起動


今回のITMS-90809の問題はたくさんエラーが出て迷走したけどやることは問題1と2だけで良かった。つまりUnityアップデートしてAdMobはスマートバナーを使う。これだけで良かったぽい。
なんで迷走したのかといえばアップデートしてビルドしてもiPhoneで本番広告が表示されなかったからで、ああ最新のバージョンは最新のAdsSDKやら全部最新の入れないとダメなのねと思ってしまいPluginとか全部再インポートしたらxcodeが激おこエラーの嵐。
最終的には無事アップロードできたので良かったけどもうほんま疲れた~^^;


Unityで動画ファイルを再生する



Unityで動画を再生させるのがすごい簡単だったので驚いたのですよ。

平面オブジェクトに動画を貼り付けてそれを再生させたり停止させたりします。

まずCreate から 3D object → Plane を選択
プロジェクトビューに再生したい動画をD&D
テクスチャを貼り付けるみたいにオブジェクトにD&D
あとはPlaneのインスペクターのPlay On Awake にチェック入れるだけで動画が再生されます。

スクリプトから動画を再生したり停止したりいろいろやりたい

まず
using UnityEngine.Video; これを冒頭で宣言

次に
private VideoPlayer videoPlayer;   

再生したいタイミングで
videoPlayer = GameObject.Find(“hogePlane”).GetComponent<VideoPlayer>();
videoPlayer.Play();

動画停止は
videoPlayer.Stop();

ポーズは
videoPlayer.Pause();


再生が終わったらいろいろやる方法

再生が終わったら次の動画、とかやるのに使える方法はコレ。
テストとして再生が終わったら動画パネルオブジェクトを見えなくしてみる。

基本的には動画が再生中かどうかを判定するには
videoPlayer.isPlaying を使うみたい。
これがtrue なら再生中、 false なら再生されていない らしい。

で、ifで videoPlayer.isPlaying == false だけで判定しようとすると動画が再生されるまで少しタイムラグがあるみたいで動画が再生される前に falseと判定されてif文が実行されてしまった。

そこでdeltaで数を数えて動画が再生されている頃からif判定を始めるようにすると思い通りの結果になった。

GameObject ActPanel;    //Planeの大きさを変えるのに使う
float delta = 0;	//数を数えるのに使う

void Update()
    {
        delta += Time.deltaTime;    //数を数える
        if ((videoPlayer.isPlaying == false)&amp;(delta>2))
        {
            ActPanel = GameObject.Find("hogePlane");        //動画Planeオブジェクトを見つける
            ActPanel.transform.localScale = Vector3.zero;   //見えなくする
        }
    
    }

↑なんか & が 勝手に & amp; に変えられているみたいです。
正しい表示はコレ
if ((videoPlayer.isPlaying == false)&(this.delta>2))


動画を再生すると WindowsVideoMedia error という警告が出る問題について

なんかmp4ファイルを再生しようとするとこんな警告が出て怒られる。
aviファイルなら大丈夫やったのでもうaviでええわ

.


なんか動画を再生すると映像にグレーのレイヤーがかかっているみたいに暗く表示される問題について

なんか動画が暗い?
Mesh RendererのElement0 をdefault material から
Sprites-Default に変えたら正常に表示された
これでOK ^^v

クロスシミュレーションを動画出力するとバグる問題について



クロスシミュレーションをBlender上で再生すると正常に動いてるのに
アニメーションをAVIで出力するとクロスシミュレーションが
バグる問題に遭遇したけどなんとかなったので方法を書いておきます。


1.まず一回再生する。

2.物理演算タブのクロスのキャッシュでベイクをクリック

3.レンダーからOpenGLアニメーションレンダリングをクリックすると

バグらないで出力できましたー ^0^


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!

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