【ウディタ】初心者向けテクニック1(円座標の算出)

1.円座標の算出


半径(r)の長さが決まっている円の座標計算を行う場合、
三角関数を用いることで、
任意の角度(Θ)のx,y座標を算出することができます。

【x座標の算出】
x = r * cosΘ

【y座標の算出】
y = r * sinΘ

2.sinとかcosとか分からなくてもOK


sinとかcosとかチンプンカンプンという人もいると思いますが、
ウディタの場合は角度からsin,cosを算出する機能が備わっているため(図2-1)、
難しいことを考えなくてもOKです。

f:id:ashutaru1552:20190715165943j:plain
【図2-1】

「手順通りに計算すると円周上の座標を計算できるらしいぞ」
ぐらいの軽い気持ちで使ってみましょう。

3.円座標の算出(ウディタ)


先程の公式に合わせて、
半径rと角度Θにおける円周上の座標算出を
ウディタで行う場合は下記のようになります(実例は図3-1)。

【x座標の算出】
cosΘ = ウディタのcos算出機能 ( Θ * 10 )
x = r * cosΘ
x /= 1000

【y座標の算出】
sinΘ = ウディタのsin算出機能 ( Θ * 10 )
y = r * sinΘ
y /= 1000

f:id:ashutaru1552:20190715174125j:plain
【図3-1】

ウディタ側に記載もある通り、
sin・cosの算出に用いる角度は掛ける10してあげる必要があるのと、
算出されたsin・cosは掛ける1000の値になっているため、
最後に割る1000してあげる必要がある点に注意ですね。

4.サンプルコモン


画面中央からランダムの角度に向かって
ピクチャが飛んでいくサンプルコモンを置いておきます。

https://kazaeditor.net/asset/Tech01_SampleCommon.zip

円形の座標が算出できると、
リングコマンドの実装なんかもできそうですね。

【開発記】マサオのジャンピングレース

1.制作ゲームについて


先週、初めてUnityで3Dのゲームを制作しました。
共同制作をしたSOrowさんのシリーズキャラクター、
マサオくんを主役としたアクションミニゲームです。
シンプルな操作で5~10分で遊べますので、
よかったらプレイしてみてください。
オンラインランキングへの登録お待ちしてます!('◇')ゞ

【DL版】 www.freem.ne.jp

【ブラウザ版】 unityroom.com

2.Unityで作ってみた感触


率直なことを言えば、なかなか苦労しました

これまでは3D座標の考え方がまるでなかったので、
最初はVector3クラス自体が「なんぞこれ」といった感じ。

また、慣れないうちはMonoBehaviourを継承した各オブジェクトが持つ
Updateメソッドが毎フレーム呼ばれるという仕様が、
組み方を間違えると逆に求めている動作の障害になったり……。
これまで使ってきたツールなら簡単にぱぱっと出来ることが、
Unityだと妙な回り道をしないとさくっと出来なかったり……。

ただ、逆にUnityであれば超簡単に出来ることも多々あり、
マルチプラットフォームである点や便利なライブラリを活用出来る点など、
Unityならではの恩恵と勝手の違いをじっくりと感じた開発でした。

3.苦労した点


1.データの管理方法

これまではツール側に標準でDB機能がついていたので、
データ管理などは特に迷うことがなかったのですが、
Unityにはそもそもそういうものが存在しない。

使い捨てだけどシーンをまたいだ情報を保存したい時に、
いちいちPlayerPrefabとか使いたくないなあとか
Staticクラスでもいけるけど視覚的に設定したいなあと思い、
調べてみたらScriptableObjectなる便利な機能があったので解決。

シングルトンとの組み合わせは非常に便利でした。

2.ピクチャの状態変更

これまで使ってきたツールであれば、
移動や透明度の変更などがコマンドで手軽に出来たのですが、
Unityではアニメーションを活用する形になります。

ただ、最初はアニメーションの作り方もよくわからなかったので、
ピクチャを透明度0から255(Unityの場合は0~1.0)に60fかけて
表示したいだけなんだけどなあ、さくっとできないかなあ……
なんて不満を持ってました。

3.セーブロード

そんなものはUnityにはなーい! 自分で作るのじゃ!

でもPlayerPrefabを使えば簡単なデータはセーブ・ロード出来るし、
今回はそれでいっか~、なんて思っていたのですが、
テスターさんがUnity経験者だったため、
ハイスコアを改ざん出来てしまうという問題を教えてくれました。

/(^o^)\ナンテコッタイ

仕方がなくJSONと暗号化を用いて
きちんとセーブデータを作成するようにしました。

PlayerPrefabに重要な情報は保存しちゃダメ、ゼッタイ。

4.画面を真っ暗にする

ひじょーに難しかった。

ライトの向きや強さだけを考えればよい訳ではなく、
skyboxの設定やオブジェクトのシェーダーにも深い関わりがあり、
調べた通りにやっても真っ暗にはならなかったり
影響を受けないオブジェクトが存在したりして、
オープニングの冒頭部分だけで無駄に時間かかってたりします。

今回はskyboxをスクリプト側で変更したり
あたかも照らされた風にオブジェクトをアクティブにしたりして
わりと強引に演出しています。

しかしオープニングはオブジェクト生成やカメラワークなど、
Unityならではの演出が出来たので作っててとても楽しかったです。
お気に入り!

4.楽だった点


1.差分管理

パッケージ出力で更新点だけを簡単に差分出力出来るので、
共同制作者間のデータ受け渡しは非常にスムーズに出来ました。

2.Prefabという概念

変更を一括適用出来るというのはやはり作業負荷を大きく減らしますね。

3.ListやLinqが使える

C#サイコー!ヽ( ´ー`)ノ

4.VisualStudioで簡単にデバッグできる

VisualStudioサイコー!ヽ( ´ー`)ノ
Microsoftの回し者ではないです

5.今後について


今回は3Dで作ったものの、今後も3Dで作るかどうかは微妙なところですね。
3Dでもっとしっかりした物を作ろうとした場合、
素材不足になるのは目に見えているので……。

また、Unityというツール自体が、足りないもの、自分で作ると大変な部分を
有料Assetにて補っていくことで個人でもクオリティの高いものを作れるツール、
という印象があるので、もしやるなら有料Assetを購入する必要があるかなと。
でないと超膨大な時間を浪費することになってしまいそう。

でもそこまでいくともうフリーゲームではないよなあという思いもあり、
どのツールでどのぐらいの規模のゲームをどこまでコストかけてやるか、
という点においてはものすごーく思案中です。

でもまあ今回は3Dで作れて楽しかったです。
モデルデータを作ってくれたSOrowさんにはいつもながら感謝です。
そしてプレイしてくださった方々にも毎度感謝です。
未プレイの方はよかったらプレイしてみてください。

それでは。

移行しました

ブログ的な内容をWordPressで管理していたんですが、
備忘録として使っていたはてなに移行しました。

理由としては、下記の通りです。
MarkDownの書きやすさ
シンタックスハイライトの充実

まあWordPressでもプラグインで同じようなことはできるんですが、
なんとなくかゆいところに手が届かない感もあり……。

ひとまず今後はこちらに備忘録やら開発日記やら書いていきます。

【Unity】.NetFrameWorkのバージョン変更

1.事象

VisualStudioにてスクリプトファイルを開いた際、
「定義済の型'system.void'は定義、またはインポートされていません」という内容にて
戻り値の型「void」がエラー扱いになっていた。
他にも多数の警告表示があり、.NetFrameWorkのバージョンが相違しているため、
参照先のバージョンが一致していない旨が一覧に表示されていた。

2.解決方法

  1. File
    f:id:ashutaru1552:20190302131841j:plain

  2. BuildSettings
    f:id:ashutaru1552:20190302131909j:plain

  3. PlayerSettings
    f:id:ashutaru1552:20190302131921j:plain

  4. OtherSettings
    f:id:ashutaru1552:20190302131934j:plain

  5. Configuration
    f:id:ashutaru1552:20190302131945j:plain

  6. Scripting RunTime VersionとApi Compability Levelの変更
    f:id:ashutaru1552:20190302131957j:plain

※Scripting RunTime Versionを変更するとUnityが再起動されます