見出し画像

【Unity】ユンカースJu87急降下爆撃機 爆弾投下器とカメラワークを考える

 急降下爆撃機と言えば爆弾投下器、爆弾は機外に吊るされアーム型の投下器から落とされる。これは文章に書けば簡単だがゲームで実装するにはどうしたらいいのか考える。。爆弾は重力による自由落下。重力が必要だからUse Gravityにチェックを入れる。このままだとゲームが始まれば落ちてしまう。なので一時的に重力をなくすIs Kinematicにもチェックを入れる。アームはアニメーションで再現、アームと爆弾は親子関係にする。Keyを入力してアニメーションを開始し重力を発生させる。Keyは統一する。Scriptは二つまとめても良かったが爆弾投下器を作りたいと思う人はいないのでアニメーション再生とIs kinematic解除を分けた。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// CubeのAnimatorの制御
public class BCube : MonoBehaviour
{
    Animator animator;

    // スタート時に呼ばれる
    void Start()
    {
        this.animator = GetComponent<Animator>();
    }

    // フレーム毎に呼ばれる
    void Update()
    {
        if (Input.GetKeyDown("space"))
        {
            animator.SetTrigger("Base");
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aiskine : MonoBehaviour
{
    // Rigidbodyコンポーネントを参照する変数
    private Rigidbody rb;
        // Start is called before the first frame update
    void Start()
    {
        // Rigidbodyコンポーネントを取得して変数に代入
        rb = GetComponent<Rigidbody>();
    }
        // Update is called once per frame
    void Update()
    {
        // スペースキーが押されたら
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // isKinematicをfalseに設定して物理演算を有効化
            rb.isKinematic = false;
        }
    }
}

 ゲームも映像の世界なのでカメラが重要になる。カメラは位置角度で見える世界が違う物になる。ゲームを生かすも殺すもカメラ、カメラ、カメラとなる。と言うわけでカメラを4,5台配置すれば良いだろうと考える。ネット上には2台までカメラを切り替えるScriptがあるが3台以上はみつからない。2台切り替えはカメラをTrueとFalseで切り替えているからこれを参考にして作る。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ClickCamera : MonoBehaviour
{
    private GameObject MainCamera;    
    private GameObject Camera2;      
    private GameObject Camera3;       
    private GameObject Camera4;      
    private GameObject Camera5;       

    void Start()
    {
        MainCamera = GameObject.Find("MainCamera");

        Camera2 = GameObject.Find("Camera2");
        Camera3 = GameObject.Find("Camera3");
        Camera4 = GameObject.Find("Camera4");
        Camera5 = GameObject.Find("Camera5");
               
        Camera2.SetActive(false);
        Camera3.SetActive(false);
        Camera4.SetActive(false);
        Camera5.SetActive(false);
    }
           
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
           
            MainCamera.SetActive(true);
           
            Camera2.SetActive(false);
            Camera3.SetActive(false);
            Camera4.SetActive(false);
            Camera5.SetActive(false);
        }
         if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            
            Camera2.SetActive(true);

            MainCamera.SetActive(false);
            Camera3.SetActive(false);
            Camera4.SetActive(false);
            Camera5.SetActive(false);
        }
          if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            Camera3.SetActive(true);

            MainCamera.SetActive(false);
            Camera2.SetActive(false);
            Camera4.SetActive(false);
            Camera5.SetActive(false);
        }
          if (Input.GetKeyDown(KeyCode.Alpha4))
        {
            Camera4.SetActive(true);

            MainCamera.SetActive(false);
            Camera2.SetActive(false);
            Camera3.SetActive(false);
            Camera5.SetActive(false);
        }
          if (Input.GetKeyDown(KeyCode.Alpha5))
        {
             Camera5.SetActive(true);

            MainCamera.SetActive(false);
            Camera2.SetActive(false);
            Camera3.SetActive(false);
            Camera4.SetActive(false);
        }
        

    }
}

良い感じになった。


夢は100万の大軍を動かすゲームを作ることです。それまでには時間がかかりますが応援お願いします!