Unityと物理・数学の話

UnityやPython、天文関連、物理学、生物学を中心に更新していく予定です。塾講師、家庭教師の仕事をやっているのでお仕事の依頼はコメントにて承っております。当面はUnityをPythonで動かすのを試行錯誤しています。

VRロボットアクションでアイアンマンの気分になる

「 Unity5ゲーム開発レシピ はまるゲーム制作のノウハウ」を読んだのでレビューします。

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

 

この本の構成としては、前半で一つのロボットアクションの制作を通して、ゲーム制作で必要なtipsを一つずつ解説してくれてる内容になっていて、後半ではユニティちゃんを使ったいくつかのゲーム内容に必要なtipsをまとめてくれているという内容になってます。

 

ロボットアクションのゲームはDL用サイトからファイルをダウンロードすればChapterごとに完成状態のassetをみることができるので、途中からChapter内容を学習するということが可能になっています。

 

内容自体も、ゲームを作るうえでのタイトル編集だったり、音源の操作方法だったり、キャラのアニメーションを設定してゲームらしさをより高められるようにしたりなど、

本当にさまざまなtipsがのっており、

この本で作られるのはロボットアクションゲームですが、

他のさまざまな自分が作ろうと思ったゲームに応用できそうであるのが確実であると思えました。

 

僕はこのダウンロードしたファイルを使い、

かつ、

Unity向け3D都市モデルデータ「ZENRIN City Asset Series」|ゼンリン

このサイトの秋葉原のアセットを使って、

ロボットを秋葉原の街並みで飛ばせるようにしたアプリをつくってみました。

 

f:id:unitypy:20180310134633p:plain

敵に囲まれるプレイヤー

f:id:unitypy:20180310134821p:plain

秋葉原駅上空から見た景色

f:id:unitypy:20180310134954p:plain

道路を疾走することもできる

f:id:unitypy:20180310135122p:plain

SF映画にありそう(?)なこんな戦闘シーンも体験できた

f:id:unitypy:20180310135300p:plain

街中を空中飛行できるのがやっぱり楽しい!

アイアンマンみたいな体験ができる...!



スクリプト内の数値をいくつか調節すれば、このゲーム内に出現する敵の強さだったり、ゲーム自体の難易度だったり、プレイヤーの飛行のしやすさだったり、

様々な要素を自分好みに変化させることができたので、

ゲーム開発で完全にスクリプトを理解できない初心者である僕でも、こうすればこのように変わるのかなどとは遊ぶことができたので、

Unityによるゲーム作りの面白さをここではじめて実感できたのはかなり好機であったように思います。

 

スクリプト内容の解説ものっているので、

今後も開発において参照していくことがどんどん増えてくような気がしています。

SF映画が好きでゲーム開発をしてみようと思っている人は読んでみるといい教本なんじゃないかとおもいますね。

 それでは。

 

理系受験生の一度は読んでほしい本。「いかにして問題を解くか。」

こんにちは。unitypyです。

今回は、高校生で理系を志望し始めたという方に特に向けた記事を書きたいと思います。

タイトルにあるように、理系受験生には一度は読んでほしい本ということで、本当は中学生あたりで理系を少しでも目指しているという人に出会ってほしい本でもあるのですが、(あるいは理系だけでなく、現代では自己による主体的な問題解決能力が重要であるのを踏まえて、将来主体的に様々な活動をしていくことを志している人全員に向けておすすめしたい本でもあるのですが、)

その本は【いかにして問題を解くか】という本です。

この本は新しいというわけではないのですが、古くからある名著であり、

受験でいうところの参考書というわけでもないのですが、

この本を読んだ人にとっては人生自体の指南を与えてくれる本になると思います。

以下のような本です。

同様にして、日本人の作者により、【いかにして問題を解くか】の実践活用編もあり、

このことからわかるように1975年に出版されたこの本は、2012年でも通用している内容であり、よく読まれている名著であることがわかると思います。

いかにして問題をとくか

いかにして問題をとくか

 
いかにして問題をとくか・実践活用編

いかにして問題をとくか・実践活用編

 

 

内容としては、タイトルの通り、「いかにして問題を解くか」ということがよくわかる内容となっています。

ちょっと授業で数学の問題を解くとき、中学生は特にできる計算をただただ計算して、

猪突猛進的に解こうとする人が多いのではないか、と思います。

僕も以前は実際にそうで、そのときは中学数学はどのように問題を解くべきなのかなどと考えることはなく、

ただ与えられた問題集をひたすら解いて演習することで高得点を取ることができていましたし、それほど問題でもありませんでした。

ところが、大学受験の勉強をしていくようになると、それだけでは対応できず、特に難問と言われるものに対しては、自分で問題を解く能力というものが必要であり、

ただ猪突猛進的に計算することではなにも解けないものが多くなっていくことに気付きました。

そこで、どのような方針で問題解決をするべきであるか、という方法をより一般的に知ることができるのがこの本でした。

この本の内容ははじめ読むときはなかなかなじみにくいかもしれませんが、その内容に沿って思考を伴いながら読むと内容も理解することができ、かつ方法も身に着けることができると思います。

本当に根本的な思考能力を身に着けることができるので、人生における問題解決に用いることができることは間違いないです。

したがって、時間のない人については特に絶対に読んだほうがいい、とは言うことができませんが、

時間がある人については確実に役に立つので読んでほしいと思う一冊です。

 

【東大理系数学2018第1問】をPythonで計算させて解答してみた

こんにちは。unitypyです。

東大理系数学2018第1問の解答をpythonで計算させて求めて解答してみたのでご一読ください。

 

以下問題です。

f:id:unitypy:20180303141740j:plain

 

以下が計算過程と解答です。

本当は増減表を書くところから始めますが、pythonで作図してから解答の方向性を決めていきましょう。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 512, endpoint=False)
y = x/np.sin(x) + np.cos(x)
plt.plot(x, y)
plt.ylim(0,10)
plt.show()

f:id:unitypy:20180303141947p:plain

このように出力されます。このようにみてしまえば、もう極限値も増減表もどんな感じの値になるか想像できてしまいますね。

本来ならばx=0では関数が定義できないですが、このプロットでは微小な点をプロットする事で書いているのであたかもx=0で連続な関数のように見えています。この点は注意しておきましょう。

では、ちゃんと計算して解答していきましょう。

import sympy as sy
 
x = sy.Symbol('x')
g1 = sy.diff(x/sy.sin(x) + sy.cos(x),x)
print(g1)

出力:

-x*cos(x)/sin(x)**2 - sin(x) + 1/sin(x)

 

 次に増減表ですが、まず増減表を作る前に微分した関数の概形を同じようにプロットしていきましょう。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-np.pi, np.pi, 512, endpoint=False)
g2 = -x*np.cos(x)/np.sin(x)**2 - np.sin(x) + 1/np.sin(x)
plt.plot(x,g2)
plt.ylim(-10,10)
plt.show()

 f:id:unitypy:20180303151647p:plain

本問題では、 

-x*cos(x)/sin(x)**2 - sin(x) + 1/sin(x)

を整理すると

 cos(x)(sin(x)cos(x) -x)/sin^2(x)

となって、

sin(x)cos(x)-x

が0<x<πにおいて負であることを微分することで明らかにして、

結局cos(x)の正負が増減表の正負と逆に対応することから増減表を書くことができ、それを用いながら極限の計算をすればいいことになります。

この問題は東大数学の特徴をよく表していて、単純に微分して増減表を書く、という内容ではないため、そのままpythonで解くというのはうまくいかなかったのに対して、

単純に計算した方がはやく解けるので、pythonを使わないことにします。

まあそもそも上のグラフのプロットで増減の様子が分かりますしね。

xを∞に近づける方の極限では、pythonに計算させるとエラーを吐くので、グラフのプロットから、あるいは関数の形から容易に∞になるということが分かります。

xを+0に近づける方の極限は

 入力:

 
import sympy as sy

x = sy.Symbol('x')
a = sy.limit(x/sy.sin(x) + sy.cos(x),x,0)
print(a)

 出力:

2

 ということで極限は2とわかります。□

以上で解答終了とします。増減表の作成についてはある程度工夫しないと東大数学の問題はpythonで対応しにくいことがわかると思います。そのような関数にも対応できるように組めることも目標にしたいと思います。

本問題は普通に計算すれば容易に解けるものであり、本番では受験生はこの問題は確実にとることが期待されていた問題です。増減表の作り方など、まだ学習していない方法が上記にあったとしたら、類題を使った練習しておくとよいでしょう。

  

解答の方向性は以下のサイトを参考にしました。

【東大理系数学2018】を日本酒ぶちこんだ勢いで本気で解答、所感、講評作った話。 - アルコール東大数学全完サークル 

 

 

AnacondaとIronPythonの違い

最近からやっとPythonを少しずつちゃんといじる時間を用意することができて、わからないことばっかでつまずきがちなので、

備忘録として、pythonの環境構築についての情報などをまとめておこうと思いました。

また、勉強不足で恐縮ですが、AnacondaとIronPythonの違いがわからなかったのでまとめておこうと思います。

 

qiita.com

 

programming-study.com

Pythonに慣れている人やすでに利用している人にとっては簡単ですが、初めての人にとって環境構築は意外と面倒くさいです。

そんな時におすすめなのが「Anaconda」です。

AnacondaはPython本体と、Pythonでよく利用されるライブラリをセットにしたPythonパッケージです。

AnacondaをインストールするだけでPython本体とライブラリがインストールされるため、環境構築がかなり楽になります。

 

Anaconda (インストーラー) - Wikipedia

Anacondaアナコンダ)は、CentOS や Fedora で採用されているオペレーティングシステムインストーラPythonC言語で実装されている。GUIフロントエンドにはPyGTK、テキストモードのフロントエンドにはPython-newtが使われている。

 

IronPython - Wikipedia

IronPythonとは、.NET FrameworkおよびMono上で動作するPythonの実装である。Jim Huguninによって開発が進められ、2006年9月5日に初版がリリースされた。バージョン1.x系のIronPythonPython 2.4.3と互換している。IronPython 2.7はPython 2.7互換である[1]

.NET Frameworkの持つ豊富なクラスライブラリをPythonの文法でシームレスに利用できるだけでなく、従来のPython(CPython)のコード資産さえもある程度そのまま利用できることが特徴である。また、.NETの実行環境に対応した各種ツールが、そのまま利用できる点もメリットといえる。

もともとPythonスクリプト言語であるが、IronPythonコンパイラサービスによって.NETアセンブリコンパイルすることも可能である。これは、スクリプト言語として利用する場合はバイトコードに動的コンパイルし、アセンブリの場合は、それが事前コンパイルされたものと考えることができる。

IronPython自身はC#で実装されている。

 

簡単な数式の計算をするなどで遊ぶとかだったら、すぐにモジュールをインポートして作図なども実行することができるのですが、

他にももっとやりたいってなったときにエラーになることが多すぎてつまずきがちです。

(環境構築が一番プログラミングで難しいみたいなことはよく言われるような気もしますが())

いまは磁場の可視化をするプログラムを実行しようと思ったのですがmayaviというモジュールが見つからないということでいまだ実行できていません。(以下が参考サイト)

3.5. Mayavi による 3D プロット — Scipy lecture notes

 

おそらくAnacondaにmayaviが追加されていないから実行できないのだと思うので、下記サイトをありがたく参考にさせて頂いてやってみようと思います。

datalove.hatenadiary.jp

 

初めに手を付けるとかだったら簡易的な1変数関数を入力してグラフにして遊ぶということや、2変数関数にして3Dの作図をするなどで遊ぶことができるので、

それらでできそうな大学受験数学関連のプログラムを他にも考えていきたいなと思っているところです。

なにか面白いものができたらまた記事にしようと思います。

 

Unity上でpythonのプログラムを実行する事も他のサイトを参考にしながら実行することができたので、また何か面白そうなことがUnityでできたら更新していきたいと思います。

UnityでPythonをいろいろ使えるようにしたいと思っている分、Pythonの環境構築についてもっと知る必要がありそうです。

それでは!

 

コスモプラネタリウム渋谷【宇宙エレベーターの旅】を見てきたのでレビュー

こんにちは。unitypyです。

先日、渋谷区にあるコスモプラネタリウム渋谷にて、

最近上映されたばかりの上映プラグラムである【宇宙エレベーターの旅】を見てきたのでレビューしたいと思います!

今後行く人は参考にしてほしいと思います!

 

「コズミックフロントプラネタリウム版 宇宙エレベーターの旅 -2050年、夢の宇宙旅行へ-」(2018年1月20日(土)より投影開始) « 渋谷区文化総合センター大和田

今回のNHKコズミックフロントの企画であるこの【宇宙エレベーターの旅】ですが、

現在計画中であろうとされる宇宙エレベーターについて、いくつかの視点で解説されていて、

宇宙エレベーターの開発計画について3DCGを用いて、

ドーム内に投影される迫力ある映像により深い理解を得ることができる、という内容になっていました。

 

NHKコズミックフロントでの放映は2014年に行われており、内容はそれに準じているが完全には一致していない、という印象を受けました。

perry-r.hatenablog.com

 

宇宙エレベーターの作り方

宇宙エレベーターの使われ方

宇宙エレベーターのターミナル駅の作られ方

 など、様々な点で宇宙エレベーターについて理解を深められ、それとともに来たる未来に興奮を覚えること間違いなしだと思います。

なんといっても、映像がテレビ放映でも迫力があったのは想像できますが、

コスモプラネタリウム渋谷での上映はドーム内に投影することになるので、宇宙の中に浮いているような宇宙エレベーターの存在感により、

宇宙に浮いている自分の孤独感と広大な海に一人で旅している時と同じようなある種の怖さのようなものをリアルに感じました。

 

内容に踏み入ってしまうとネタバレになってしまうので、特に取り上げはしませんが、

特に印象的だといえるものは宇宙エレベーターのケーブル部分の作り方ですね。

宇宙エレベーターは地球の極部分に作られることが高い可能性を持って考えられているわけですが、

その理由は物理学や天文学に精通している人ならば容易に想像つく理由であるかもしれませんし、

知らない人にとっては興味深い内容となっているのではないでしょうか。

 

やはりプラネタリウムドームに投影するということの利点をよく理解した上での映像であったと感銘を受けるものだったため、

宇宙エレベーターについての知識は充分にあるよ、という人も映像を楽しむことができるものだったため非常に満足できる内容でした。

 

ぜひこの記事をみてコスモプラネタリウム渋谷に見に行ったよ、という方はコメントにて教えて頂けると嬉しいです!それでは!

 

東大数学2018の所感

友人が以下の記事を紹介してほしいとのことで、東大数学2018を解いた記事を紹介しようと思います。

今回の東大理系数学2018は僕も一部を解いたのですが、僕の所感としては1,2,3,4は完答できる内容となっており、(2は整数の偶奇に注目するというパターンは過去の傾向に従っています)5は気づかなければ解けない式変形ができれば軌跡の問題としては容易な問題となっていたり、6はベン図による3つの体積の共通関係をちゃんと考えることができれば完答することができますが、試験時間内に解けるかは個人の練習次第となるのではないか、という印象を受けました。

とはいえ、丁寧に解けば解ける問題ばかりとは言えますが、試験時間内に解くことを考えると、1,2,3,4で完答を狙っていけば十分な点数が取れたのではないでしょうか。

物理が超難化したことや英語の傾向が変わったことを踏まえると今回の数学は高得点を取ることができた受験生は他の受験生との差別化を図ることができたと思います。

atomath.hatenablog.com

atomath.hatenablog.com

atomath.hatenablog.com

Unityで簡易的なドミノ倒しゲームの作成

今回は,以前作成したUnityの自動生成ドミノについて紹介したいと思います。Unityに組み込まれている物理エンジンを用いて,現実で行うのと同じようなドミノを配置して,実際にUnity内でそれらを連続的に倒していくことが可能です。

実際的な方法としては、Cubeを配置してそれらをドミノの平板のような形に調整して,あとはこの作った平板を作りたいドミノの配列に並べて行って,初期位置にあるドミノを倒して,並べたドミノが倒れていくのを見届けることになります。

  • 平板dominocubeの作成
  • dominocubeを列ごとに自動生成するスクリプト
  • dominocubeのPrefabの作成 
  • addcubescriptの組み込みなど
  • ドミノを倒す方法(無理やり)
  •  途中からドミノを曲げる場合のスクリプト
続きを読む