スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Unity】スクリプト内でシーン全体のカメラを取得して自由に使う

今日も今日とてUnityです。

ゲーム作成をしているときに、スクリプト内で複数のカメラを自由に使いたいと思ったんですよ。
最初はCamera型の配列をpublicで宣言してInspector上でカメラを置いてたんです。
でも、これすごく面倒だし、スクリプトをあとでつけるときにカメラを改めてつける場合、
カメラをブレハブ化しないとで、それも面倒...

そこで、スクリプト内でカメラを自由に使える方法がないかと試行錯誤してみました。

とりあえず、ちょっと前提としておきたいのが
この状態です。
20150724-1.png
カメラの末尾に数値が来ていると思います。

んで、いろいろやって、なんとかできたのがこちら。
ソース
using System.Collections.Generic;

// 全カメラを格納する箱
private Camera[] cameras;
// カメラ用のテーブル
Dictionary<int, Camera> table;

void Start() {
// シーンないの全てのカメラの数を配列の長さにする
cameras = new Camera[Camera.addCamerasCount];
// シーンないの全てのカメラを取得(enable=trueのみ)
Camera.GetAllCameras(cameras);
// テーブルの初期化
table = new Dictionary<int, Camera>();
// テーブルに全てのカメラを登録
for (int i = 0; i < cameras.Length; i++) {
// カメラの名前を取得
string name = cameras[i].gameObject.name;
// テーブルに登録
table.Add(int.Parse(name.SubString(name.Length-1))-1, cameras[i]);
}
}

使うときはtable[0]でCamera1が取得できます。

テーブルにMainCameraだけ登録しないようにするのであれば、登録の前に
Camera.main.enable = false;

として、登録後に
Camera.main.enable = true;

とすれば良いですねー。

自分は数値で管理できたほうが嬉しかったのでこの仕様にしましたが、
カメラの名前をそのまま使ってもいいですよね
その場合は
Dictionary<string, Camera> table;

にして、登録時に
table.Add(cameras[i].gameObject.name, cameras[i]);

としましょう。


---ここから追記---

プログラム書くときに<>って結構使うと思うんだけど、<pre>環境だと上手くいかなかった。
なので、"<"を書くときは&lt;って書くと良いみたいです。
ついでに、<xmp>でくくるとそのまま表示もできるみたいですね。
ブログ書くのに参考になればいいです。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

farCiel

Author:farCiel
自由気ままに楽しく書いていければ良いですね.

最新記事
最新コメント
月別アーカイブ
カテゴリ
amazon
アクセス数
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
ß
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。