Eyes, JAPAN Blog > Unity~ちょっとしたスクリプト~

Unity~ちょっとしたスクリプト~

Masanori Akiyama

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

こんにちは、アルバイトスタッフの秋山です。私がEyes,  JAPAN Blog を書くのもこれで3回目です。今回は1回目に投稿した「Unity入門」から少し進んだところを紹介しようと思います。

 

Unityでプログラミング

前回の記事の「Unityのいいところ」というところで、簡単なものであればコーディングなしでつくれると書きました。しかし、例えばゲームを作るとなったときにゲームとしての機能を向上させようと考えた際、いくらGUI感覚で作れるUnityでも限界があります。ここでUnityのスクリプトについて軽く紹介していきます。

 

「Unityで使うことができる言語」

  • C#
  • UnityScript(JavaScriptがモデル)

以前まではBoo(Python風)という言語も使うことができましたが今はもうありません。

 

「2つの言語のうちどちらを使うべきか」

どっちの方がいいというのはあまりないとは思いますが、私はC#をお勧めします。理由としてはC#の使用者の方が多いため、わからないことなどを検索すれば結構な頻度で解決することができます。それに加えて、Unityの参考書などもC#で書かれているものが多いと感じます。(どちらにも対応しているものもあります).NET言語も使うことができます。

 

「実際に書いてみる」

新しいスクリプトファイルを作るには、メニューからAssets→Create→C# Script OR Javascript を選択します。できたファイルを開けばエディタが起動しコーディングすることができます。

(C#でファイル名を”Test”とした際の初期状態↓)

unity1

1,2行目の using 〜 はC#を触ったことがある方はわかると思いますが名前空間(name space)というものです。4行目でクラスの継承をしています。ここまではC#経験者はなんとなくはわかると思います。次の行から始まっている Start関数、Update関数は少し独特な関数なので軽く説明します。

  • Start関数・・・スクリプトが呼び出されてから最初のフレームが次のフレームに切り替わる前に呼び出される
  • Update関数・・・フレームが切り替わるごとに一回実行される

他にも特殊な関数はありますが今回はこの2つを使ってやっていきます。

 

 

「オブジェクトを自動で移動させるスクリプト」

 

unity

例として今回は、立方体を時間経過とともに前進させ、開始から3.5秒で自動消滅させるコードをかいてみます。

下の画像の様にまずCubeを生成します。

unity3

 

次に先ほど書いた通りにC#ファイルを生成します。test.csというファイルを今回は使います。


// test.cs

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    public float speed = 2F;

    // Use this for initialization
    void Start () {
        Destroy (gameObject, 3.5F);
    }

    // Update is called once per frame
    void Update () {
        transform.position += transform.forward * Time.deltaTime * speed;
    }

}


クラス内に入って最初の

public float speed = 2F;

はアクセス修飾子をpublicにしてあげることでUnity内で直接いじれるように設定しています。このことについては、後でもう少し詳しく説明します。

start関数内の

Destroy (gameObject, 3.5F);

というのは、test.csがくっついているオブジェクトがこのstart関数内に入ってから3.5秒で自動消滅するという命令です。

 

次にUpdate関数内の

transform.position += transform.forward * Time.deltaTime * speed;

というのは、まず左辺の方「 transform.position 」というところは、自分自身(今回の例では立方体)がいる場所(座標)を指しています。Inspectorビュー(オブジェクトをクリックするとでてきます)にある Transfrom という項目の中に Position という項目があります。この Position の数値がそのオブジェクトが存在する座標を指しています。この数値をいじることでそのオブジェクトの位置を変更することができます。

そして右辺、「 transform.forward * Time.deltaTime * speed 」を一つ一つ見ていきます。最初の transform.forward というところは、前半transformまでは先ほどと同じです。 .forward というのはそのオブジェクトの正面、向いている方向を取ってきてくれます。

Time.deltaTime は最後のフレームを完了させるのにかかった時間を示します。フレームレートを独立させるために使います。

speed は自分で宣言したfloat型の変数で、この数値によってオブジェクトの移動速度を設定します。アクセス修飾子が public なのでエディタを使わなくとも直接Unityの方で数値をいじることができます。次にこのことについて説明していきます。

 

「変数をpublicにすると・・・?」

先ほどのスクリプトでspeedという変数のアクセス修飾子をpublicにしましたが、publicにしないとInspectorビューがどのようになるかみてみましょう。C#では特に指定しない場合、private となります。

( private の場合 )

コード↓

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    float speed = 2F;

    以下略
    
    }
}

↓Inspectorビュー

unity_inspec

 

( public の場合 )

↓コード

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    public float speed = 2F;

    以下略


    }
}

↓Inspectorビュー

unity_inspec2

 

Speedという項目が増えていますね!このようにUnityでは変数を public にしてあげると直接コードを書き直しに行かなくともUnity上で変更することができます!おしゃれ!

 

 

今年度はVRが盛んに取り上げられる年だと言われていますね

Unityを使って自分でもVRコンテンツを作ってみてはいかがでしょう?!

 

Comments are closed.