Hatena::ブログ(Diary)

今日もコーディング日和  RSSフィード Twitter

2017-07-05 通信ロジック、画面遷移の整理 このエントリーのブックマークコメント

基盤となる部品をちょっとずつ形にしていこうと思います。

まずは画面作成の基本となる、シーン遷移と、通信ロジック部分です。


シーン遷移

https://github.com/BiwaCoder/MVCSample/commit/a658aa78263c644c6287ae141a8cd00ccff9f17c

シーン遷移はまずSceneManager.LoadScene、でシンプルにシーンを切り替えるところから

あとでマルチシーンエディティングや、画面遷移のアニメーション、バックボタン対応も

仕組み化していきたいですね。


通信ロジック

https://github.com/BiwaCoder/MVCSample/commit/08109cd3f64ffec2e56eb49b501c303922330f12

通信は昔はWWWというものを使っていたのですが最近はUnityWebRequestというものが

できたためこちらを使えるように実装していこうと思います。

UnityWebRequestについてはこち

https://docs.unity3d.com/jp/540/Manual/UnityWebRequest.html

色々機能があるので整理して汎用的に使えるようにしようと思います。

2017-06-25 Unityでのゲーム開発のベストプラクティスを考える このエントリーのブックマークコメント

Unityで本格的なゲームを作ろうと思うと案外色々なものが必要になってきます。

自分も作っていく上で、色々とこれでいいのかと悩むことが多かったのでこのブログでまとめることで、知識・技術をより確かなものにしたいと思います。


シーン内の画面を作成するときのルールについて

最初に画面を作成するためのルールについて考えてみます。

Unityはゲームオブジェクトスクリプトを貼り付ければ動かせてしまうため

とりあえずで作ってしまい、あとで修正や把握が困難になることが多々ありましたこのようなことを防ぐためにまず、どう作るかのルールを考えてみたいと思います。


GUIプログラムにおいて基本となるのはMVC

自分の場合はUnityにおいても、基本としてMVCで実装を行っています。

ViewはUIの参照をもって、その参照を使って値を変更する

ModelはSQLiteやPlayerPrefsそのたファイルやメモリなどストレージをラッピングしてデータを管理するためのクラスコントローラは画面の遷移を主に管理するクラスとして実装します。

サンプルアプリ

上記思想に基づきアプリを作っていこうと思います

https://github.com/BiwaCoder/MVCSample

f:id:gravit:20170626031440j:image

こんな感じでViewとControllerを分離します

https://github.com/BiwaCoder/MVCSample/blob/master/Assets/Scripts/MvcController.cs

https://github.com/BiwaCoder/MVCSample/blob/master/Assets/Scripts/MvcView.cs

コードもView,Controllerをわけることで、デザイナーやUXエンジニアプログラマ作業も分けやすくなるはずです。

ViewはデザイナーさんやUXエンジニアが触れる用に極めてシンプルにすることが一番重要なポイントです。

ロジックなどがあると、UIが変更しにくくなるので、極限まで依存性を減らしていきましょう。

アニメーションなどもViewに組み込むことになるのですが

動かない、静的なビューとアニメーションしているビューを同じコードに埋め込むとわかりにくくなるため

ビューもアニメーションレイヤ、静的構造データなど分離しておくのがいいかなと感じています。

2015-01-24 弾の向き調整

飛んで行く方向に弾をむける

Quaternion.LookRotationをつかえばいけるらしい

Vector2→Vector3はOerator定義されているので代入すればそのまま変換される

http://docs.unity3d.com/ScriptReference/Vector2.html

f:id:gravit:20150125004311j:image

	// Use this for initialization
	void Start () {
		rigidbody2D.AddForce (Vector3.right *300.0f,ForceMode2D.Force);
		rigidbody2D.AddForce (Vector3.up *300.0f,ForceMode2D.Force);
	}
	
	// Update is called once per frame
	void Update () {
		Vector3 moveVec = rigidbody2D.velocity;
		Quaternion rotation = Quaternion.LookRotation (moveVec);
		transform.rotation = rotation;
	}

2015-01-12 Unity3Dと2Dの変換

頭の上に文字を表示する

こういうことがやりたい

頭上に名前を表示してオンラインで同期【Unity】【NGUI】【photon】 - (:3[kanのメモ帳]

naochang | 3D上の得点をNGUI上の同じ位置に表示する


UnityのCameraが使う3つの座標系 - テラシュールブログ

3Dはワールド座標系で1とかそんな値になっているので

スクリーン座標系に直す必要があるもよう

こうするらしい

 Camera.mainCamera.WorldToScreenPoint(transform.position);

あと画像の原点はPivotで指定されている

原点が下にあった時は画像のサイズを取る必要があるのでこんな感じでとってくる

2Dオブジェクトの幅を取得する方法 - Unity / VRゲーム開発日記@長崎

あとは、

Pixels Per Units倍して画面換算にする

画面サイズの比をかけあわせる

ui.transform.localPosition = new Vector3( screenPos.x+width*100*Screen.width/1136 ,
		                          screenPos.y+height*100*Screen.height/640,0);
	

このあたりUGUIやNGUIの機能でやったほうがよさそう

2015-01-03 Unityコルーチン 入門

Unityコルーチン

Unityのコルチーンのやつを動かしてみた

http://www.wisdomsoft.jp/656.html

using UnityEngine;
using System.Collections;

public class TownMenu : MonoBehaviour {


	void Start () {
		IEnumerator temp = Coroutine ();
		StartCoroutine(Coroutine());
		temp.MoveNext(); //One
		temp.MoveNext(); //Two
		temp.MoveNext(); //Three

		
		StartCoroutine(RotateObject());
	}

	IEnumerator Coroutine()
	{
		Debug.Log("One");
		yield return null;
		
		Debug.Log("Two");
		yield return null;
		
		Debug.Log("Three");
		yield return null;
	}

	IEnumerator RotateObject()
	{
		var startTime = Time.time;
		Debug.Log("Begin Coroutine");
		
		while (Time.time - startTime < 5)
		{
			transform.Rotate(0, 100*Time.deltaTime ,0);
			yield return null;
		}
		Debug.Log("End Coroutine");
	}


	void Update () {
	
	}
}

このコードをCubeに貼っつけるとぐるぐる回ります

StartCoroutineは自動でUpdateのたびに呼び出してみてくれるみたい

Time.deltaTimeがないと、RotateObjectの呼び出し頻度がばらつくので

回転速度が安定しないようです

NGUIプロパティ

http://hwks.hatenadiary.jp/entry/2014/10/14/034442

PixelPerfect : 基本的にそのまま表示する

FixedSize : 解像度の縦幅に合わせて表示する

FixedSizeOnMobiles : モバイル*1ならFixedSize、モバイル以外はPixelPerfect

今は上から

Flexible

Constrained

Constrained On Mobiles

になっている模様