シューティングゲーム制作

はじめて「Unity1週間ゲームジャム」にチャレンジしました。

いつも”ゲームとは言えない何か”を作ってるので、何気にUnityでのゲーム制作は初めてかもしれない。

今回はめずらしくbibinbaさんから「一緒に制作しませんか?」と誘ってもらいました。

 

 

◆役割分担

前回共同制作した時
bibinbaさんに絶望的なUIセンスを見せつけてしまったので

メインゲーム:シロフード

開始・終了画面、ランキングシステム:bibinbaさん

という役割になりました。

 

 

◆コンセプト

シュール系シューティング

↓こんな感じの動いてるだけで面白いシュール系が作りたいなと思いました。

今回のお題が「つながる」だったので敵をツナ缶にして

“ツナ狩る”→つながる と、こじつけました。

 

 

 

◆使用したモデル

このシュールさに一目惚れした。

動いてるだけでもう可愛いwおもしろいw

ほびわんさんありがとうございます。

たぶん今後も愛用させて頂きます。

 

 

 

◆タイムライン

ゲームの性質上チキンの顔が見えないのが残念だったのでスタート時に顔を見せるようにしました。

 

別視点から映すワイプ案もあったけどなんかしっくり来なかったのでやめました。

 

 

 

◆当たり判定のあるパーティクル

衝突したら敵を消してポイントを加算

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

public class particle_script : MonoBehaviour
{

    public Text Pointtext;
    public static int point;


    void OnParticleCollision(GameObject other)
    {
       

         if (other.gameObject.tag == "enemy") {
            Debug.Log("衝突:"+other.gameObject.name );
            Destroy(other.gameObject);
             
            point= point + 10;
            Pointtext.text =( point +"ポイント");
        
        }else if(other.gameObject.tag == "enemy2"){
            Debug.Log("big衝突");
            var enemyHP = other.gameObject.GetComponent<enemy_script>();
            enemyHP.myHP -= 1;
            other.gameObject.GetComponent<enemy_script>().myHP=enemyHP.myHP;
            if( enemyHP.myHP < 0){
                Destroy(other.gameObject);
                point= point + 50;
                Pointtext.text =( point +"ポイント");
            }
        }
    }
}

 

 

◆敵ランダム出現

マップのX、Z軸範囲内をランダムで取得して配置

一定確率で強い敵を出現させる

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

public class EnemyRandomMake : MonoBehaviour{

    public GameObject Enemy1;
    public GameObject Enemy2;
    public int EnemyCnt;
    void Start(){

         particle_script.point=0;

        for(int i=0; i<EnemyCnt+1;i++){
            //敵ランダム位置に出現
            float X = Random.Range(-130,60);
            float Z = Random.Range(-180,04);
            if ((i % 8) == 0){
                //8で割り切れる場合はenemey2を出現させる
                Instantiate(Enemy2,new Vector3(X,0f,Z),Quaternion.identity) ;//Quaternion.identity回転していない状態
            }else{
                Instantiate(Enemy1,new Vector3(X,0f,Z),Quaternion.identity) ;
            }
         }
        
    }

}

 

 

◆敵の処理

NavMeshを使用

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

public class enemy_script : MonoBehaviour
{

    GameObject target;
    NavMeshAgent agent;
    int enemy1HP=1;
    int enemy2HP=10;
    public int myHP;

    // Start is called before the first frame update
    void Start()
    {
        target =GameObject.Find("Player");
        agent = GetComponent<NavMeshAgent>();
        if (transform.tag=="enemy"){
            myHP=enemy1HP;
        } else if(transform.tag == "enemy2"){
            myHP=enemy2HP;
        }
    }

    // Update is called once per frame
    void Update()
    {
        agent.destination = target.transform.position;//目的地をターゲットに指定


    }

 

◆頭の中にはあったけど実装しなかった機能

・プレイヤーのHP

・敵の攻撃

・パワーたまったら必殺技

・全体マップ表示(敵の位置を表示)

 

必殺技撃つ時にカットシーン入ったらカッコいいかなーと思った。

 

自分が何か作る時

①完成しているか
②致命的なバグつぶし
③機能追加

という優先順位にしてるので、時間の都合上①②を優先して③は実装しませんでした。

 

 

 

◆問題点

・ゲームリスタートでポイント初期化していなかった。(修正しました)

・使用ブラウザによって画面が表示されなかった。

・使用ブラウザによってカウントダウンが遅くなった。

 

 

◆今後の課題

・軽くする?(読み込みに1分くらい時間がかかる)

・3D酔いするらしい

 

読み込みに1分かかるのは致命的すぎて、それだけで誰にも相手されなくなる。

 

 

◆最後に

ゲームつくり楽しませてもらいました!

誘っていただいて感謝!

 

bibinbaさんの記事はこちらから

 

ゲームはこちらから遊べます。

https://unityroom.com/games/chickentuna

 

 

関連記事




コメントを残す

※コメントは承認後に表示されます。
 コメントを公開されたくない場合、名前の後に「:非公開」とつけてください。