9.12.2011

Unityによる3Dゲーム開発入門届きました

早速件の本が届いたので早速一通り読みました。
全体としては基本的な使い方から始まり、各機能の説明、プラットフォームの出力までの流れまで丁寧に書いてありました。そして図が多いので読みやすいですね。入門と書いてあるとおりこの本はチュートリアルです。ですのでこれから始める方にはまさにうってつけでしょう。逆にある程度触っていて、実際に組まれている方にはそこまでお薦めはしないです。何にせよ邦書が出たということが大事なのでここからユーザー数が増えたらいいなと思います。

9.08.2011

クリックしたところのオブジェクトを取得

Rayをカメラから取得し、RayCast使用し、RaycastHitを得ることでオブジェクト等を取得できます。


if (Input.GetKeyDown(KeyCode.Mouse0))
{
  RaycastHit ray_hit;
  var ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);
  if (Physics.Raycast(ray, out ray_hit, 100))
  {
    var game_object = ray_hit.collider.gameObject;
  }
}
---

9.05.2011

Unity3D国内書籍

現在はまだ日本語書籍はありませんが、
2011年09月10日 発売予定
Unityによる3Dゲーム開発入門――iPhone/Android/Webで実践ゲームプログラミング

2011年10月15日 発売予定
Game Development With Unityの邦訳版

が出版される予定になっています。今後どんどん国内に入ってくると利用人口が増えそうですね。

9.01.2011

Prefabを動的に生成する

PrefabをScriptから動的に生成する方法をまとめました。
  1. プロジェクトにResourcesフォルダがなければ作成する。
  2. PrefabをResourcesフォルダに配置する。
プロジェクトの設定でまずはこれを行います。
そうすると
[Resources/Prefab/Effect/effect0]のPrefabを生成したい場合は、

string name = "Prefab/Effect/effect0" 

Instantiate(Resources.Load(name, typeof(GameObject)));


で、生成することができます。
毎回こう書くのも冗長的なので

 using UnityEngine;



public static class Prefab
{
    public static GameObject Create(string name)
    {
        return (GameObject)Object.Instantiate(Resources.Load(name, typeof(GameObject)));
    }
   
    public static GameObject Create(string name, Vector3 position, Quaternion quaterinon)
    {
        return (GameObject)Object.Instantiate(Resources.Load(name, typeof(GameObject)), position, quaterinon);
    }
}
 
としたほうが楽かもしれません。

Colliderによる衝突判定

衝突判定が必要になったので適当にまとめてみました。

衝突点や相対的な速度など詳細な情報が必要ない場合はColliderで十分。

RigidBodyコンポーネントとの衝突を行わず、接触判定だけが欲しい場合、ColliderコンポーネントかRigidBodyコンポーネントどちらかにIsTriggerにチェックを入れる。

 Colliderコンポーネント同士は接触も衝突も判定しない。

RigidBodyコンポーネントとの接触判定
  • void OnTriggerEnter(Collider other); - 接触開始時に呼び出される。 
  • void OnTriggerStay(Collider other); - 接触中に呼び出される。
  •  void OnTriggerExit(Collider other); - 接触終了時に呼び出される。
RigidBodyコンポーネントとの衝突判定
  • void OnCollisionEnter(Collision other); - 衝突開始時に呼び出される。 
  • void OnCollisionStay(Collision other); - 衝突中に呼び出される。
  • void OnCollisionExit(Collision other); - 衝突終了時に呼び出される。