そろそろダレかける時期なので、簡単なSTGを作成しながら学習
キー入力による移動を実装
2日目のコードを使ってサクッと移動を実装
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
public float Speed = 5000.0f;
// ユーザ入力
public float inputH = 0.0f;
public float inputV = 0.0f;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
// ユーザ入力
// 左右
inputH = Input.GetAxisRaw ("Horizontal");
// 上下
inputV = Input.GetAxisRaw ("Vertical");
// 移動処理
rigidbody.velocity = new Vector3( inputH, 0.0f, inputV ) * Speed;
}
}
rigidbody.addForceの方だと色々調整が面倒なので、rigidbody.velocityを使っとく。
rigidbody.velocityは1秒間当たりの移動量を設定するらしい。Time.deltaTimeいらず!
シングルトンなクラスを用意
今後必要になるので早めに用意しておく。
とりあえず検索して出てきたサイトの中から、簡単そうなコードをパクる
http://iphone3gsapplication.blog129.fc2.com/blog-entry-153.html
http://akabosi.tumblr.com/post/38553973811
using UnityEngine;
using System.Collections;
public class Singleton : MonoBehaviour
{
private Singleton instance = null;
void Awake ()
{
if (instance == null) {
instance = this;
DontDestroyOnLoad (gameObject); // シーン遷移での破棄を防ぐ
//シングルトン処理
//自分の名前を一時的に変更する(元の名前は保持しておく)
var nameOld = gameObject.name;
gameObject.name = nameOld + "(SingletonCheck)";
//元の名前のオブジェクトがあったら自殺する
var obj = GameObject.Find (nameOld);
if (obj != null) {
Destroy (gameObject);
Debug.LogError("シングルトンオブジェクト" + this + "を多重生成しようとしています。");
} else {
//無かったら自分の名前を元に戻す
gameObject.name = nameOld;
}
} else {
Destroy (gameObject);
Debug.LogError("シングルトンオブジェクト" + this + "を多重生成しようとしています。");
}
}
}このコードをベースに改造していこうっと…気が向いた時に
別オブジェクトのスクリプトにアクセスする方法
シングルトンを実装したはいいが、そのスクリプトのメンバを
外部から参照する方法が分からなかったので検索
https://sites.google.com/site/sunflowerlaboratory/unitynoto/arusukuriputokarabienoobujekutonokonponentohenoakusesu
public GameObject GameMainObj = null;
public Singleton GameMainScript = null;
GameMainObj = GameObject.Find("GameMain");
GameMainScript = GameMainObj.GetComponent<Singleton>( );でけたでけた
色々と失敗
・豪勢に剛体付きCubeで自機の移動範囲を設定しよう!
→ そういや、敵に剛体付けるし面倒なことになるんじゃ…却下(Cube設置後に)
…特定の属性持ちなら剛体同士の当たりを無視とか、そんな機能がありそうだけど
・Planeに剛体つけたらエラー!な、なんで?
エラーメッセージ
「Actor::updateMassFromShapes: Compute mesh inertia tensor failed for one of the actor's mesh shapes! Please change mesh geometry or supply a tensor manually!」