Unity ゲーム開発ぶろぐ

アプリを実際に作りながら解説していくブログです。 当面はunityでレースゲームを2ヶ月で作ることを目標にしています。


シーンに複数モードを持たせる
ガレージ画面では車体のカラーチェンジとアイテム装備が出来るようにします。
これら2つの作業を同じ画面で行うとごちゃごちゃするので、 シーンにカラーチェンジモード・アイテム選択モードを用意して、 2つの動作をはっきり分けることにします。


画面端にメニューボタンを配置して、
カラーチェンジかアイテム装備か、を選択します。
05
カラーボタンを押すと、カラーパレットが出現して、車体の色を変更できます。
00


このように一つのシーンで複数のモードを持たせたいとき、 今見えているボタンを隠したり、新しいメニューを新たに画面に出現させたい場合があります。

オブジェクトのsetActive メソッドをよべば、メニューを隠したり出したりできます。
iosでのhiddenプロパティ
GameObject.setActive(true); 見せる
GameObject.setActive(false);隠す



ただこれだとモード変更と同時にボタンが切り替わり、面白くありません。
面白くないだけでなく、瞬時にUIが切り替わると、間違ってボタンを押してしまう可能性があります。
これは結構ストレスになります。

安全にUIを切り変えるために、
モードチェンジと同時にUIを少しアニメーションさせたいと思います。
ボタンが元の位置から移動して画面から隠れたり見えたりさせます。

アニメーションUI

NGUIで作成したテンプレートUI に画面に現れたり隠れたりするアニメーションを追加したいと思います。指定した位置にバネのように移動するスクリプトを作成します。

以下のようなコードを作成します。
public class mvObject : MonoBehaviour {
	float shiftx=0;
	float shifty=0;
	float shiftVol=0;
	float shiftRange=0;
	public Transform pos;
	public void SetShift(float x,float y) {
		shiftx=x;
		shifty=y;
		shiftVol=1;
		shiftRange=(float)0.8;
	}
	void Update() {
		
		if(shiftVol != 0) { 
			
			float k = (float)(1-shiftRange);//(float) 1.0/ shiftRange - 1);
			Debug.Log (k);
			Vector3 t=new Vector3(pos.position.x+shiftx*k,pos.position.y+shifty*k,0);
			shiftx*=shiftRange;
			shifty*=shiftRange;
			shiftVol*=shiftRange;
			
			if(shiftVol <0.01) {
				shiftx=0;
				shifty=0;
				shiftVol=0;
				
			}
			pos.position = t;
		}
		
		
		
	}
}



このスクリプトをメニューグループにセットし、
メインスクリプト内で適宜、setShiftをよびだします。

画面外に押し出したり、画面内に引き込んだりさせます。



ここまでの内容を動画で見てみて下さい。






今回はここまでです。


次回アイテム選択をやりたいと思います。





 

記事は編集中です。

スクリプトから 車データにアクセスしてみます。

前回作成した車パラメータを変更するには

public CarData cardata;

と 宣言します。


インスペクタからCarDataにViewModelをセットします。
(ViewModelにCarDataスクリプトがセットされた状態です。)

public class CarData : MonoBehaviour
{
 public NguiRootContext View;
 public carDataUi Context;
  
 void Awake()
 {
  Context = new carDataUi();
  View.SetContext(Context);
 }
}


パラメータにアクセスするには Contextを介して行います。
次のようになります。
car_data.Context.power=43;
car_data.Context.gear=32;
car_data.Context.torq=25; 








このページのトップヘ