いつか挑戦したいと思っていた弾幕STG作成。
今やらないでいつやるよ。
というわけで作成進めてみることに。今後の展開性を考えて3Dで作成し2Dに見せるようにしたいため、
以下2Dゲーム作成内容を3D適用できるか試してみることにしました。
参考元
https://nn-hokuson.hatenablog.com/entry/2016/07/04/213231
設定
プレイヤーオブジェクトはz=0に配置。
カメラを-10に配置して、2Dに見せるための設定です。
背景
以前以下で作成した星空を使用して、
ドーナツ型のパーティクルシステムにして、横軸を太目(z=12くらい)にすれば星空背景にできます。
あとはx軸方向に回せば、動く背景のできあがり。
少々重いかもですが。
moao.hatenablog.com
また、普段のデバッグ時は以下表示を無効にして軽くすることが可能です。
画面サイズ変え
カメラ設定のサイズを5->7に変更
十字カーソル移動、移動制限
プレイヤーに対し以下のようにwasdと十字キーで動かせるようにします。
void Update()
{
float speed = 10.0f;
if (Input.GetKeyDown(KeyCode.Space) | Input.GetMouseButtonDown(0))
{
Instantiate(bulletPrefab, transform.position, Quaternion.identity);
}
if (Input.GetKey(KeyCode.W)| Input.GetKey(KeyCode.UpArrow))
{
transform.position += speed * transform.up * Time.deltaTime;
}
if (Input.GetKey(KeyCode.S)| Input.GetKey(KeyCode.DownArrow))
{
transform.position -= speed * transform.up * Time.deltaTime;
}
if (Input.GetKey(KeyCode.D)| Input.GetKey(KeyCode.RightArrow))
{
transform.position += speed * transform.right * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A)| Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= speed * transform.right * Time.deltaTime;
}
Vector3 currentPos = transform.position;
currentPos.x = Mathf.Clamp(currentPos.x, -xLimit, xLimit);
currentPos.y = Mathf.Clamp(currentPos.y, -yLimit, yLimit);
transform.position = currentPos;
}
当たり判定
2Dの当たり判定と3Dでは異なる用で、以下のようにOnTriggerEnter内で定義しないとだめでした。
void OnTriggerEnter(Collider collision)
{
if (collision.gameObject.tag == "Rock")
{
}
}
キー入力だとスマホで遊べないため、マウスカーソルでも動かせるようにしてみます。
ラジオボタン、トグルで有効無効にできるようにしておきます。
以下のようにトグルで関数コールされるようにしている感じです。
public void change_mode()
{
mouse_mode = mouse_mode ^ 1;
}
void FixedUpdate()
{
Vector3 moveVec;
if(mouse_mode==1){
Vector3 pos = Input.mousePosition;
pos.z = -Camera.main.transform.position.z;
Vector3 worldPos = Camera.main.ScreenToWorldPoint(pos);
moveVec = (worldPos - transform.position) / 30;
transform.position += moveVec;
}
}
色付け
青は味方、赤は敵でマテリアル分け
出力
unityroom.com
あとがき
というわけでざっくり作成したので記事にしてみました。
次はもっと弾幕STGらしいものを作りたいと思います。