困った時の自分用メモ

読んだ本を考察してメモったり、自分でいじった物の感想をメモったりする場。週1更新を目指します。

一言シリーズ~2点間の距離の求め方~

一言シリーズ~2点間の距離の求め方~

三平方の定理を使う。Luaだと、math.sqrtを使う。

function test()
    local ax = 0
    local ay = 0
    local bx = 10
    local by = 10

    local xLength = (bx-ax)
    local yLength = (by-ay)

    local abLength = math.sqrt( (xLength*xLength) + (yLength*yLength) )
end

イメージしづらい場合は、bxを0にして、原点からyに10伸びてる線を考えるといい。
当然、長さは10だが、計算結果も10になるはず。

記事の紹介~Luaを開発に使っている事例~

知人が教えてくれた、チュートリアルの実装にLuaを用いているというお話が記載されている記事。

 

tech.drecom.co.jp

ロジックまで完全にLua側では実装していなくて、少し使ってる程度だから、パフォーマンスの検証などは恐らくやってない、との事だったけど、商用アプリでLuaも選択肢の一つとして使われている事例があるという事は、情報が出ていないだけで、やはり使われているアプリも出ているんだろうなと思った。

 

※追記
ちなみに、Unityとは言っていないので、Cocosの可能性もあり。
ただ、スマフォ開発でLua使ってるよという事例は、これとブレフロくらいしか知らなかったので、希少な例であることには変わらないと思う。

Cocosで行けるなら、Unityでもいけるはず。

Unityの話~描画順番の話~

https://twitter.com/eral_r_l/status/495866386581712897?lang=ja

上記のツイートの転載というかまとめ。

 

[1]Unityの描画順について解説を6回に分けて呟きます。Unityに於けるモデルの描画順はカメラのDepth値とRenderQueueと呼ばれる値とカメラからの距離に依って決まります。

 

[2]まず第1にカメラのDepth値が小さい順に映るモデルが描画されます。映るモデルとはカメラのCullingMaskとモデルのLayerに依って決まります。カメラ内に映るモデルが複数有る場合、RenderQueueと呼ばれる値に依り描画順が決まります。

 

[3]RenderQueueの確認はInspecoterをDebugモードにしてMaterialにフォーカスさせるとCustom Render Queueとして確認出来ます。この値が小さい順に描画されます。但しマイナス値の場合はShader組み込みの値が使われます。

 

[4]Shader組み込みのRenderQueueの確認はInspecoterをNormalモードにしてShaderにフォーカスさせるとRender queueとして確認出来ます。多くの場合RenderQueueは遮蔽モデルなら2000、透過モデルなら3000と為ります。

 

[5]RenderQueueが同じ場合、カメラからの距離に依り描画順が決定します。RenderQueueが3000未満のモデルの場合カメラから近い順に描画され、3000以上なら遠い順に描画されます。

 

[6]なお唯一RenderQueueに影響されない描画物が1つ有り、それがカメラのClearFlagsに依る描画です。この描画はカメラの一番最初に行われ、それ以降に映るモデルが描画される事に為ります。

 

 

Unityの話~Animator関連で初めてみたワーニング~

【実行時に出たワーニング】

Internal: JobTempAlloc has allocations that are more than 4 frames old - this is not allowed and likely a leak

 

【状況】

・A,B,Cのオブジェクトそれぞれに、同じAnimatorを付けている

・Animationの終わりに、イベントトリガーを付けている

・イベントトリガーの中身は、A,B,C全てのオブジェクトを非表示にするようにしている

・Aだけで検知すればいいので、B,Cに関してはイベントトリガー関数先で何もしていない

・この状況で、B,CのオブジェクトをSetActive(false);を呼びと、発生

・外部からの圧力(まったく関係ないタイミング)で、全て強制的にSetActiveを呼ぶと、出ない

 

【原因】

不明

 

【対処法】

それぞれのオブジェクトのイベントで、自分自身のアクティブをオフるようにした

一言シリーズ~2点間の角度の求め方~

2点間というより、原点からある点に対する角度の求め方、と考えた方がいい。

atan2(y, x)で、ラジアンが取れるそうだ。

 

function test()

    local radian = math.atan2(posy, posx)
    local degree = radian * 180 / 3.1415

end

 

タッチされた方向にキャラを向かせる、なんて時に使えばいいと思う。

一言シリーズ~角度がわかっている場合の、原点0,0からのx,y座標の求め方~

原点0,0から角度Nにある座標の数値は

(cosN, sinN)

https://helpx.adobe.com/jp/flash/kb/228615.html

(これのページは、cosとsinが逆になってしまっている)

 

function test()

    posx = math.cos(radianValue)

    posy = math.sin(radianValue)

end

 

主に、シューティングの弾で向いている角度に向かって飛ばす移動量のベース値などに使う。

Unityの話~Lua形式のファイルをアセットバンドル化しようとして、速攻躓いた件~

Unrecognized assets cannot be included in AssetBundles: "Assets/StreamingAssets/EnemyManager.lua".

 

このように出て、アセットバンドルに入れられない。.lua拡張子は対応していないようだ。

 

〇StreamingAssets内に入っていると、拡張子がtxtでもダメ

〇Resources以下にtxt形式にすればOK

〇Resources以下でも、拡張子がluaだとNG

〇ただ、マニフェストファイルを見ると、含まれているような挙動をみせる

〇ロードしようとすると、やっぱり読めない

〇Unity上では、lua形式のファイルはDefaultAssetとして認識されているようだ

CSVはテキストアセット扱いのようである

 

最初からtxt拡張子にしてもいいのだが、そうするとVIM上でシンタックスが効かなくなるので、作業ディレクトリでは拡張子luaで作業し、アセットバンドルフォルダにコピーして拡張子をtxtに変えるbatファイルを作って対処。

 

del "..\Resources\ForAssetbundle\*.txt"
copy "*.lua" "..\Resources\ForAssetbundle"
rename "..\Resources\ForAssetbundle\*.lua" "*.txt"
pause