困った時の自分用メモ

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

Unityの話〜IPhoneでのリフレッシュレートとFPS〜

同じアプリで同じ設定なのに、どうもiphone5sだとFPSが低く感じる

http://unityleaning.blog.fc2.com/blog-entry-2.html

ここを参考にして、以下の対処を実行。

1.C#側に、Application.targetFrameRate = 60; を設定

2.Unityエディターメニュー、Edit⇒Project Settings⇒Quality

  QualitySettingsインスペクター内の、Other⇒V Sync Count を Dont Sync に変更。

とりあえず、早くなった実感は出た。

実際に、IPHONEのリフレッシュレートの仕様はどうなってるかわからないが、デフォだと30FPSになっているっぽいので、変更したい場合は設定が必要という話。

一言シリーズ~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

 

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