Edited at

UnityをC#で超入門してみる #5 時間と入力の章

More than 5 years have passed since last update.

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