お待たせしました Unityばなしです。
検索で多いセーブロード関連についてすこし
Unityエンジンでよく使うだろうものをピックアップしました。
■Fileに直接書きこむ
Save and Load from XML
http://www.unifycommunity.com/wiki/index.php?title=Save_and_Load_from_XML
WikiのXml形式でのセーブロードスクリプトです。
http://answers.unity3d.com/questions/971/how-to-scrip-a-save-load-game-option
UnityAnswerにも回答が載っています
■PlayerPrefs
http://unity3d.com/support/documentation/ScriptReference/PlayerPrefs.html
リファレンスから抜粋しました
スタンドアローン
Macの場合 ~/Library/Preferences
Windowsの場合 レジストリキー HKCUSoftware[company name][product name]
Webプレーヤー Macの場合 ~/Library/Preferences/Unity/WebPlayerPrefs
Windowsの場合 %APPDATA%UnityWebPlayerPrefs
にそれぞれデータが格納されます。
使用法(Int:整数値の場合)
PlayerPrefs.SetInt("Player Score", 10);
PlayerPrefs.GetInt("Player Score");
ハイスコアなどを一時的に格納する用途があるようです。ファイルは閲覧されてしまうのでゲームに重要なデータを
おくと書き換えられてしまいます。
■ArrayPrefs
Player
http://www.unifycommunity.com/wiki/index.php?title=ArrayPrefs
■Application.LoadLevel
ステージデータを一面分読み込みます。
インデックスを使用して
Application.LoadLevel (0);
またはシーンの名前を直接指定して
Application.LoadLevel ("Stage1");
のように使用します。
インデックスはUnityエディタのFile >BuildSettingを使用時にシーンごとの左肩につく数字です。
現在のシーンにシーンデータを追加で読む場合には
Application.LoadLevelAdditive
を使用します。
シーンをプレイしながら裏で別のステージを読み込みたいシームレスなワールドを作りたい時などに
Application.LoadLevelAsync
Application.LoadLevelAdditiveAsync
という関数も用意されています 使用法はApplication.LoadLevelと同様ですがプロバージョンでしかつかえません。
■TextAsset
ステージの座標データなどを記述したTXT形式ファイルの場合TextAssetタイプの記述で
読み込むことが可能。
以下は公開中の60ラインパックマンからステージを作成する箇所をお借りしました。
var mapAsset : TextAsset;
var blockPrefab : Transform;
var pelletPrefab : Transform;
var superPrefab : Transform;
function Awake () {
var map = mapAsset.text.Split ("
"[0]);
var v = new Vector3 ();
v.y = 1.0;
var j_off = map.length / 2.0;
for (var j = 0; j < map.length; j ++) {
v.z = (map.length - j - j_off - 1) * 2;
var i_off = map[j].length / 2.0;
for (var i = 0; i < map[j].length; i ++) {
v.x = (i - i_off) * 2 + 1;
if (map[j][i] == "X") {
var inst = Instantiate (blockPrefab, v, Quaternion.identity);
inst.transform.parent = transform;
} else if (map[j][i] == ".") {
Instantiate (pelletPrefab, v, Quaternion.identity);
} else if (map[j][i] == "O") {
Instantiate (superPrefab, v, Quaternion.identity);
}
}
}
}
TextAssetタイプを指定したmapAssetから 変数mapに1ワードづつ切りだして if文で文字の種類ごとに
処理をしています。
例えばシューティングゲームの敵のスクリプト処理などはこれをつかえば作り易いかと思います。
■Resources.Load
リソースクラスのロードだけですが、外部のファイルを取り込むことが出来ます。
テクスチャやサウンドを入れ替えることができます。
function Start () {
var instance : GameObject = Instantiate(Resources.Load("prefab", GameObject));
}
パスを指定する場合は Resources.LoadAssetAtPath を使用して
prefab = Resources.LoadAssetAtPath("Assets/Artwork/〇〇.fbx", GameObject);
のように直接指定。
これでMODのようなことができるのか検証していないのでわかりませんが、おそらく
自作モデルやテクスチャ、サウンドデータを設定しておけば読み込みが可能だと…
リファレンスをみればほとんどわかることなので、Unityエンジンのサイトからとべる
リファレンスとWikiを活用することをおすすめします。
なにか 絵がないと寂しいのでスーパープレイ動画とやらを載せておきますw
検索で多いセーブロード関連についてすこし
Unityエンジンでよく使うだろうものをピックアップしました。
■Fileに直接書きこむ
Save and Load from XML
http://www.unifycommunity.com/wiki/index.php?title=Save_and_Load_from_XML
WikiのXml形式でのセーブロードスクリプトです。
http://answers.unity3d.com/questions/971/how-to-scrip-a-save-load-game-option
UnityAnswerにも回答が載っています
■PlayerPrefs
http://unity3d.com/support/documentation/ScriptReference/PlayerPrefs.html
リファレンスから抜粋しました
スタンドアローン
Macの場合 ~/Library/Preferences
Windowsの場合 レジストリキー HKCUSoftware[company name][product name]
Webプレーヤー Macの場合 ~/Library/Preferences/Unity/WebPlayerPrefs
Windowsの場合 %APPDATA%UnityWebPlayerPrefs
にそれぞれデータが格納されます。
使用法(Int:整数値の場合)
PlayerPrefs.SetInt("Player Score", 10);
PlayerPrefs.GetInt("Player Score");
ハイスコアなどを一時的に格納する用途があるようです。ファイルは閲覧されてしまうのでゲームに重要なデータを
おくと書き換えられてしまいます。
■ArrayPrefs
Player
http://www.unifycommunity.com/wiki/index.php?title=ArrayPrefs
■Application.LoadLevel
ステージデータを一面分読み込みます。
インデックスを使用して
Application.LoadLevel (0);
またはシーンの名前を直接指定して
Application.LoadLevel ("Stage1");
のように使用します。
インデックスはUnityエディタのFile >BuildSettingを使用時にシーンごとの左肩につく数字です。
現在のシーンにシーンデータを追加で読む場合には
Application.LoadLevelAdditive
を使用します。
シーンをプレイしながら裏で別のステージを読み込みたいシームレスなワールドを作りたい時などに
Application.LoadLevelAsync
Application.LoadLevelAdditiveAsync
という関数も用意されています 使用法はApplication.LoadLevelと同様ですがプロバージョンでしかつかえません。
■TextAsset
ステージの座標データなどを記述したTXT形式ファイルの場合TextAssetタイプの記述で
読み込むことが可能。
以下は公開中の60ラインパックマンからステージを作成する箇所をお借りしました。
var mapAsset : TextAsset;
var blockPrefab : Transform;
var pelletPrefab : Transform;
var superPrefab : Transform;
function Awake () {
var map = mapAsset.text.Split ("
"[0]);
var v = new Vector3 ();
v.y = 1.0;
var j_off = map.length / 2.0;
for (var j = 0; j < map.length; j ++) {
v.z = (map.length - j - j_off - 1) * 2;
var i_off = map[j].length / 2.0;
for (var i = 0; i < map[j].length; i ++) {
v.x = (i - i_off) * 2 + 1;
if (map[j][i] == "X") {
var inst = Instantiate (blockPrefab, v, Quaternion.identity);
inst.transform.parent = transform;
} else if (map[j][i] == ".") {
Instantiate (pelletPrefab, v, Quaternion.identity);
} else if (map[j][i] == "O") {
Instantiate (superPrefab, v, Quaternion.identity);
}
}
}
}
TextAssetタイプを指定したmapAssetから 変数mapに1ワードづつ切りだして if文で文字の種類ごとに
処理をしています。
例えばシューティングゲームの敵のスクリプト処理などはこれをつかえば作り易いかと思います。
■Resources.Load
リソースクラスのロードだけですが、外部のファイルを取り込むことが出来ます。
テクスチャやサウンドを入れ替えることができます。
function Start () {
var instance : GameObject = Instantiate(Resources.Load("prefab", GameObject));
}
パスを指定する場合は Resources.LoadAssetAtPath を使用して
prefab = Resources.LoadAssetAtPath("Assets/Artwork/〇〇.fbx", GameObject);
のように直接指定。
これでMODのようなことができるのか検証していないのでわかりませんが、おそらく
自作モデルやテクスチャ、サウンドデータを設定しておけば読み込みが可能だと…
リファレンスをみればほとんどわかることなので、Unityエンジンのサイトからとべる
リファレンスとWikiを活用することをおすすめします。
なにか 絵がないと寂しいのでスーパープレイ動画とやらを載せておきますw