blenderで人物モデリング (女の子)-4/?

これも参考

Daniel Kreuterさんの講座。

この方は説明が丁寧で英語がわかりやすいので、すごく助かる。
ほぼ全面初心者向けの説明をしてくれる。

何度もやり直し

気に入らないなーと思ってスムーズにしてみたら、失敗していることがよくわかる。

失敗1-ミラー失敗

右側だけで作成するので、左側はミラーで対応する。

で、たまーに起こるのが、ミラー失敗。ミラー解除して再度設定すると治ること多い。なぜ失敗したのかは、身に覚えがないのでわからない。

失敗2-ループカットの先が変

明らかに、ポリゴンが足りない。

なんか、変だなと思って、ループカットしようと思ったら案の定。原因はやはり不明。とりあえず地道にポリゴン増やしていくときに間違えたした考えられない。

この場合は、もう完全にやり直している。

外側のポリゴンが足りなかったら何とかしたと思うのだが、根本的に無理だと判断したらやり直してる。

途中セーブ大切!

失敗3-点がつながっていない。

どうしてこうなった。

明らかにおでこが浮き出ている。そして頬ら辺もちょっと浮いている。

どこかしら点が複製されていることが原因のことがおおい。変に浮いているところの点の周り選択して点の結合をすれば、たいていは治る。治らない場合は、あきらめる。

少なくとも5回はやり直している。

やり直す分だけ、早くなるので、それほどまでにはつらくない。やり直せばさすがによくなるので、大丈夫。

ただちょっと頭痛くなるのは否定しない。

前に進んでる感があるので、割と満足はしているのだ。

blenderで人物モデリング (女の子)-3/?

参考書より、youtubu講座

今回参考にしたのは、以下のモデリング講座。
めちゃめちゃめちゃわかりやすい。

左下に押したボタンがなんなのか出てくるので、英語はほぼわからなくても済む。
確かにちょっと、ほかの口座に比べれば口頭説明多め。

ここまでかかった時間40分

慣れれば、講座は参考程度で全然問題ない。
そして進捗。

講座の3番目までを見てやりました。

今日で体は終わるわ。

女の子ベースなので、腰細め。骨盤太目。お尻もちょっとぷっくっと。

あんまりぼーんぎゅっぼーんを目指してはいないので、ここまでにしておきます。

…やはり私にはlive2dよりblenderが全然早い気がする。慣れなのか?慣れなのかしら。

遠近感があまりないので、秀麗な絵というか、自分の気に入った絵を描くのはものすごく時間がかかるんですよね。

 

blenderで人物モデリング (女の子)-2/?

blenderで下準備する

初期状態からまっさらな状態にする

まず、blenderを開くと、この状態。

カメラと照明とキューブが存在している。とりあえず全部消す。

割と邪魔なので。各オブジェクトに右クリックすれば選択できるので、deleteキーで削除するなり、削除。

いうことはない。言われたとおりにする

私が参考にするのは、以下の動画です。

これを参考にそのままやればいいだけですが、とりあえず抜粋して説明します。

①イメージ画を取り込む

すべてを削除した状態でテンキーで1を押すと、ZとX軸が表示される。

ちなみにblenderのテンキーの話は、以下サイトよりご参考。

【Blender】テンキーでの視点変更【カメラ,フロント,ライト,トップ等】

あとは、作成した2つの画像をそれぞれドラッグしてblenderに引っ張る。すると、以下の状態へ。

あとは、これをちゃんと背景画像であることを設定する。正面の画像は、frontで設定。右の画像は、rightで設定。

背景の白が邪魔な場合は、フォトショから、線だけでpngファイルで画像を吐くか、以下の設定をかえる。

下準備完了。あとは作る。正直、これ以上語れるものがないので、以上になりそうな気分。

blender関連youtube講座のほうがblog型講座より役にたつ!!!

ちなみに、実際に使ったのは、以下のようにしておきました。pngで線抜き状態。

blenderで人物モデリング (女の子)-1/?

イメージを準備する

そう、イメージがわかればいいんだ

モデリングを一番最初にやろうとしたとき、いろんなゲームの設定集などを探ってました。が、私にはそんな細かい設定を用意できない(面倒くさい)。

すべて、がちがちに準備なんかしないでいいじゃないですか。わかればいいからね。結局のところ。

必要に応じてあとでそろえればいいんです。

※ディテールを大切にする方には向いていないかも。

そしてこちら専門の方には怒られるかも。だがしかし、私はあくまで趣味の延長でしかないから、苦痛になるなら適当でいいです。

まずはイメージ画像から

私は筆が遅いです。素敵な絵師様方が30分で書ける落書きでも2時間かかります。(あれで本当に2時間くらいかかっている)

なので、イメージ絵で時間をかけすぎると前に進めないので、荒く、とりあえずイメージがわかる感じで描きます。

それ以上は描かない。

で、今回の私の主人公。名前はない。いつかデフォの名前を付けることでしょう。

saiで描きました。サイズは600×1600とりあえず大きめに。

正面顔と横顔を準備する

今度はPhotoshopでやっています。たぶん、saiでそのままやってもいいけど、マス目の設定とか面倒くさいので、フォトショでやります。

イメージ画像を読み込みます。

①正面顔と横顔の枠を用意

イメージ画像から、頭の大きさの四角い枠を作る(左の四角)。それをコピーして、同じ位置に横顔用の四角の枠を用意。

あとは目の位置にを示す細長い四角の枠を用意します。

②正面の頭を描く

イメージ画像は斜め向いているので、正面の顔を描きました。

ただ、私は真正面を描くことが苦手で、ちょっと斜め向きになります。ので、一度描いたら、そのレイヤーをコピーして、垂直方向で反転させて正面の顔に整えることをやります。

③同じ要領で横顔を用意する

線汚いですが、きにしないで大丈夫★

顔ができれば、体も準備する

やり方は一緒。正面で足の長さと腰のくぼみさえわかればいいです。

横がめっちゃあっさりしていますが、こちらも厚みさえわかればいいかと思います。

これで一通り準備完了。では、次はいよいよblenderで読み込んで開始します。

さて、今月で終わりたいなー。

社会人辛すぎだろ

社会人になって丸1年以上

とりあえず、会社辞めたい毎日でございます。

佳境が永遠に終わらない…。

昨年はアプリ作れなかったよ…。

さっくり1年かけて何かしら作りましょう。ストレスたまりすぎて、3Dモデリングしたい気分。

来年リリースに向けて今から準備するんだ。

できるかできないかわかんないけど、年始だし挑戦くらいいいよね。

 

7月に戻ります。

社会人だからね

出張に行ってまいります。出張というより、研修。2ヶ月間。7月に戻ります。6月に公開とか笑えるwwww 今年中に公開できるといいな。

会話表示→イベント分岐まで行きたかったので、とりあえず目標は達成かな。(大嘘)このスピードで製造していたら、この仕事で食べていくのは無理だよねー。

ま、なんだ。使いまわせるやつだからやっておけば、後は楽なはず。と言い聞かせています。

MonoBehaviourさんはNewさせない。

とりあえず進捗

①既存ゲームファイルがない場合「続ける」ボタンを非活性かする

②newゲームボタンで、所定の画面へ線維

③それなりの会話を表示させる。

ここまで動けば割と楽しいですね。このペースで進めばまぁ、なんとか終わるだろう。ただし、ストーリーがない。追いついていない。そしてイメージファイルもない。作らなければ。今年中に公開したいな・・・。

どんどん伸びているけど、気にしない。趣味だし。嫌いになるよりはだらだらやりますお。

unityはオブジェクトにスクリプトをつけるのよ

というのが、基本の考えだそう。

ふーんそうなんだというくらいしか考えていなかったけど、一番はじめにUnityでC#やっていた時に詰まったので、記事にしておきましょう。

さて、以下はCSVを呼び出すクラスです。なんども書いているので、説明は割愛。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class CsvReader : MonoBehaviour {


	//読み込むCSVファイル
	private TextAsset csvFile;
	//表示用シナリオ(退避用CSV)
	private List<string[]> scenarioList = new List<string[]>();
	//シナリオ行数カウンタ
	private int csvCount = 0;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	public List<string[]> CsvRead (string scenarioName){

		csvCount = 0;

		csvFile = Resources.Load ("Scenarios/" + scenarioName) as TextAsset;
		StringReader reader = new StringReader (csvFile.text);

		//csvファイルを取得
		while (reader.Peek () > -1) {
			string line = reader.ReadLine ();
			scenarioList.Add (line.Split (','));

			csvCount++;
		}

		return scenarioList;
	}

}

そして、メインのオブジェクト(今回はCanvas)には、このシーンを制御する、「NewGameController.cs」がいらっしゃいます。
この中で、CsvReader.csを使いたい。ね。普通の考え方だよね。

で、ここでネックになるのが、「Unityさんはオブジェクトにスクリプトコンポーネントをつけて使用する」ということ。

作成したスクリプトは、まず、どれかしらのオブジェクトにつけておく必要があります。
裏方さんでいらっしゃっても、必要。

裏方さんもメインのスクリプトさんと一緒にいた方が楽なので、同じオブジェクトにつけます。できるだけね。

私は基本、主なスクリプトはCanvasに集めています。

空のゲームオブジェクトにスクリプト集めている方もいらっしゃいましたね。それはそれで見やすいね。

んで、以下はメインさん。

public class NewGameController : MonoBehaviour {

	//シナリオCSV取得クラス
	private CsvReader csvReader;

	// Use this for initialization
	void Start () {
		csvReader = new CsvReader();
	}
}

一見、普通のC#クラスだと考えれば、普通です。行けそうです。
しかし、MonoBehaviourクラスでは、怒ります。

以下がエラー内容。

You are trying to create a MonoBehaviour using the ‘new’ keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
CsvReader:.ctor() (at Assets/PlugIns/CsvReader.cs:14)
NewGameController:Start() (at Assets/Scripts/NewGameController.cs:24)

簡単にいうと、Newキーワード許さねーぞ。componentから取得しやがれ。ということ。
上記を回避するためには、以下の通り、Newではなく、オブジェクトに付いているスクリプトコンポーネントを見つけて来るようにさせます。

以下の通り。

public class NewGameController : MonoBehaviour {

	//シナリオCSV取得クラス
	private CsvReader csvReader;

	// Use this for initialization
	void Start () {
		csvReader = GetComponent<CsvReader> ();
	}
}

この場合は、同じオブジェクトに付いている、を見つけに行っています。
別のオブジェクトのものをGetすることももちろん可能。

個人的には、あまり好きじゃないのでこっちにする。

UnityでCSVを読み込む

ソース残していないべ

かなり前、CSVを読んで配列に格納するスクリプトを作成しておりました。

Unity CSVを読み込んでシナリオを書き出す

ので、それ読み込めばすぐ終わるわ(笑)としていたら、削除していましたね。

多分ね。去年というか今年の初めにMacさんの調子がすごぶるよくなくて色々片付けしていた時に、不要だと削除したんだわ。

その時パッケージエクスポートしていないから何も残っていなくてま、再作成。

ついでなので、ここにもソース乗せておく。

パッケージ化したいので、別プロジェクトでサクッと作ります。

事前準備

①テスト用CSV:今回は4行2列のものを準備。

Assetsに「Resources」フォルダを作成、さらにわかりやすくするため、そのフォルダの下位フォルダ「Scenario」の中にCSVをインポートしておきます。

②CSVを読み込むアクションが必要なのでボタンを配置

③CSVを読むスクリプト「CsvReader」をキャンバスUIをつける。

ソース

面倒臭いので、そのまま載せる。なお、c#です。

using UnityEngine;
using System.IO;

public class CsvReader : MonoBehaviour {


	//読み込むCSVファイル
	private TextAsset csvFile;
	//表示用シナリオ(退避用CSV)
	private List<string[]> scenarioList = new List<string[]>();
	//シナリオ行数カウンタ
	private int csvCount = 0;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	public void CsvRead (string scenarioName){

		csvCount = 0;

		csvFile = Resources.Load ("Scenarios/" + scenarioName) as TextAsset;
		StringReader reader = new StringReader (csvFile.text);

		//csvファイルを取得
		while (reader.Peek () > -1) {
			string line = reader.ReadLine ();
			scenarioList.Add (line.Split (','));

			Debug.Log (scenarioList [csvCount] [0] + "," + scenarioList [csvCount] [1]);

			csvCount++;
		}

	}
}

動きはDebug.logで確認するため、入れています。

ま、これでおっけ。その後は、ボタンの「On Click」時の動きを設定してあげる。

シナリオ名前を変えて読み込みたいので、引数で渡しています。

この類の処理に関する詳しい解説を乗せているサイト様は山ほどあるので、これはあくまで私の備忘として説明は割愛。

ボタンを押すと、Debugを吐き出します。

ついでにパッケージエクスポート

パッケージをエクスポートしよう。

ここにある。以上。

いつも思うのだが

Unityで初めてプログラミングを全くやったことない人が、これでプログラミング覚えるのはあまり良くない気がする。

知っている人だからこそのやり方があると思うのだけど、

例えば、Unityはボタンにスクリプトをつけるという前提なので、クラスを作ってNewしようとすると怒る。それ、許さないって怒られる。

別の言語でプログラミングやる方はお分かりでしょうが、クラスNewできないんだふーんってなるじゃん?

逆のバターンで、クラスをNewしようとする発想がない人がやるとちょっとなと思って。いや、偏見と先入観かもしれないけど。

シーンを分けることを考える

シーンの分け方のルール決めよう

割と、シーンの分け方に甘かったかな。

今回のアプリは1つのシーンのほぼほぼ集約するつもりだったんだけど、

弱一ヶ月半ぶりに開いてみて(ついでに3.3にupしてみて)、

このシーンの分け方だと、非常にまどろっこしいことに気づいた。

簡単に言えば、スパゲッティ化する。

なるほど、シーンを分けることは、こういうことがと気づくことができましたのね。

・・・日にち開けてプロジェクト開いてみるのは良い経験だよね。不本意だけど。

ここで、Qiitaを漁って良い記事を見つけました。

・[Unity] Sceneの役割や使い方をざっくりまとめた

https://qiita.com/lycoris102/items/bf0a9ec4a653b4dd97b9

改めて考え直すととても役に立つ良い記事。

プログラム自体は割とわかりやすくかけていたので(褒めよう過去の私)、あとは保守面を考えて、シーンを分けようと思います。

会社行くまであと3週間ほど、それまでにゲーム性のところ完成しよう。

明日の目標は、ゲーム開始シーンの完成。

必要なのは

①ゲーム初めての判定
②会話用の見栄え
③ CSV読み込み
④自分情報の初期設定
⑤トップ画面を表示する ←これはもうあるので、表示するだけ。

できるレベルの目標を決めてやらないと、ダラダラになりそう。

同じ動きなら、Animatorは一つで大丈夫

Unity始めた時は、わからんかった

なに当たり前なこと言ってんだよってことかもしれませんけど。

私は知らなかったの!知ったのはほんの、一個前のアプリ作った時でした。

つまり、Prefubすごいってこと。アニメーターもまとめてプレハブ化できるー。

こんな感じのパネルがあるとしましょう。

こんな感じで動く。今は「Info」だけにしている。

で、同じ大きさのオブジェクト(ま、パネルですけど)を後3つ、作る。ShopとかSmsとかね。

初心者の私は、それぞれのパネルにAnimatorをそれぞれ作り(つまり4つ)、それぞれを動かしていました。

無駄だね!だって「Info」パネルを作って、Animatorまでつけた状態でPrefubしちゃえば良かったもんね。

スクリプトで区別してやれば良いだけの話。

Prefub化したInfoから、もう一つ作成してやる。

スクリプトは、ボタンを利用するところにつけてます。そこにPublicでAnimatorを設定させる。すると、できちゃう。

ねー。

Animator同じやつめっちゃ作ってたんだよねー。しかもその状態で公開したんだよね(一番初期のやつ)。

2個目のアプリの方が、色々と突っ込んでいるわりには軽いのですが、その理由の一つはこういう余計なものが集約されたからだと思うのね。

恥さらしということで、公開。

1 / 7ページ

© Copyright 2017 「It Happens」 All rights reserved.