カテゴリー: Tips Page 1 of 4

blender 2.8を触ってみる

ぱっとみ、見やすい

かなり変わった感じがする。今時ツール感。

何年も2.7代をみていたのに、そこまで違和感とかはない。

右上にある軸の表示が見やすい。かなり控えめだった印象…

blender 2.79を覚えていない

ずいぶん触っていないせいかな、正直言って覚えていない。

そしてそれなりに癖あるので、自分でまとめておいたショートカットキー集をみないといけなかった。

キーがかなり特殊だったイメージがあったのだが、blender2.8だと、ほかのツールを押したときと一緒のキーで動いている感じ。

選択が右クリックだったものが左クリックになっていてやりやすい。

blenderの癖っぽいのがだいぶなくなった気がする。

感覚的な動き。いわば、フツーの動き。

視点変更も変更なし。こんなもん。

フレームにみせたり、ソリッドで見せたりキーボードと組み合わせで使いやすい。

一通りやってみた感じだと、使いやすい。

あれ?もとからこうだったけ?覚えていないけど、キャラつくるぞー

 

 

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で読み込んで開始します。

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

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しようとする発想がない人がやるとちょっとなと思って。いや、偏見と先入観かもしれないけど。

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

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

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

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

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

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

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

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

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

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

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

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

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

ねー。

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

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

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

Unity パネルを開く

パネル表示しよう

真ん中の黄色い矢印のボタンは「ComputerButton」これをクリックすると「GamePanel」が現れます。

ということで、これがトップ画面。右のパネルのど真ん中にあるイメージ(ボタンコンポーネントつき)をクリックすると、左の子が表示されます。

アプリを稼働させると、こんな感じ。

Triggerが一般的かしら

初期状態 →  ボタンをクリックして、オープン → オープンした状態 (作ってはおいたけど、実装はしていない「クローズ」

ここの説明のブロガーさんは山ほどあるので、説明スキップ。

作成したTriggerは「Open」「Close」の二つ。どんな動きなのかは、名前のとおり。

Triggerをスクリップで設定する。

これもいっぱいあるけど、一応。

スクリプト名は「SubPanelControl.cs」c#です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SubPanelControl : MonoBehaviour {

	public Animator PanelAnim;

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

	public void OpenPanel(){
		PanelAnim.SetTrigger ("Open");
	}
}

上記スクリプトは「GamePanel」につけています。動かしたいのは、このパネルだから。

AnimatorをPublicにしているので、スクリプトのところで、アニメーションをつけている、己を設定してあげる。

で、これを呼び出すボタンは、こう。

On Click()時に呼び出すのは、「GamePanel」なので、引っ張って設定。「GamePanel」に設定されている、スクリプト「SubPanelControl.cs」の「OpenPanel」関数を設定。

これで終了。

スクリプトなしでTriggerを稼働させる

この記事が、見つからなかったので書く。もっと探せばあるとは思いますけど、やっぱりスクリプトを作成してやるのが主流なのでしょうね。

やり方は簡単。

今回、TriggerさんはString型なので、それを選択し、Triggerを設定すれば良い。

完結な動きをするなら、スクリプトを作成して動かすメリットはないでしょうね。これでいいじゃん。Unityさんが楽にしてくれたし。

ただ、ボタン押してから数秒後に開きたい、もしくは他のパネルやらボタンを推せなくするとか、「アニメーション動かす以外」を混ぜ込みたかっただ、どうしてもスクリプトが必要になる。

全くの余談

椿さんのツイッターで、これすごいって思っていたUnity2017.3の機能。

ズームできる!!!

感動した。ものすごく便利。

Unity Canvas Scalerについて

個人的な設定

そういえば、Unity最初に触った時に、特に何も考えていなくて痛い目を見たのが、CanvasScalerでした。

私の場合は今のところAndroid端末した開発していませんが、ご参考までと、私の設定を記事にします。

今は流れるかのようにこの設定をしてしまうのですが、久しぶりに開いてあ、そういえばと思ったので。

Scale With Screen Sizeで固定

初期で開くと、この状態。

・Unityマニュアル:Constant Pixel Size
・リンク:https://docs.unity3d.com/ja/540/Manual/script-CanvasScaler.html

マニュアルによれば、「UI 要素をスクリーンサイズによらずピクセル単位で同様のサイズに保ちます。」となっています。

なるほど、わからん。

ちょっと記憶が曖昧ですが、これを設定して実機テストをした時に、UIがはみ出る、切れるなどがありました。

画面サイズに合わせて、UIの要素を替える必要があるということかしら、となって「Scale With Screen Size」にしたところ、これがビンゴ。

で、Reference Resolutionとは、「スプライトがこの ‘Pixels Per Unit’ 設定を有していれば、スプライトの 1 ピクセルは UI 内での 1 ユニットをカバーします。」となっています。

なるほど、わからん。

私の認識なので、あくまで参考。

このキャンバスの画像度を設定しているようなものだと思っています。作ろうとしているのは、Android端末のアスペクト比  16:10のもの。ということで、画像度は1920×1200に設定。

で、今、MatchをHeightにしているのですが、高さに合わせて調整して欲しいから。(横に合わせたかったら、Width)

上で一個ボタンを配置していたので、MatchをWidth⇄Heightして見ましょう。

という状態になります。

Canvas Scalerは初期で設定しておかないと大変

私は基本的に以下のように設定します。

・UI Scale Mode : Scale With Screen Size
・Constant Pixel Size : Reference Pixels Per Unit
・Reference Resolution :
アスペクト比が10:16 → 1200 x 1920
アスペクト比が16:10 → 1920 x 1200
・Match :
アスペクト比が10:16 → Width
アスペクト比が16:10 → Heigth

画像度は、高ければ画像もそれなりの画像度を揃えないといけないということです。ま、スマホでみる分はわからないとは思いますけどね。

これが、初期で設定を忘れてUI配置終わってから気づいたとしましょう。

惨事です。

設定変えて全てのUIが移動するのが見えますよ。まだ地道に修正してやらないといけないんで、シーン作成時に必ず初期で済ましています。

Page 1 of 4

Powered by WordPress & Theme by Anders Norén