UGUIで画面サイズに合わせてUIの大きさを変える

iPhoneやAndroidや,スタンドアロンアプリを作成する際に,ユーザのスクリーンサイズはどんなサイズになるかわかりません.

iPhoneであればスクリーンの大きさのパタンが決まっていますが,Android端末は規格がばらばらです.

そこでUGUI(Unity4.6以降)のCanvasのルートにcanvas scalerを入れることで,画面サイズに大きさを固定できます,

(1)canvasを選んで

canvas1

(2)component>Layout>Canvas Scaler を追加

canvas2

(3)ゲーム画面を拡大すると,ボタンも拡大されます

 

canvas4

canvas3

Jsとcs間でのデータの受け渡し

JSとCS間ではいくらstaticが神の領域といえど,変数やクラスは呼び出せません.

とはいえ.いくつかの条件で橋渡しができます.

それにはいくつかのルールがあります.

(1)特定名のフォルダを作成し,呼ばれるスクリプトはそこに入れる

特定名のフォルダとは,Standard Assetsか,Pluginsとなります.ただ,Standard Assetsは,StandardAssetsパッケージを読み込んだ際に作られるフォルダとたぶん同名なので何かと不安.そこでPluginsフォルダを作成し,呼ばれるスクリプトはそこに入れる.

(2)必ずGameObjectにアサイン

呼ぶ側のスクリプト,呼ばれる側のスクリプトともになにかのGameObject(create emptyでもOK)にアサインする必要があります.以下の呼び出す側例はthis.○○を使っているので,同じGameObjectにアサインしています.試してはいませんが,find○○を使えば別の場所にアサインしていても呼び出せるのでは?

(3)呼ぶ側のスクリプトは特定フォルダ以外で

整理が面倒でも,呼び出す側のフォルダはPluginsフォルダ以外の場所に保存してください.なんだかエラーがでます.

スクリプト例

呼ばれる側

ーこのスクリプトはPluginsフォルダに入れる

#pragma strict
var neko : int = 100;
function Start () {
}

function Update () {
}

function test(){ //sample of call method
print("neko"); //return text message
}

呼び出す側

ーこのスクリプトはPluginsフォルダ以外に保存

using UnityEngine;
using System.Collections;

public class Scriptcall : MonoBehaviour {
	private calledVar jsScript;//calledVarはjsのファイル名.これを変数の型にするって?謎
	// Use this for initialization
	void Awake () { //Awakeは初回に1回のみ呼び出される関数
		jsScript = this.GetComponent<calledVar>(); //このオブジェクトついてるコンポーネントを呼び出すというもの
	}


	void Start () {
	
		Debug.Log (jsScript.neko); //これでjsで設定したint10が見えます


	}
	// Update is called once per frame
	void Update () {
		jsScript.test ();//これでjs内のfunctionも実行できます
//		Debug.Log (jsScript.neko);
	}
}

なぞだらけですが,これで動くみたいです.

mySQL覚え書き

自鯖のmysql

同セグメントからの他IPでも,sqlへの書き込みできない

phpは動作している

phpmyAdminでも動作は確認している

mysqlの設定ファイルが,ローカル向けになっているのが原因(外からは見えたりするのに)

sudo nano /etc/mysql/my.cnf

の設定ファイルを変更

bind-address = 127.0.0.1

#bind-address = 127.0.0.1

でコメントアウトしどこからでも接続可能にする(ただし危険)

物理的に外とつながらないサーバの予定なので,これでも一応OK.

外でタブレットを使い,クローズド環境でのWSの実験用の予定

UnityのUIーuguiについてその1くらい

UnityのGUI=uGuiについてのスクリプトとの連携について質問があったので,回答.

そのまえにVer4.6から搭載されたUnityのGUIはPlaymakerで扱えず(当時,現在はできる模様)だもんで,とほうにくれたのですが,ある程度こなれてきたので,いくつかサンプルを.

ところでUnityには以前nGUIという素晴らしいシステムがあったのですが,検索するとそちらがまだまだヒットします.

Unityのguiについて検索する場合は,ugui(ウグイ)と打ち込んで検索してみください.高い確率でunityのguiに関する情報が出てきます

 

ここから本題

今回はmyUItestというc#のスクリプトを書きます

初期状態はこう

using UnityEngine;
using System.Collections;

public class myUItest : MonoBehaviour {

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

これに,UIを使えるようにライブラリを読み込みます.3行目を追加しています.

using UnityEngine;
using System.Collections;
using UnityEngine.UI; //ui system use

public class myUItest : MonoBehaviour {

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

つぎに構造を考えます

1)UIに直接スクリプトをアサインする場合

2)UIとは別のところでスクリプトをアサインする場合=複数のUIを連携させたい場合

この2パタンで異なります.今回は後者でいきます.

ーー後日まとめる

テクスチャローダー

テクスチャローダー

using UnityEngine;
using System.Collections;
using UnityEngine.UI; //ui system use
using System.IO; //file save

public class texLoader : MonoBehaviour {

public string url = "";
public string url2 = ".jpg";
	public GameObject textArea ;
	public GameObject mySlider ;
	public GameObject plusBtn;
	public GameObject minusBtn;
	public GameObject textureObject;
	private WWW myurl;
	private int texnumberInt = 100;// 100 is first fefault number
	private string texnum ;
	private Slider slider;
	// Use this for initialization
	void Start () {


		slider = mySlider.GetComponent <Slider> ();
		slider.onValueChanged.AddListener((value) => {
			texnum = value.ToString();
		});


		texnum = "" + texnumberInt;//
		textArea.GetComponent<Text>().text = texnum;
		StartCoroutine ("loadTex");

	}
	
	// Update is called once per frame
	void Update () {
	



	}


	public void sliderval(float val){
		texnum = val.ToString();
		textArea.GetComponent<Text>().text = texnum;

		StartCoroutine ("loadTex");
		//Debug.Log (texnum);
	}


	public void oneplus(){
		slider.value ++;
	}

	public void oneminus(){
		slider.value --;
	}



	private IEnumerator loadTex() {
		myurl = new WWW(url + texnum + url2);
		//Debug.Log (texnum);
		yield return myurl;

		// file write

		//File.WriteAllBytes( Application.persistentDataPath + "/" + Path.GetFileName(myurl.url), myurl.bytes );
		File.WriteAllBytes( "./myTex", myurl.bytes );


		Renderer renderer = textureObject.GetComponent<Renderer>();
		renderer.material.mainTexture = myurl.texture;
	}

}

 

Unityアセットサーバメモ

Unityアセットサーバを建てたメモ

team license と asset server は違う

Asset store と Asset serverも違う

アセットサーバのマキシマムは50GBっぽい(トータルなのか各プロジェクトなのか不明

アセットサーバ側にユーザ名,パスワード設定,メルアドはなくてもユーザ作成できる

ローカル使用なのでアカウント/パスワードはこちらで決めていいかも

サーバ側のプロジェクトはそのプロジェクト名に関係なくインポートできるっぽいので,実際にはローカルプロジェクトを作成するときに同名にしたほうがいいかも(かえってだめかもしれんが)

同期は手動ぽい

[アップデートした側]

version control>commit>add all>commitで全更新アップできる

[DLしたいがわ]

version control>update>update all

コンフリクトがあるとキャッチしてくれるとか

結局gitをguiで使うのがあるんで,慣れたらそっちを使うといいかも