TASOGARE GAMES BLOG

タソガレゲイムス :: 神奈川県でゲームを開発する人々のブログです。

Unityの環境構築

Unityのインストーラーは公式サイトからダウンロードできます。
無料版と有料版があり、ライセンスや機能に違いがあります。大抵の場合は、無料版で事足ります。

http://unity3d.com/get-unity/download?ref=personal

これさえインストールすれば、最低限の環境は整います。

なお、標準エディターはMonoDevelopです。
MonoDevelopは使い勝手や日本語対応に難があるため、無料エディターのVisual Studioを導入することをお勧めします。

UnityとVisual Studioの連携方法については、別の記事で解説します。

tasogare-games.hatenablog.jp

ゲームオブジェクトとは

UnityEngine.GameObject
Base class for all entities in Unity scenes.

ゲームオブジェクトとは「Unityのシーン上に配置される全てのモノの基本クラス」です。

C#もUnityもオブジェクト指向パラダイムに基づいて設計されています。(正確にはコンポーネント指向なんですが、それはコンポーネントの回で説明します。)
もしオブジェクト指向と言われてピンとこない人は、この記事を読む前に5分で絶対に分かるオブジェクト指向を読んでみてください。

寄り道:Unityの基本クラス

シーンについては次回に解説するとして、勘のいい人なら、シーン上に配置されないモノも含んだ基本クラスの存在を予想できるはずです。お察しの通り、あります。

UnityEngine.Object
Base class for all objects Unity can reference.

名前はまんま、オブジェクトです。説明文を直訳すると「Unityが参照できる全てのオブジェクトの基本クラス」になります。

ここで「Unityが参照できる」というのは、インスタンスIDというものがUnityEngineによって割り振られているという意味です。 逆説的にこのUnityEngine.Objectを継承していないオブジェクトにはUnityEngineによってインスタンスIDが割り振られることは無いわけです。

もしもあなたが、いま使っているオブジェクトがインスタンスIDを持っているかどうか不安になったら、以下のスクリプトを書いて実行してみると良いでしょう。

Debug.LogFormat("私のインスタンスIDは{0}です!", GetInstanceID());

GetInstanceIDメソッドの返り値はint型で、その値はユニークであることがUnityEngineによって保障されています。

もちろん、UnityEngine.GameObject(以降、ゲームオブジェクト)も、このUnityEngine.Objectを継承しています。

ゲームオブジェクトの特徴

ゲームオブジェクトに話を戻します。

ゲームオブジェクトは、その役割から主に以下の情報を"必ず"持っています。

  • シーン上でアクティブか否か
  • どのレイヤーに属するか(0~31)
  • タグ名
  • Transform(コンポーネント
    • ローカル変形情報
      • 位置
      • 回転
      • 縮尺
    • 親子関係

名前(nameプロパティ)が無いじゃないか!と思った方、惜しいです。nameはUnityEngine.Objectからの継承だったりします。

さて、ゲームオブジェクトがゲームオブジェクトたる所以は、Transformコンポーネントにあります。
というのも、Transformコンポーネントが変形や親子関係の情報を持っており、これらがあることで初めてゲームオブジェクトがシーン上に存在できるからです。

では、Unityにおいてしばしば登場する「空のゲームオブジェクト」にもTransformコンポーネントは割り当てられているのかと言われると、もちろん空だろうが何だろうがゲームオブジェクトなのだから割り当てられています。
心配なら、ゲームオブジェクトに以下のコードをアタッチして実行してみればよいのです。

Debug.Log(this.gameObject.transform.position);

コンソールに (0.0, 0.0, 0.0) とか出ると思います。

ゲームオブジェクトとして生まれたからには描画されずともTransformコンポーネントが割り当てられ、シーン上に存在しているのです。
描画しないものに座標情報を与えるのは何とも無駄な気がしますが、それがUnityのルールなので仕方ありません。

uGUI/Texture2Dで描画するリアルタイム流体計算

前回の記事では、UnityのGUIを使わずにC#だけでアプリを作成するという非生産的なことをしました。まだお楽しみでない方は是非ご覧下さい。 tasogare-games.hatenablog.jp

さて、UnityにはGUIによる直観的なオブジェクト操作の他にも、便利で強力な機能が多々あります。その中でも特に魅力的なのは、組み込みで手軽に使えるリアルタイム物理演算でしょう。

ということで今日は、組み込みの物理演算を使わずに、シンプルな流体のリアルタイム演算と描画までをやってみたいと思います。

続きを読む

ゲームオブジェクトひとつだけで作るアナログ時計

Unityは素晴らしいゲーム開発環境です。強みはなんといっても、ほとんどプログラム書かずともそこそこのゲームを作れてしまうことです。
しかし悲しいことに、一部のプログラマーにとってはGUI操作はむしろ障壁でした。

「プログラムだけでUnityアプリケーションを作成できたらなんと素晴らしいことか……。」(本末転倒)

そんな悲しいサガを背負ったプログラマーのために、Unity公式チュートリアル「SIMPLE CLOCK」C#だけで作ってみます。

続きを読む