イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Blenderのミラー使用時、ミラーと元のオブジェクト間で隙間が出来た場合

ミラー使用時に隙間が出来た場合、

1:一度、ミラーを削除

2:ミラーの基準点としたい場所にカーソルを設置

3:Ctrl Alt Shift C で”原点を3Dカーソルへ移動”

4:ミラーを設置

再び、隙間が出来ていたら、Ctrl Z で2まで戻ってこの工程を繰り返す。

 

Eで面を延長して隙間を埋めると頂点が増えるという問題がある。

Blenderで多数の頂点が勝手に消えた場合

Blenderをやっていて、頂点が勝手に大量に消える現象が発生した。

実際は消えたのではなく、表示されなくなっただけであった。

あるオブジェクトを選択しているとき、他のオブジェクトは編集モードにしても頂点は全ては表示されず中途半端にしか表示されないようである。

(どうせなら全く表示しないとかにしてほしい。中途半端に表示されていたので、消えたと思って作業をやり直してしまった)

Blenderでミラーの基準点を移動する方法

Blenderをいじっていて、ミラーをした場合の基準点・中心点がずれてしまう問題が発生した。以下の方法で修正出来た。

 

ミラーしてるオブジェクトを選択

移動させたい場所にカーソルを置く

Ctrl + Shift + Alt + C

3Dカーソルへ原点を移動で基準点がカーソル位置へと移動する

 

unityのprefabの生成からスクリプトのアタッチまで

f:id:arumogina:20180916041410p:plain

 

最初、prefabで生成するオブジェクトのorder in layerの設定箇所が分からず時間を喰った。prefabの場合は、下段のプロジェクトウィンドウのクリックから設定する。

 

解説画像のプロジェクトは以下のサンプルから。

https://www.amazon.co.jp/dp/4797393521/

イラスト習作2.2

++

とりあえず3面図が出来た。

もともと、厚塗りでやるつもりだったが、正確性というか仕様をハッキリさせるための3面図を描くのには向いてないことに気がつく。

髪の跳ね具合や足の開き具合とかイマイチ正確でないところあるが、まあいいや。

色塗りの際、ベースに灰色とかを塗ってクリッピングする工程があるが、飛ばしてみたが特に問題はなかった。感じた弊害は白を塗るとき背景色と同じなので塗れたか分かりにくくなることか。

++環境

線画はペン

塗りはアクリル

グリッドは自作ツール

https://arumogina-tech.hatenadiary.jp/entry/2018/07/27/012623

ペイントソフトはmedibang

f:id:arumogina:20180914165848p:plain

 

++ラフ

f:id:arumogina:20180914170431p:plain

c#の拡張メソッドについて

静的メソッドをインスタンスメソッドっぽく呼べるようにしてくれる。

public static class Ext{
 public static void Apple(this string val){
  System.Console.Write("Apple");
 }
}

上記のように書くことで string型のインスタンス

  "str".Apple()

のようにコールすることが出来る。

拡張メソッドAppleの引数にはレシーバのインスタンスの値渡しが入る。refは使用出来ず、型にdynamicを指定することも出来ない。

また静的メソッドをインスタンスメソッドのようにコール出来るようにしてるだけなので、静的メソッドの制約を受ける。

 拡張メソッドの引数にインターフェースを指定することで特定のインターフェースを継承したクラスにのみメソッドの使用(共有)を許すことが出来る。

namespace ForTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var ins = new MyClass();
            ins.Mt();
            Console.ReadLine();
        }
    }
}

public static class Ext {

    public static void Mt(this Itf mc)
    {
        System.Console.Write("OK");
    }
}

public interface Itf { }

public class MyClass : Itf { }

 

これでItfインターフェースを継承したクラスのみが、Mt()を使える。

なお、MyClassを継承したクラスはインターフェースも継承するのでMt()を使える。

拡張メソッドの引数の型にインターフェースを指定すると、使えるメソッドがインターフェースに宣言されたものに限定されるので、インターフェースを継承したクラスのインスタンス変数を拡張メソッド内で利用するにはそのインターフェースにアクセサとなるメソッドを宣言し、クラスで実装する必要がある。

 

++参考

c# - C#にRubyにおけるmoduleに相当する機能はありますか? - スタック・オーバーフロー

拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C