循環小数の作成
参考資料:
www.4gamer.net
のような循環小数の作成
基本的に以下の様な仕組みを利用する。これはゲーム開発では乱数の作成の基礎などに利用できる
等比数列の和の公式 を利用して
となる。簡単に言うと39÷99で循環小数を作れるし、例えば0.1234512345...のような場合は、12345÷99999で作れる。乱数にしたいなら、この99の部分を98や97にずらしていく。(もちろんこんなものは乱数ではないのだが、ぱっとみて乱数と勘違させることは出来る)この循環少数の狙った桁や並んだ数字部分を抽出したいのなら以下のような考え方を利用する(10なら一桁づつだが100にすればふたつずつ抽出するなども出来る)
unityチュートリアル 「2D UFO」のメモ
- テクスチャ画像をシーンにドラッグすると勝手にスプライトレンダーコンポーネントが付加される
- ソーティングレイヤーは描画順
- コライダーコンポーネントはひとつのゲームオブジェクトに複数作り組み合わせることができる
- プレハブは青く表示される。ヒエラルキーからプロジェクトにドラッグすると自動的に作れる
- ctrl+cとctrl+vでもコピーできるが、ctrl+dでも出来る
- コライダーの設定で「Is Trigger」をオンにすると物理的な跳ね返りがなくなる(通り抜けてトリガーが発行される)
- RigedBody2DのBodyTypeを「Kinematic」にするとunity内の物理作用はゼロになり、トランスフォームのみで動くようになる
これにより処理が軽くなる
- 以前のバージョンと違ってunityのUIは名前空間 unityengine.UIで拡張されている
仕様がまるで変っている。textひとつとっても扱い方が変わっているので再学習の必要アリ
UI関連
- 今までと違いCanvas内のオブジェクトに対してはショートカットtで色々なトランスフォームとは別の操作が可能となる
(posやwidth、heightなど)
- RectTransformを持つオブジェクトの場合ヒエラルキーウインドウ内で選択した状態で右クリック->CreateEmptyすると
空のUIの子が簡単に作れる
- レンダーテクスチャはCreate -> RenderTexture で作成できる。これをカメラに設定すると良い
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<カメラ操作tips>
カメラオブジェクトを選択した状態で ctrl+Shift+f で カメラをビューの視点に出来る
ビューはビュー内のどこかをクリックして選択状態にするとカーソルキーが使えるようになる
ゲーム性を向上させる確率の考え方
指数と確率の考え方
>20%の5連撃を1発でも当てれば…なんて時にサクーッと概算できるようになっても
>2の10乗が1000って覚えとくと便利よね
>全部外れる確率は
>0.8の5乗 → 2の15乗の上一桁の数字だけほしい → 3
>だから7割くらいは1発当たるはず
この7割ってのは必ず5回連続攻撃して、その内7割の確率でヒットするという考え方
つまり20%、40%、80%、と言う確率は計算しやすい。又、5回攻撃前提でワンパック(大数の法則)になっている点も強く意識しておく事が大事
ワンボタンで一度に5回攻撃が出るRPGの戦闘みたいな場面を想像すると良い
<メモ>
桁と小数点位置の感覚がつかめていないと痛い目にあうので注意
指数関数はネイピア数を利用した指数関数と同相になる。対数関数とは逆関数の関係となる
(このグラフで考えると横軸に対する拡大縮小率で何回試行すれば充分かという考え方ができる筈。つまりネイピア数に対する係数がある筈)
第一回年末ジャンボと第二回年末ジャンボは写像が変わるので同相でなく不連続となる?
この場合、第一回と第二回を一緒にした写像を作れば連続となるが解は変わるか?
一桁のパーセンテージというのは、ほぼ大数の法則に支配されると考える。場の親であるなら
結果を安定させるために試行の単価(ランニングコスト)を安くして試行回数を増やす必要があると予想できる
「同相」という考え方は重要で強力
https://kotobank.jp/word/%E5%90%8C%E7%9B%B8-1189069
http://rikei-index.blue.coocan.jp/syugou/dousousya.html
unityのシェーダー忘備録1
unityのシェーダー忘備録
UnityのShader作成用抽斗
Cg/HLSL でシェーダープロパティーを参照する
https://docs.unity3d.com/ja/current/Manual/SL-PropertiesInPrograms.html
成分ごとの演算 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509634(v=vs.85).aspx
tex2D等の組み込み関数 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx
メモ:「ベクトル×行列」等の積の演算は「*」は無理でmul()関数を利用する
UnityObjectToClipPos等のビルトインシェーダーヘルパー機能
https://docs.unity3d.com/ja/current/Manual/SL-BuiltinFunctions.html
_Time等のビルトインのシェーダー変数
https://docs.unity3d.com/ja/current/Manual/SL-UnityShaderVariables.html
Shader Unity Support
VisualStudio2015にインストールすると.shaderファイルに対してコード補完やハイライト表示が利用できるようになる
(VisualStudio2017には現在未対応)
機能:
- 「.shader」内の「.cginc」ファイルのコード補完(UnityCG.cginc内の宣言や関数のコード補完に対応している)
- C/C++スタイルのキーワードハイライト表示
- 「.cginc」 「.shader」「.compute」ファイルをサポート
- 括弧のマッチング
https://marketplace.visualstudio.com/items?itemName=MarcinODev.ShaderUnitySupport
グラフィックスコマンドバッファ
https://docs.unity3d.com/ja/current/Manual/GraphicsCommandBuffers.html
コンピュートシェーダー
https://docs.unity3d.com/ja/current/Manual/ComputeShaders.html
GPU インスタンシング
https://docs.unity3d.com/ja/current/Manual/GPUInstancing.html
カスタムシェーダー GUI
https://docs.unity3d.com/ja/current/Manual/SL-CustomShaderGUI.html
[Unity] シェーダを書く準備
http://qiita.com/edo_m18/items/b13f6a51f16ec5d72419
用語
https://msdn.microsoft.com/ja-jp/library/ff604996(v=xnagamestudio.40).aspx
単語・用語
Tranforms position 変換座標
homogenous space 均質空間(相同空間)
homology 相同性 共通の祖先を持つ共通の構造。相似の対義語(相似と相同は明確に違う)
リファレンス
Unity - マニュアル: 内蔵のシェーダー include ファイル
Unity - マニュアル: シェーダーのデータタイプと精度
資料
レンダリングパス
https://docs.unity3d.com/ja/current/Manual/RenderingPaths.html
https://docs.unity3d.com/ja/current/Manual/SL-RenderPipeline.html
フレームデバッガ
https://docs.unity3d.com/ja/current/Manual/FrameDebugger.html
サーフェイスシェーダー
ライティングに作用するシェーダーを書く場合
unity独自のあらかじめ用意された組み込みサーフェイスシェーダーのパーツを利用、流用して楽に自作シェーダーを作成出来る
(unityのライティングを利用したシェーダーを1から自分で組むのは大変らしい)
https://docs.unity3d.com/ja/current/Manual/SL-SurfaceShaders.html
リットシェーダー → 自分で作ったシェーダーの事を指すらしい?
頂点シェーダーとフラグメントシェーダーのプログラミング
フラグメントシェーダーは#pragmaステートメントでどのシェーダー関数を使ってコンパイルするかを示す
それぞれのスニペットには最低でも頂点プログラムとフラグメントプログラムが含まれていなければいけない
https://docs.unity3d.com/ja/current/Manual/SL-ShaderPrograms.html
セマンティクス
セマンティクス (DirectX HLSL).
セマンティクスは、シェーダー入力またはシェーダー出力に付加されている文字列で、パラメーターの使用目的に関する情報を伝達します。セマンティクスは、シェーダー ステージ間で渡されるすべての変数に指定する必要が あります
https://msdn.microsoft.com/ja-jp/library/bb509647(v=vs.85).aspx
<要点>
VisualStudioでHLSLファイルに対してインテリセンスやオートコンプリートを利かせるにはdirectXをインストールする必要がある
UnityやVisualSutdioのインストール方法によってインストールし忘れする事があるので注意
入力セマンティックと出力セマンティックがある。出力は"out"として宣言する
必要なセマンティックが足りない場合、シェーダーは異常終了する
セマンティックは、データがどこで生成されたかを識別します。セマンティックは、シェーダーの入力と出力を識別するオプションの識別子です。
セマンティクスは、次のいずれかの位置に記述します。
- 構造体メンバーの後。
- 関数の入力引数リスト内の引数の後。
- 関数の入力引数リストの後。
組み込み関数 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx
成分ごとの演算 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509634(v=vs.85).aspx
フロー制御 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509600(v=vs.85).aspx
POSITION は頂点位置、一般的には float3 か float4 です。
NORMAL は通常の頂点で、一般的には float3 です。
TEXCOORD0 は、第 1 の UV 座標で、一般的に、float2, float3, float4 です。
TEXCOORD1, TEXCOORD2, TEXCOORD3 は、それぞれ第 2、第 3、第 4 の UV 座標です。
TANGENT は、(ノーマルマッピングで使用される)接線ベクトルで、一般的には、 float4 です。
COLOR は、頂点ごとの色で、一般的には、 float4 です。