Blenderの基本操作

  • 投稿日:
  • by
  • カテゴリ:

覚えられないのでメモ

◆基本操作
A:全選択&解除
B:矩形範囲で選択
G:移動
R:回転
S:拡大
Ctrl+Tab:選択モード切替
テンキー5:投影切り替え

◆頂点(vertex) に関するメニュー[Ctrl+V
◆辺(edge) に関するメニュー:Ctrl+E
◆面(face) に関するメニュー:Ctrl+F
◆スペシャルメニュー:Wキー
◆機能名で検索:Spaceキー

◆ウィンドウの結合
ウィンドウの境界線上で「右クリック」→「エリアを結合」

◆オブジェクトとアーマチュア関連付け
① オブジェクトを右クリックで選択
② Shift押しながらアーマチュアを右クリックで選択
③ 「Ctrl+P」で「アーマチュア変形>自動ウェイトで」を選択

◆ボーンの削除
ボーン選択して「X」キー

◆ボーンの親変更
「Properties」→「Bone」→「Rerations」→「Parent」で親ボーンを設定

◆ボーンの親子切り離し
「Properties」→「Bone」→「Rerations」→「Connected」を無効にする

◆ボーンの複製「 Shift+D」キー

◆ボーンに新たなボーンを追加 「E」キー

◆ウェイトペイント
反対側の面も塗れるようにする:「陰面処理」アイコンで切り替え

[モデリング関連]
E:辺や面の押し出し
F:面張り(頂点選択だけでなく辺選択でもOK)
K:ナイフ
Gを2回押し:スライド移動
Ctrl+B:ベベル
Ctrl+J:選択メッシュを結合
Ctrl+R:ループカット
Ctrl+T:三角ポリゴンに
ALT+M:頂点同士を結合
ALT+S:法線方向に拡大縮小
Ctrl+EのSubdivide:辺を分割
Ctrl+EのBridge Edge Loops:辺同士を面でつなぐ
Ctrl+VのRemove Doubles:重複頂点削除
Ctrl+VのSmooth Vertex:選択頂点を滑らかに

[選択関連]
ALT+右クリック:ループ状に選択
ALT+B:指定領域のみ表示・非表示
H:非表示、ALT+Hで解除
Shift+H:選択箇所のみ表示
Ctrl+I:選択反転
L:カーソル上につながってるメッシュを選択
Ctrl+L:つながっているメッシュを選択

[UVマッピング関連]
・UV展開の切れ目を指定 辺を選択して「Ctrl+E」→「シームをつける」
・UV展開 面を選択して「U」→「展開」
・ピン留め 頂点選択して「P」、「ALT+P」で解除
W:溶接/整列メニュー

参考:
http://ito144.hateblo.jp/entry/2017/04/13/100817
http://cg.xyamu.net/Blender/entry188.html
http://cg.xyamu.net/Blender/entry26.html
http://riotoqll.hatenablog.com/entry/2014/02/10/162604
http://xolokix.hatenablog.com/entry/2017/12/10/234406

アドフリくんのキャッシュ

  • 投稿日:
  • by
  • カテゴリ:
リワード動画を実装したら、
アプリ起動するだけで/Library/Cachesにデータがダウンロードされ
アプリ終了後も残り続ける模様。

ストレージが逼迫したらOSが勝手に削除するディレクトリではあるものの、
iOSの「ストレージを管理」で見たときに「書類とデータ」にカウントされ、
無駄に容量を食うアプリという印象を与えてしまう。

起動時や終了時にApplication.temporaryCachePath内をクリアするのが良さそう。


public static void DeleteCaches()
    {
        string path = Application.temporaryCachePath;
        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path);
        foreach (System.IO.FileInfo file in di.GetFiles())
        {
            if (file.IsReadOnly == false) {
                try
                {
                    file.Delete ();
                }
                catch (IOException)
                {
                }
            }
        }
        foreach (System.IO.DirectoryInfo dir in di.GetDirectories())
        {
            //iOSが生成するSnapshotsは消せない模様
            if (dir.Name != "Snapshots") {
                try
                {
                    dir.Delete(true);
                }
                catch (IOException)
                {
                }
            }
        }
    }

追記:
AndroidだとApplication.persistentDataPath内にも色々溜め込んでいる。

アドフリくんのMovieRewardCallback

  • 投稿日:
  • by
  • カテゴリ:
自前で作成した初期化やコールバック受け取り用のクラスを
AdfurikunMovieRewardUtilityと同じGameObjectにアタッチしてはいけない。

引数の型が異なるMovieRewardCallbackが2つのクラスにあって
SendMessageで両クラスに通知されるので下記エラーが発生する。

MissingMethodException: The best match for method MovieRewardCallback has some invalid parameter.


Androidで動いてたけどiOSではクラッシュする。
以前実装した時も同じようにハマってMovieRewardCallbackが呼ばれないなぁとか思った記憶がある。

Unityにアドフリくんを組み込んでXCodeでビルドする

  • 投稿日:
  • by
  • カテゴリ:
追記: SDK ver.2.10からこの作業は不要になりました。

MovieRewardを実装した際のメモ。

XCode側でSDKを手動設定するのは面倒なので
下記を参考にさせて頂いた。

注意点:
アドフリくんから提供されるzip内の各社frameworkのうち、
下記2つはフォルダが1階層深くなってる。
 Tapjoy.embeddedframework
 VungleSDK.embeddedframework
上記のフォルダを取り除いてAssets/Plugins/iOS直下に入れること。
そうしないと、'Tapjoy/Tapjoy.h' file not found などのエラーが出る。

上記やっても、ADFmyMovieReward.h file not found が出たので
下記のやり方に変更した。

・各社のフォルダはそのままの構成で/Assets/Plugins/iOSに入れる。
 /Assets/Plugins/iOS/AdColony_3.1.1
 /Assets/Plugins/iOS/applovin-ios-sdk-3.4.3
 /Assets/Plugins/iOS/Maio_1.2.8
 /Assets/Plugins/iOS/SmaAD_1.1.3
 /Assets/Plugins/iOS/Tapjoy_11.9.1
 /Assets/Plugins/iOS/unityAds_2.0.4
 /Assets/Plugins/iOS/Vungle_4.1.0

・上記フォルダ内にある「〜.framework」フォルダのみを/Assets直下に移動する。
 /Assets/AdColony.framework
 /Assets/Maio.framework
 /Assets/Tapjoy.framework
 /Assets/UnityAds.framework
 /Assets/VungleSDK.framework

・アドフリくんの.frameworkフォルダも/Assets直下におく。
 /Assets/ADFMovieReward.framework

・ /Assets/Editor/AdfurikunMovieRewardPostProcess.cs の176行目あたりに下記を追記。
proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(SRCROOT)/Frameworks");
proj.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(SRCROOT)/Libraries/Plugins/iOS");
元々、Creative Cloud の「年間プラン 月々払い」で契約していて
最近更新したばかりだったので年間プランが切れるのは約1年後。
月々払いなので来月も5378円引かれる予定。

という状況で、Amazonのセールにて3年分のオンラインコードを約50%オフで買ったので
すぐにオンラインコードを適用してみた。

1年後まで定価で払った後にオンラインコード分が延長されるような形だったら嫌だなと思ったけど
実際はそんな心配いらなかった。
月々払いの代わりにオンラインコードで3年分払った形になり、
プラン更新予定日は来月から数えて3年後、次回請求日も同じく3年後。

無駄に定価で払い続ける必要がなくなった。


ちなみに年間プランを中途解約したい人は、解約金がかなり高い(残存期間の半額)そうなので、
残存期間が長い場合はコンプリートプランで解約するのではなくフォトプランにプラン変更してから解約したほうが良いみたい。

Windows10でUnityのインストールが進まない

  • 投稿日:
  • by
  • カテゴリ:
Windows10にUnity5.3.5をインストールしようとしたところ
"Installing Playback Engines"の状態でインストールが終わらない現象がありました。

タスクマネージャーで「Windows モジュール インストーラ」というタスクを終了させると
正常に進むようになりました。

http://answers.unity3d.com/questions/1095497/unity-522-installation-gets-stuck.html

Unityでスタイラスペン入力する

  • 投稿日:
  • by
  • カテゴリ:

Unity5.2はペン(デジタイザー、スタイラス)による操作に対応していないようです。

AssetStoreに対応プラグインが一つあったがUnity5で動かない模様。

Panasonic ToughPadやMicrosoft Surface Proなどペンを使った端末で動かしたい場合、

ワコムのWintabというタブレット用APIを使うプラグインを用意する必要があります。

以下、簡単に手順を書いておきます。

 

1)ワコムのドライバーに含まれるWintab32.dllを入手。

下記をインストールすると /Windows/Systems32 と /Windows/SysWOW64 内に入ります。

http://us.wacom.com/en/feeldriver/

 

2)Wintab32.dllを使うための .NET ラッパー「WintabDN」のソースを入手。

http://www.wacomeng.com/windows/code/WintabDN.zip

 

3)Visual Studio Expressをインストールして、WintabDNプロジェクトをビルド。

※Visual Studio Express 2015は巨大なので2013で充分。

※プロジェクトのプロパティで対象フレームワークを「.NET Framework 3.5」、出力の種類を「クラスライブラリ」に。

※.NET4用のコードでエラーが出る個所は、.NET3.5用に修正する。

 

4)ビルドしてできたWintabDN.dllをUnityプロジェクトの/Assets/Plugins/に入れる。

 

5)下記のコードをほぼそのまま使わせていただく。

http://forum.unity3d.com/threads/wacom-tablet-input-script-in-c.317154/

※一部、コメントアウトやアンコメントする必要あり。

※MyWTPacketEventHandlerにペン座標と筆圧が届きます。

※アプリ終了時のハング対策としてmonoスレッドを閉じるコードの追記が必要。

 

6)ペン座標をUGUIのEventSystemに渡すためにStandaloneInputModule.csを参考にして

StylusInputModule.csを作る。

https://bitbucket.org/Unity-Technologies/ui/src/0155c39e05ca5d7dcc97d9974256ef83bc122586/UnityEngine.UI/EventSystem/InputModules/?at=5.2

http://tips.hecomi.com/entry/2014/09/25/233823


追記:

アプリを起動して初めてタッチするときに30%くらいの確率でエラーダイアログが出る現象が起きた。

ログを見るとDllNotFoundExceptionが起きてる。

回避策としては、下記のような感じでcontextをopenした直後にGetDataPacket()を実行すること。

m_logContext = OpenTestSystemContext(ctxWidth_I, ctxHeight_I, ctrlSysCursor_I);

WintabPacket pkt = m_wtData.GetDataPacket((uint)m_logContext.HCtx, 1);

理由はわからないけどこれでエラーが起きなくなった。