[Unity] Cubeを転がすスクリプト

Colorful Diceを作った時の話ですが、思ったようにCubeを転がすのって意外と難しいですね。

物理エンジンに任せればなんとかなると思って始めましたが、そんなに簡単じゃなかったというお話。

 

20160426_001

上記のように適当にPlaneとCubeを配置して、CubeにRigidbodyと下記のスクリプトをCube付与します。

これだけで、下記のようにヌルっとCubeが横に回転して移動してくれます。

 

ただ、移動した後の座標がちょっとキリのいい値からずれます。

20160426_002

今回だと、

Position: (0, 0.5, 1)

Rotation: (90, 0, 0)

となって欲しかったわけです。これは、回転時の床との摩擦だったり、回転が終わるときにはねたりする挙動が影響してるんだと思います。さらにスクリプトリファレンスによるとそもそもangularVelocityを直接セットするのは良くないみたいですね。非現実的な挙動につながるから。たしかに、止まってる車が次の瞬間に時速100kmになってるなんてこと現実にはないですからね。addTorqueという関数もあるようですが、多分結果は同じでしょう。わずかなズレですが、何度も移動しているとこれが馬鹿にならなくなってきます。さらに回転速度を早くすると更にズレが大きくなりますし、早過ぎると飛び上がります(これはこれで結構面白い: 下記動画)。

 

というわけで、結局物理エンジン任せじゃなくて、Script書いてpositionとrotationを制御することにしました。位置と回転は簡単な数学ですね。

20160426_005

上図を元にしたスクリプト例が下記。

CubeのBoxColliderのIsTriggerにチェックを入れて、RigidbodyのUseGravityのチェックを外しておきます。これで下記のようにコロコロと転がります。

 

思うようにcubeを転がすのも案外むずかしいものですね。

 

(2016.9.13追記)

立方体だけじゃなく直方体でも転がるようにして欲しいというご要望があったので、改良してみました。改良したスクリプトは以下の記事に掲載しています。

[Unity] 直方体を転がすスクリプト

 

 

サイコロを転がすパズルゲームColorful Diceを下記からダウンロード

【Android】Colorful Dice -カラフルでポップなサイコロパズル-

Colorful Dice -カラフルでポップなサイコロパズル-

新しいアプリ公開しました。

 

サイコロをスワイプで転がします。
下のサイコロと目が同じになると目に合わせたポイントとタイムを取得できます。
6が一番得られるポイントとタイムが大きいです。

サイコロの目に赤のドットがある場合は赤のドットの位置(サイコロの向き)も合わせないといけません。
目が黒のドットだけの場合はどんな向きでもポイントになります。

サイコロの目が合うと、カラフルな音色が。
どんどん目を合わせて素敵なメロディを奏でましょう。

 

ちなみに、BGMは下記から使わせてもらってます。

http://dova-s.jp/bgm/play4335.html

 

【Android】Colorful Dice -カラフルでポップなサイコロパズル-

On Your Mark 開発秘話

やべー。タイトルがかっちょいい。中身無いけど。そして、この自分のアプリを自分でレビューするという自作自演感。どやどや。

 

ふと「陸上のスタート練習用のアプリがあったらいいよなぁ」って思って、簡単に作れそうだから作っちゃいました。音出るアプリが初めてでMusicPlayerクラスの使い方(releaseのタイミングとか)で戸惑いましたが、まぁ、2, 3時間で完成したのではないかと思います。

 

友達多い人だと手を叩いてもらったりと練習に付き合ってもらえるんでしょうけど、ぼっちのあなたには不可欠なアプリでわないでしょうか!?(失礼千万)。まぁ、これあれば一人で気兼ねなく自主練できるしね。授業中でもイヤホン聞きながらイメトレできるしね。日本陸上協会の方、連絡待ってますよ!(何の連絡だ。恐れ多いわ。)

 

いやぁ、久々にいいゴミアプリ作った。ま、僕、陸上しないんですけどね。

 

陸上スタート練習アプリ、On Your Markは下記からダウンロード

【Android】On Your Mark -陸上スタート練習-

On Your Mark -陸上スタート練習-

陸上短距離のスタート練習用アプリ。

スタートボタンを押すと
“On Your Marks” → “Set” → “スタート音”
が流れます。

Setからスタート音までのインターバルはランダムなので、スタート練習になります。

 

陸上スタート練習アプリ、On Your Markは下記からダウンロード

【Android】On Your Mark -陸上スタート練習-

[ISS EYE] 僕たちは複数の時空を生きている

実は私達が生きている時間、空間は一つではないのです。

 

中二病みたいなタイトルですが、中二の話じゃないです(私は中二病ですが・・・orz)。

 

ISS EYEを最初に作ろうと思った時、「衛星の位置なんて、中学レベルの物理で楽勝で作れるっしょ♪」と思って始めたんですが、実は衛星の動きってそんなに簡単じゃなくて、すごく苦労したよっていう話の一つです。

 

衛星軌道求めるのってほんと複雑。こんなにややこしいとは思ってなかったです。はやぶさってよく帰って来たなと、その難しさを痛感するとともに、関係各位の頭の良さと粘り強さに感服しました。

衛星の軌道求める方法って色々あるみたいなんですが、ISSの軌道求めるのって2行軌道要素(TWO LINE ELEMENTS)ってものをもとに計算するみたいです。

1 25544U 98067A 16109.54808289 .00016717 00000-0 10270-3 0 9008
2 25544 51.6452 355.5140 0001582 35.9564 324.1695 15.54301648 35708

↑こういうの。(NASA HPより

これ見つけた時、アプリ作るのやめようかなと思いました。だって、意味不明じゃないですか。2行軌道要素をわかりやすく解説してくれてるサイト(http://www.lizard-tail.com/isana/tle/misc/what_is_tle)を見つけることができて本当に良かったです。このサイト無かったらISS EYEは完成していなかったでしょう。このサイト作った柏井勇魚ってどんな天才よ。

で、この2行軌道要素をもとに計算する方法を調べてると、もう時間軸と空間軸がいっぱい出てくる出てくる。え、世の中こんなに基準があるの!?って驚愕しました。ローカルタイムとUTCくらいは、私でも知ってましたよ。それ以外に、太陽時、恒星時、ユリウス暦などなど。空間も地平座標、赤道座標、黄道座標、銀河座標。さらにECI、ECEF、WGS84などなど、よくわからんワードが次々と。

世の中っていろんな時間、空間が広がってるんだなぁっと、何度も心が折れそうになりながら感じた日々でした。

 

ISS(国際宇宙ステーション)からの景色をリアルタイムで楽しめるアプリ、ISS EYEは下記からダウンロード。

【Android】ISS EYE

ISS EYE

新アプリ公開しました。

ISS(国際宇宙ステーション)から見えるリアルタイムの景色を360° 3DCGで楽しむことができます。

ISSの軌道や軌道座標などの情報も表示可能です。

(いやー、宇宙関係の知識ないから苦労したー。時間も座標も基準多すぎ。)

 

ISS(国際宇宙ステーション)からの景色をリアルタイムで楽しめるアプリ、ISS EYEは下記からダウンロード。

【Android】ISS EYE

[libGDX] AdMobのインタースティシャル広告を表示させる

libGDXでバナー広告を表示させる件は別記事でログってますが、今回はインタースティシャル広告について。libGDXでインタースティシャル広告を使いたかったので実装した時のメモ。

最近Unityを勉強し始めているんですが、libGDXについては本当に日本語の解説ないですね。日本語の記事が多いこと以前に、Unityだと色々と簡単すぎるくらいにゲーム作れるから、libGDX使うならUnity使ったほうがいいと思います。まぁでも簡単なゲームならlibGDXの方がいいこともあるかな?

とりあえず過去にlibGDXで作ったアプリにインタースティシャル広告を挟みたくなったのでトライしてみました。

以前、使おうと思って使いこなせなかった、「libGDXでプラットフォーム独自の機能を呼び出す」が使えるんじゃないかと思ってやってみたらうまくいきました。

メッセージ表示処理のinterface AdShowableを定義し、これを実装したクラスのインスタンスをCore側のコンストラクタで受け取るにします。

まずは、gradleやManifestに必要事項を記載。(以前の記事参照。)

次にCore側で、AdShowableインターフェースを作ります。

androidのAndroidLauncherクラスに以下を追記します。

で、core側のメインクラス(ここだとMyGdxGame)のコンストラクタでAdShowableを受け取れるようにする。

広告を表示したいタイミングでshowAd()を呼び出せばOK。

 

(参考)

https://developers.google.com/admob/android/interstitial?hl=ja#adding_interstitial_ads_to_an_activity

http://qiita.com/fslasht/items/e152a743ec56d057e643

https://github.com/TheInvader360/tutorial-libgdx-google-ads/commit/0a5ea376d4eb92b8e87c13a03245adb40b53e811

[Unity] AdMob

Unityで作ったゲームにAdMobを貼り付けようとしてハマったのでメモです。

https://developers.google.com/mobile-ads-sdk/docs/games?hl=ja

この手順通りにやったら、

removing attribute http://schemas.android.com/apk/res/android:layoutDirection …

みたいなエラーが大量に出ました。ネットで調べて色々試してみたところ、

https://stackoverflow.com/questions/36154110/implement-admob-service-in-unity

が解決になりました。

まず、プラットフォームをAndroid以外(iPad)に変更して、Plugins/Androidディレクトリから下記のファイルを削除。つまりディレクトリ以外は削除ですね。

appcompat-v7-23.1.1.aar
play-services-ads-8.4.0.aar
play-services-basement-8.4.0.aar
support-annotations-23.1.1.jar
support-v4-23.1.1.aar

で、プラットフォームをAndroidに戻してBuild and Runしたら無事ビルドできました。

この方法が良いのか悪いのかも判断できませんが、まぁ解決したからとりあえず良しとするか。

紙飛行機365

Unityで作った初アプリ公開しました。

画面をタップして紙飛行機を飛ばし続ける単純な横スクロールゲームです。

Unity学ぶために作ってみたものですが、せっかくなので公開しちゃいます。どんなゴミアプリでも公開させてくれるGoogleさんの器でかし。

 

https://play.google.com/store/apps/details?id=com.piromayo.paperglider

Unityはじめました

気になっていたUnityを使ってみました。

とりあえず、チュートリアルに沿って使い方を学んでみたんですが、いや、びっくりですね。こんなに簡単にそれなりのゲームが作れちゃうんですね。あぁ、なんていい世の中。

しばらくUnityで遊んでみようと思います。

 

とりあえず2Dゲームからと思って下記のチュートリアルの2Dシューティングをやってみました。

http://tutorial.unity3d.jp/