Pages

ラベル Unity全般 の投稿を表示しています。 すべての投稿を表示
ラベル Unity全般 の投稿を表示しています。 すべての投稿を表示

2012年12月6日木曜日

Unityでストップやスローモーション・早送りを実現するには




Time.timeScale
の値を変更するだけです。

Time.timeScale=0;
なら停止

Time.timeScale=1;
が通常の時間の経過速度です。

2倍速にしたければ、
Time.timeScale=2;
となります。

反対にスローなら
Time.timeScale=0.1;


簡単すぎでしょうか。

2012年9月4日火曜日

Unityでオブジェクトが静止しているかを判定するには


Rigidbodyがついているオブジェクトでは以下で判定できる。

GameObject.rigidbody.velocity.magnitude == 0

2012年7月29日日曜日

2012年7月26日木曜日

Unityでメニューをアニメーションさせるには


アニメーションを呼び出場合。
例:メニューパネルをサイドからシュッと出すとき

public GameObject Panel;//animationコンポーネントをつけたパネル

呼び出すとき
Panel.animation["PanelAnimation"].speed=1.0f;
Panel.animation["PanelAnimation"].time=Panel.animation["PanelAnimation"].length;
Panel.animation.Play("PanelAnimation");

アニメーションを逆転させるにはspeedを反転します

Panel.animation["PanelAnimation"].speed=-1.0f;

2012年7月12日木曜日

UnityAndroidで端末の言語設定を取得する

Application.systemLanguage

戻り値は以下のページにリストあり
http://docs.unity3d.com/Documentation/ScriptReference/SystemLanguage.html


NGUIでは、こんなかんじ


if(Application.systemLanguage.ToString()=="Japanese"){

           //ローカライズの現在の言語を変更する
Localization.instance.currentLanguage="Japanese";


}


IPhoneではバグがあるみたいで、報告済みとのこと。
Unityフォーラムからの情報。

UnityAndroidでブラウザアプリを起動するには



Application.OpenURL("URLをここに書く");

UnityAndroidでメールアプリを起動するには


これだけ

Application.OpenURL("mailto:アドレス?subject=件名");

例:
Application.OpenURL("mailto:?subject=Recommended App&body=Download and enjoy! "+WWW.EscapeURL("http://")

UnityAndroidで戻る(バックキー)に対応する

以下をOnGUI内に記述するだけ

if (Input.GetKeyDown(KeyCode.Escape)) {

 //ここに処理を書く

2012年7月10日火曜日

Unityで効果音を鳴らすには



AudioSourceコンポーネントをつけたオブジェクトに
以下を含むスクリプトを付加します。

public AudioClip audioClip;

public void PlayAudio(){
audio.PlayOneShot(audioClip);
}

 AudioClipをpublicに定義したのでこのオブジェクトにaudioClipを設定できます。


シーンのヒエラルキーから、オーディオファイルをドラッグして設定しましょう。


オーディオの再生には、PlayOneShotメソッドを使います。

ここでは、鳴らすときにPlayAudio()メソッドを他のスクリプトから呼び出します。

2012年7月8日日曜日

オブジェクトがタップされたかを判定する


タップされた位置に3Dオブジェクトがあるかどうかなど。タップで動きを変えるときなどに使用します。

以下を含むスクリプトを判定したいオブジェクトのコンポーネントに付加します。
ざっくり言うと、タップされた位置から画面奥に、レイと呼ばれる光線をカメラが飛ばします。一番最初に光線が当たった場合に、その情報を取得できます。

Ray ray ;//光線
RaycastHit hit ;//光線が当たったときの情報が入ります
Camera myCamera;//カメラを指定します。

void Update(){

if(Input.touchCount == 1) {//タップあり時にtrue
       Touch touch = Input.touches[0];
          ray = myCamera.ScreenPointToRay(Input.touches[0].position);

       if(touch.phase == TouchPhase.Ended && Physics.Raycast(ray.origin,ray.direction,out hit,Mathf.Infinity)){


if(hit.collider==gameObject.collider){

//タップされた位置にオブジェクトがあった場合の処理。


   }

  }else if (touch.phase == TouchPhase.Ended && !Physics.Raycast(ray.origin, ray.direction,out hit,Mathf.Infinity)) {


//光線に当たるオブジェクトが何一つ無いとき

  }
}

myCamera.ScreenPointToRay(Input.touches[0].position);で光線をとばします。
ここではタップのあった場所を渡し、始点としています。


touch.phaseでタップのどの時点かを指定します。
ここではTouchPhase.Endedで指が離れた時にtrueとなります。
Physics.Raycastは何かのオブジェクトが当たったときにtrueとなります

オブジェクトを他のオブジェクトの子に設定

子オブジェクト.transform.parent = 親オブジェクト.transform;

~秒後に特定の処理を行いたいとき


コルーチンを使うと便利です。


IEnumerator型に処理を定義し、その後にStartCoroutineメソッドで呼び出します。

IEnumerator WaitAndGo(引数) {
       
     //**1 最初の処理**
 yield return new WaitForSeconds(2.0f);//ここでは2秒待ってから以下を行う
        //**2 2秒後に行う処理**


 }


StartCoroutine(WaitAndGo(引数));//呼び出し側

上で定義したWaitAndGoを呼び出しています。

処理の流れは、

1 **1 最初の処理**
2 2秒間待つ
3 **2 2秒後に行う処理**

というイメージになる。

2012年7月7日土曜日

ゲームを一時停止する



Time.timeScale = 0;
でゲームループがすべて停止します。

Time.timeScale = 1;//で復帰

2012年7月6日金曜日

特定のオブジェクト間の判定を回避する



Physics.IgnoreCollision(ColliderA,ColliderB);

Physics.IgnoreCollision(ColliderA,ColliderB,false);//で判定復帰

または、あらかじめレイヤ分けしておいて


Physics.IgnoreLayerCollision(14,9,true);

Physics.IgnoreLayerCollision(14,9,false);//で判定復帰
14 9という数字はレイヤの番号を指定しています。

オブジェクトの破棄とプレハブからの動的生成


1 オブジェクトの破棄

Destroy(gameObject);//gameObjectはスクリプトがついているオブジェクト自身を表す

オブジェクトについている子オブジェクトも一緒に破棄されます。

Destroy(this);//スクリプト自身を破棄するにはこう


2 プレハブからオブジェクトを生成

Instantiate(GameObject 生成するプレハブ,Vector3 どこに,Quaternion 角度);


public GameObject Peach;

Instantiate(Peach,DropPoint.transform.position,Quaternion.identity) ;

トリガーや衝突判定でタグから対象を特定する



1 トリガーの場合

トリガーを持つオブジェクトのスクリプトに、 OnTriggerEnterメソッドを付加すると、何かがトリガーに入ってきたら自動的に呼ばれます。

void OnTriggerEnter(Collider other){


if(other.tag=="chara"){//otherには入ってきたオブジェクトが渡されているのでtagを比較しています。


}

}

2 衝突判定の場合

トリガーと全く同じ
void OnCollisionEnter (Collision collision ) {


if (collision.gameObject.tag == "chara") {



}
}