はじめて「Unity1週間ゲームジャム」にチャレンジしました。
いつも”ゲームとは言えない何か”を作ってるので、何気にUnityでのゲーム制作は初めてかもしれない。
今回はめずらしくbibinbaさんから「一緒に制作しませんか?」と誘ってもらいました。
◆役割分担
前回共同制作した時
bibinbaさんに絶望的なUIセンスを見せつけてしまったので
メインゲーム:シロフード
開始・終了画面、ランキングシステム:bibinbaさん
という役割になりました。
◆コンセプト
シュール系シューティング
↓こんな感じの動いてるだけで面白いシュール系が作りたいなと思いました。
よく奈良で見かける光景を、
ゲームにしました。— ごく普通のシカのゲーム (@DeeeerSimulator) February 18, 2019
今回のお題が「つながる」だったので敵をツナ缶にして
“ツナ狩る”→つながる と、こじつけました。
◆使用したモデル
このシュールさに一目惚れした。
動いてるだけでもう可愛い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
・敵の攻撃
・パワーたまったら必殺技
・全体マップ表示(敵の位置を表示)
必殺技撃つ時にカットシーン入ったらカッコいいかなーと思った。
自分が何か作る時
①完成しているか
②致命的なバグつぶし
③機能追加
という優先順位にしてるので、時間の都合上①②を優先して③は実装しませんでした。
◆問題点
・ゲームリスタートでポイント初期化していなかった。(修正しました)
・使用ブラウザによって画面が表示されなかった。
・使用ブラウザによってカウントダウンが遅くなった。
今回Unityで詰まったところ
・PostProcessingのColor Gradingを有効にすると、画面が真っ暗になる
→→SafariとかのWebGLの仕様。Google Chromeだと問題なく見えた・物によって同じ色のはずが、色が不揃い
→→MaterialのShaderが違っているから。とりあえずMobileのDiffuseにしておけばよい感じ— たかぽこちん( ´Ꙩωꙩ` ) : 藝大から東大院に乗り込むぞ!! (@tckr_tckr) 2018年6月9日
◆今後の課題
・軽くする?(読み込みに1分くらい時間がかかる)
・3D酔いするらしい
読み込みに1分かかるのは致命的すぎて、それだけで誰にも相手されなくなる。
◆最後に
ゲームつくり楽しませてもらいました!
誘っていただいて感謝!
bibinbaさんの記事はこちらから
ゲームはこちらから遊べます。
https://unityroom.com/games/chickentuna
※コメントは承認後に表示されます。
コメントを公開されたくない場合、名前の後に「:非公開」とつけてください。