2023年5月12日金曜日

シンプルなホラーゲームをC#で作る:Unity3D入門

• イントロダクション 

• 前提条件 

• シンプルなストーリーの考え方

 • ゲームのアセット作成 

• スクリプトの作成 

• ゲームのデザインとテスト

 • コンクルージョン


イントロダクション


Unity3Dとは、3D のゲームやアプリを開発するためのマルチプラットフォームのゲームエンジンで、C#を使って開発します。C#はプログラミング言語の一つであり、オブジェクト指向プログラミングの基本的な概念を取り入れています。シンプルなホラーゲームとは、恐怖や緊張感を煽るために簡潔なストーリーとシンプルな操作性を持ったゲームです。この記事では、Unity3DとC#の基礎を理解してシンプルなホラーゲームを作成する方法を学びます。個性やユーモアを交えた独自の手法で進めていきます。それでは、さっそく開発に入りましょう。


前提条件


イントロダクションの中で、私たちはUnity3Dを使ってシンプルなホラーゲームを制作する方法について話しました。次のセクションである前提条件については、本当に大切なことについて説明していきますので、是非しっかりとご覧ください。 Unity3Dのダウンロードとインストールは、お使いのパソコンの仕様によっては長時間かかることがあります。そのため、隙間時間を見つけてインストール作業を進めることが必要かもしれません。 C#の基本知識に関しては、それほど難しいものではありません。基本構文を覚え、簡単なプログラムを作成できるようになれば、開発に必要なスキルとして十分です。 開発に必要なツールの概要については、基本的には画像を編集するソフト、プログラムを書くエディタ、Unityの開発環境が必要です。これらはオンラインで簡単に入手することができますが、慣れるまでそれなりの時間がかかるかもしれません。 以上が前提条件の内容になります。次のセクションでは、シンプルなストーリーの考え方について述べますので、引き続きお付き合いください。


シンプルなストーリーの考え方


シンプルなホラーゲームを作成するにあたり、ストーリーの骨子、登場人物の設定、そしてプレイヤーの目的を考える必要があります。 ストーリーは簡単であっても、ゲームの雰囲気を決定づける大切な要素です。何が起こっているか、なぜプレイヤーが恐ろしい場所にいるのかを考え、物語全体の基本を作ります。 登場人物の設定も重要です。プレイヤー自身が主人公である場合もありますが、敵キャラクターや他の登場人物にも出番を持たせることで、物語がより豊かなものになります。 そして、プレイヤーの目的。それが何であるかを明確にすることで、プレイヤーはゲーム内で何をすべきかを理解し、ゲームに没頭することができます。 このように簡単なストーリーにも、細部にわたって考えることが重要です。次に進む前にしっかりと考え、改善を加えることで、より面白く魅力的なゲームに仕上げましょう。


ゲームのアセット作成


アセットの準備 シンプルなホラーゲームを作成するために、アセットは不可欠です。アセットとは、ゲーム内で使用されるグラフィック、サウンド、3Dモデル、テクスチャーなどの要素のことです。Unity Asset Storeから無料で入手できるアセットがありますが、オリジナルのアセットを作成する方がよりクリエイティブでパーソナルなゲームを作成できます。 プレイヤーキャラクターの作成 プレイヤーキャラクターは、ゲーム内で操作するメインキャラクターです。このキャラクターが声を出すこともできるように、Unity3Dの「アバター」機能を使って顔の表情を設定できます。また、アニメーションもコントロール可能です。プレイヤーキャラクターのデザインと外観をカスタマイズし、楽しい体験を作り出すことができます。 敵キャラクターの作成 敵キャラクターは、プレイヤーの邪魔をする存在です。敵キャラクターを作成するには、アセットストアで無料で入手できるものもありますが、ユニークなものを作成するためには、オリジナルのキャラクターを設計する必要があります。敵キャラクターのデザインは、ゲームの雰囲気や物語に合わせて設定することが大切です。 背景の作成 背景は、ゲーム内でプレイヤーに体験させる最も重要な要素の一つです。背景は、ストーリーの設定や世界観に合わせて設計する必要があります。背景をよりリアルに見せるために、インタラクティブな要素を追加することも可能です。背景を設計するには、2Dまたは3Dのグラフィックソフトウェアを使うのが一般的です。 以上が、シンプルなホラーゲームを作成するために必要なアセットの準備、プレイヤーキャラクターと敵キャラクターの作成、および背景の作成です。これらの要素をカスタマイズし、自分だけのオリジナルなゲームを作成しましょう。


スクリプトの作成


スクリプトの作成 さて、いよいよシンプルなホラーゲーム制作の醍醐味である、スクリプトの作成に入ります。この段階では、プレイヤーや敵キャラクターの動き、アクションの設定、衝突判定、そして簡単なAIの実装など、ゲームの中心的な要素が一気に形づくられます。 まずキャラクターの動きやアクションについて、プレイヤーが方向キーを押した時にどのように移動するかや、敵キャラクターがプレイヤーを発見した時にどのように動くかなどを決定します。その際、キャラクターの状態というものを定義しておくと、スムーズな動作の実装が可能になります。 また、キャラクター同士の接触判定についても、コードで指定する必要があります。プレイヤーの攻撃が敵にヒットするかどうかの判定や、敵CharacterがPlayerに追従するようなAIの実装などには、接触判定が不可欠です。 上記のようなスクリプトの記述が完了した後は、簡単なAIの実装に取り掛かります。ここでは、Playerの位置を意識した敵の追跡や、敵を避けるようなPlayerの動作を設定することができます。 スクリプトの作成においては、細かい部分まで手動でコードを書かなければならないため、かなりの労力が必要です。しかし、一つ一つのコードが上手く組み合わさって、画面上で動作する様子を見ると、達成感は格別ですね。


ゲームのデザインとテスト


ゲームのデザインとテスト 最も重要なことの1つは、ゲームのUIデザインです。UIは、プレイヤーがゲームを操作するための主要な手段であり、その見た目はゲームの印象を大きく左右します。しかし、UIが綺麗に見えても、使いづらい場合はプレイヤーは不快な思いをすることもあります。したがって、ゲームのUIには、見た目だけでなく、使いやすさも兼ね備えることが必要です。 また、ゲームプレイのテストと修正も非常に重要です。一般的に、プレイテストは、ゲームに欠陥がないかどうかを確認するために行われます。ただし、単にバグを見つけるのではなく、ゲームプレイ全体を改善するための貴重なフィードバックを得ることもできます。このようなフィードバックを取り入れることで、プレイヤーにとってより良い体験を提供することができます。 ゲームのUIデザインとプレイテストは、ゲーム開発において非常に重要な要素であることは間違いありません。デザインは、ゲーム自体を販売するためのツールであり、テストはプレイヤーエクスペリエンスの改善のための貴重なツールです。したがって、これらの2つの要素をうまく組み合わせることが、良いゲームの作成につながります。


コンクルージョン


いかにも怖いシンプルなホラーゲームを作成するには、Unity3DとC#の基本スキルが必要不可欠です。本ブログを通じて、ホラーゲームを開発するために必要なステップを学びました。ゲーム開発に必要なスキルと知識は、ブログの前半で軽く触れました。この点を再度まとめます。 重要な点の一つは、基本的なプログラミングスキルを持っていることです。簡単なC#スクリプトの作成には、プログラムの基本構文や変数の使用方法が必要です。また、簡単なAIを実装するためには、条件文の使用方法やループの理解が欠かせません。 次に、Unity3Dの基本的な操作方法について学びました。ゲームオブジェクトの作成や配置、コンポーネントの追加など、基本的な操作を理解することが必要です。そして、自分のアセットを作成し、それをUnityにインポートする必要があります。 以上のような基本スキルを身に付けることで、シンプルなホラーゲームを作成することができます。今後の学習と開発においては、それぞれのスキルをより高度に扱えるようになることが大切です。また、自分なりのアイデアを持ち、新しい技術やツールを積極的に取り入れることが、より良いゲーム開発につながります。 以上が、本ブログで学んだことの結論です。皆さんも、ぜひ自分なりのホラーゲームを作成してみてください!

2023年5月2日火曜日

ChatGPTでゲームを作ってみる!


おはこんばんにちは!ギルガメです! すごくすごく久しぶりの投稿になります。


今世界で話題のChat GPTを使って簡単にゲームを作りたいと思います!

Chat GPTを触ってみたところ。。すごい。。凄すぎる!

まずChat GPTで簡単な質問でゲームを試しにUnity3DのC#で作ってみることにしました。
Chat GPTに「Unity3Dで簡単なゲームをC#コードでお願いします」って投げてみたところ、PONGゲームの紹介やコードがババっと回答をいただきました。

すごくわかりやすく、コードもC#でボールやパレットなどのスクリプトも丁寧に説明してくれました。

また対戦相手も必要なので敵のAIのスクリプトも頼んでみたら。。一瞬でできました。
こんなに簡単にAIも作れてしまった。。いい世の中だ。生きててよかった笑

早速教えてもらったコードを紹介していきます。

まずはボールのスクリプトになります。

using UnityEngine;

public class Ball : MonoBehaviour
{
public float speed = 10f;

private Rigidbody2D rb;

void Start()
{
rb = GetComponent<Rigidbody2D>();

float angle = Random.Range(-45f, 45f);
rb.velocity = new Vector2(speed * Mathf.Cos(angle), speed * Mathf.Sin(angle));
}

void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Paddle")
{
float y = (transform.position.y - col.transform.position.y) / col.collider.bounds.size.y;
Vector2 dir = new Vector2(1, y).normalized;
rb.velocity = dir * speed;
}
else if (col.gameObject.tag == "Wall")
{
rb.velocity = new Vector2(rb.velocity.x, -rb.velocity.y);
}
}
}

次にプレイヤーが動かすスクリプトになります。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
public float speed = 10f;

private Rigidbody2D rb;

void Start()
{
rb = GetComponent<Rigidbody2D>();
}

void FixedUpdate()
{
float vertical = Input.GetAxis("Vertical");

Vector2 movement = new Vector2(0, vertical) * speed * Time.deltaTime;
rb.MovePosition(rb.position + movement);
}
}

そして敵AIのスクリプトです。

using UnityEngine;

public class AIController : MonoBehaviour
{
public Transform ball;
public float speed = 10f;

private Rigidbody2D rb;

void Start()
{
rb = GetComponent<Rigidbody2D>();
}

void FixedUpdate()
{
if (ball.position.y > transform.position.y)
{
Vector2 movement = new Vector2(0, 1) * speed * Time.deltaTime;
rb.MovePosition(rb.position + movement);
}
else if (ball.position.y < transform.position.y)
{
Vector2 movement = new Vector2(0, -1) * speed * Time.deltaTime;
rb.MovePosition(rb.position + movement);
}
}
}

この3つのスクリプトだけである程度は遊べるPONGゲームになる・・

2Dでプロジェクトを立ち上げてスフィアのオブジェクトにBallのスクリプトの付与します。
パレットもいい形のものにPlayerController、そして同じ形のパレットにAIControllerを付与します。

あとは細かいところは壁を作って、バウンドするようにPhysics Material 2Dを付与させて。ボールを位置を真ん中に設置して完了になります。

簡単に作っているのでデザインなどはありませんが下記のように遊べるようになります。



Chat GPTでコードに詳しくなくてもなくてもゲームが作れそうですね。。
難しいコードも簡単に教えてくれるのでランダムダンジョンの生成など、敵AIの細かい動きなどもできそうなので試していきたいと思います。

2022年9月9日金曜日

ユグドラシルプロジェクト日記 #3



おはこんばんにちは!ギルガメです!

久しぶりにブログを更新します。

ユグドラシルプロジェクトは「Colyseus」でリアルタイム通信のサーバーをAWSのEC2で構築してワールドマップのような世界を実現していました。

ですがいくつか問題があったのでFishnetを使ったリアルタイム通信にリニューアルしたいと思います。

「Colyseus」で問題があった例です。この時はまだバージョンも古かったので今は下記の問題はないかもしれません。

  • NPCの追加、実現したかったのはNPCの動きを他のプレイヤーにもシンクロさせることでした。これを実現するにはサーバー側でNPCのデータを持つ必要があるため、「Colyseus」で実現するのは難しく感じました。
  • モンスターのリスポーン、こちらもNPCの追加と同様にサーバー側でモンスターの数など管理してリスポーンする必要があるため、Unityでサーバーのロジックを埋め込みたいので「Colyseus」を諦めました。
  • ワールドマップでSceneを切り替える
まだまだやりたいことはあるのですが、一番欲しい機能としては上記のものになるのですが「Colyseus」からFishnetに切り替えていきたいと思います。

「Colyseus」はNodeJSでできているのでギルガメ的にはすごく好きでした。もちろんColyseusが悪いわけではなく、沢山の部屋を作成してミニゲームする的なものはColyseusでもいいかなと思います。サーバー内で処理するならUnity内で処理を書きたいのでColyseusよりFishnetの方がやりやすいのかなと思ったのでチャレンジです!!!

とはいえ、Fishnetはまだまだちょっと触ったぐらいですがサーバーをAWSか自宅にするかすごく迷います。。

まずはリメイクできるかですが、どうぞよろしくお願いいたします!

2021年9月11日土曜日

ギルガメオフィシャルページのリニューアル!#1

おはこんばんにちは!ギルガメです! すごくすごく久しぶりの投稿になります。 

なかなか時間が作れずゲーム開発にも手が回りませんでした.. 

今回は長くページを更新していなかったので自作のオフィシャルページのバージョンが古くなったため、新しく作り直すことにしました! 

古いバージョンの技術は以下になります。 

フロントエンド 
  • ReactJs 

バックエンド(AWS) 
  • NodeJs 
  • Express 
  • MongoDB 

さすがにReactのバージョンも下がってきました。またSEO的にもよくないので今回はSEOにも強いサーバーサイドレンダリングを使ってSEOにも強いページにしたいと思います。 

今回リニューアルに使う技術はこちらです! 

フロントエンド 
  • NextJs 
  • TailwindCSS 
  • Supabase 

バックエンド - 使いません!

そう!今回はバックエンドを使いません! 
え?APIはどうするの?毎回ページを更新するの?などあると思いますが、今回はサーバーレスで行きます! それを可能にするのがNextJSとSupabaseの組み合わせです! しかもNextJSでVercelにページを公開することですべて無料になるという素晴らしい世界です。

Supabaseを使ってみてすごく使いやすく無料でストレージも使えて・・もう最高でした。 興味のある方はこちらからどうぞ! 


まだ日本語のドキュメントはないのかな・・それでも見ただけですごくわかりやすい内容かなと思うので誰でもすぐに導入できると思います。 しかもログイン機能も簡単に導入できます・・神ですか・・ 

今回はギルガメオフィシャルページのリニューアルを終わらせてからまたどんどんゲームを開発していきたいと思います! 興味のある方は気軽にコメントをください! 

これからもギルガメをよろしくお願いいたします!

2020年11月11日水曜日

unity3Dでホラーゲームを作ろう!#1

 


おはこんばんにちは!ギルガメです!

ハロウィンに向けて初めてホラーゲームを開発してみました。
色んな機能を追加したくてグダグダになったゲームですが、無事に完成してリリースでできてよかったです。

でもバージョンではありますが、ぜひ遊んでいってください!

今回は初めてホラーゲームの開発をしてみて、ギルガメ的に役にたったものをまとめていきたいと思います。

これさえできたらホラーゲームのベースになるものになるので、スムーズに開発が進みます。まだ時間短縮にもなるので、ぜひ試してみてください!

まずホラーゲームの舞台にステージを作っていきます。こちらはデザインをお持ちの方は別で作成してもいいですが、ギルガメはUnity Packageから無料で使えるProbuilderを使って開発します。

まずはProBuilderをUnity Packageからインポートします。

Window -> Package Managerを選択

ProBuilderを検索してインストールします。

これでマップを作成する下準備ができたました!

このProBuilderはすごく役に立ちます。めちゃくちゃ使いやすい!

ではさっそく建物を作っていきます。
ProBuilderのWindowを開きます。
Tools -> ProBuilder を選択して見やすいとこにwindowを設置してください。

最初は"Use Text Mode"になっていてちょっと個人的に見づらいのでアイコンの表示に変更します。

"Use Text Mode"から"Use Icon Mode"に変更します。

個人的にはこっちの方が好き。

では床のベースになるキューブを作ります。
一番の左の"New Shape Tool"をクリックしてシーンにキューブが生成されます。
次に形を変えていきます。


シーンの真ん中の上にある"Face Selection"を選択してキューブを伸ばしたりして
ベースを作ってい見ます。
階段なども設置でるので、好みのマップを作成します。

簡単な二階建てのフィールドができました。

マテリアルでお好みの色に変更できますが、今回はホラーゲームとして形が完成してから、少しずつホラーっぽくしていきます。

本格的にマップを作りたい方はこちらの動画がおすすめです!



今回はマップが完成したので、次回はプレイヤーとライト追加して先ほど作ったマップを徘徊できるようにしたいと思います。