UnityをC#で超入門してみる #4 GUIの章
http://qiita.com/hiroyuki_hon/items/af0a52c1cb9e856f32b2
の続きです。
#目次 超入門#5 時間と入力の章
###時間
時間を取得してみよう
時間を表示しよう
時間に沿って動かしてみよう
一時停止してみよう
時間に沿って色を変えてみよう
###入力
入力をしてみよう
入力でオブジェクトを動かしてみよう
入力でオブジェクトを生成しよう
入力でメソッドを呼びだそう
タッチした場所の座標を取得しよう
//レイを打とう
##時間
#時間を取得してみよう
Time.deltaTime を利用することで
前フレームが呼び出されたときからの、経過時間を取得出来ます。
ですので、このTime.deltaTimeを積み上げることで
ゲーム内で時間を取得してみます。
こう書いてみます。
public float timer = 0;
void Update () {
timer += Time.deltaTime;
}
timerに時間が貯まっていくのが確認できます。
#時間に沿って動かしてみよう
このように書いてみます。
Time.deltaTimeを乗算することで
フレームレートに左右されず一定速度でゲームオブジェクトを動かすことが可能となります。
public float speed = 1;
void Update () {
transform.Translate(Vector3.up * speed * Time.deltaTime);
}
変数speedを用いることでInspector上から速度の変更がつけられます。
#一時停止してみよう
DebugクラスのBreak関数を用います。
Debug.Break(); と書くことでエディタを一時停止出来ます。
void Start () {
Debug.Break();
}
#時間に沿って色を変えてみよう
ColorクラスのLerp関数を用います。
だんだん色を変えてみましょう。
数字を変更することで、色の変わるスピードを調整しましょう。
void Update () {
renderer.material.color = Color.Lerp(Color.blue, Color.red, Time.time * 0.5f * 0.1f);
}
##入力
#入力をしてみよう
Input.GetKey()を用いることで入力が取れます。
void Update(){
if (Input.GetKey(KeyCode.Space))
{
Debug.Log("test");
}
}
で、コンソールにtestが表示されます。
Input.anyKey を用いれば何かのキーとすることが出来ます。
キーが押された瞬間を取りたいのであれば
Input.GetKeyDown()
if(Input.GetButtonDown("Jump")){
Debug.Log("Space");
}
メニューバーから
Edit > Project Settings > Input
で、InputManeger を表示できます。
キーが離された瞬間を確認したい場合は
Input.GetKeyUp() を用います。
マウスの座標を取得するには
例えばこう書きます。
if (Input.GetMouseButtonDown(0))
Debug.Log(Input.mousePosition);
##入力でオブジェクトを動かしてみよう
入力によってオブジェクトの操作を行ってみます。
例えばこのようにかくことで、上下、左右に移動を行うことが出来ます。
public float speed = 1.0f;
public void Update()
{
transform.position += new Vector3
(Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime,
Input.GetAxisRaw("Vertical") * speed * Time.deltaTime,
0);
}
マウスを押している間、オブジェクトを動かすには例えばこう書きます。
Inspectorのtransに動かしたいオブジェクトをドラッグ&ドロップします。
public class NewBehaviourScript : MonoBehaviour
{
public Transform trans;
void Update ()
{
if ( Input.GetMouseButton(0) )
{
trans.transform.Rotate(1, 1, 0);
}
}
}
##入力でオブジェクトを生成しよう
こう書いてみます。
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube);
}
#入力でメソッドを呼びだそう
int Add(int a, int b)
{
int sum = a + b;
return sum;
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))
{
int j = 2, k = 3;
int ret = Add(j, k);
Debug.Log(ret);
}
}
#タッチした時の座標を取得しよう
例えば以下のように書くことで
タッチ時の座標を取得することが出来ます。
書き換え対象となるGUITextをInspector上でターゲットになるようD&Dします。
次のスクリプトはJavaScriptです。
var targetGuiText : GUIText;
var targetGuiText2 : GUIText;
var i;
var j;
function Update () {
if(Input.touchCount > 0){
if(Input.GetTouch(0).phase == TouchPhase.Began){
targetGuiText.text = "x="+Input.GetTouch(0).position.x+" y="+Input.GetTouch(0).position.y;
i = Input.GetTouch(0).position.x;
j = Input.GetTouch(0).position.y;
targetGuiText2.text = "i="+ i +" j="+ j ;
}
Camera.main.backgroundColor = Color.red;
}
else
{
Camera.main.backgroundColor = Color.blue;
}
}
#レイを打とう
Physics.Raycastを用いる。
#筆者メモ
http://loumo.jp/programming/unity/
http://www.atmarkit.co.jp/fsmart/index/unity_game.html
http://www.atmarkit.co.jp/fsmart/index/unity.html
http://www.4gamer.net/games/032/G003263/20111210004/
https://code.google.com/p/vga-unity/
http://am1tanaka.hatenablog.com/entry/20120229/1330526852
http://naichilab.blogspot.jp/2013/06/unityprefab.html
http://yun.cup.com/unity.html
#つづく予定です
現在、画像容量を使いきってしまいコードしか載せられません^^;
UnityをC#で超入門してみる #6