Kilimanjaro Warehouse

WEBとかゲーム開発のことについて書きます。

Unity: HogeClass.PiyoとHogeClass.Piyo間があいまいです(CS0229) [ Assembly-CSharp ]の解消法

HogeClass.PiyoとHogeClass.Piyo間があいまいです(CS0229) [ Assembly-CSharp ]

f:id:kilimanjaro-a2:20190722002016p:plain

Unityで開発を行っていたところ、
同じクラスの同じ変数どうしの間があいまいであるという上記のようなエラーが、
クラス内すべての変数について発生しました。

解消法

slnファイルとcsprojファイルを削除して、
プロジェクトの再起動を行うとエラーが解消されました。

slnファイルとcsprojが何のファイルであるかについては、
こちらの記事が参考になります。
qiita.com

自動生成されるファイルなのですが、
一応バックアップは取ってから削除を行う方が良いと思います。

1週間でゲームを作った ~宇宙編~

知り合いのゲーム製作者の方と「ゲームジャムをやろう」という話になり、
1週間で「宇宙」というお題のゲームを作りました。

今回は、いつも参加しているunity1weekではありません。

作ったゲームについて

タイトルはSpace Defender(スペースディフェンダー)です。
某有名なゲームの外伝、Ifストーリーのようなものを意識して作ってみました。

ジャンルとしては、
ブロック崩し+シューティングのような感じです。

f:id:kilimanjaro-a2:20190726011537p:plain

スペースキーだけでエイリアンを操作し、
敵の攻撃を跳ね返しながら、長い時間地球を守ることが目的です。

以下のリンクから遊べるので、良かったら遊んでみてください!
unityroom.com

良かった点

今回作ったゲームで、達成できた点・良かった点を挙げていきます。

  • 「どこが面白いのか?」を考えた

今回は、面白さの目標として「バルーンファイト」を意識しました。
独特な操作感で、はじめは思ったようにキャラクターが動かせないのですが、
慣れてくるとテクニカルな動きで華麗に敵を倒せて楽しいゲームです。

このゲームでも、独特な操作で最初は慣れなくても、
次第に反射攻撃やパワーショットを駆使して、バンバン敵を倒せるようになります。
このように成長感と楽しみを感じてもらえることを目標に開発を行いました。

またバルーンファイトでは、敵を倒すためにはプレイヤーが近づかなければならないのですが、
近づくことによって自分も攻撃を受けやすくなるというリスクがあります。
それと同じようにSpace Defenderでは、敵の攻撃は自分へのダメージになり得るリスクがある反面、
跳ね返すことができれば強力な攻撃を行うことができるリターンを作りました。
(実際は後述のパワーショット強すぎ問題のせいで、あまりリターンは美味しくないです)

今までのゲーム製作では、「どこが面白いのか」をよくわからないまま作りがちで、
結果として面白くないものができることが多かったのですが、
今回のゲームは、どこに面白さがあるのかをハッキリ言語化できたので良かったです。

  • シンプルなルールと操作

操作ボタンはスペースキーのみで、
押すタイミングによって、プレイヤーの動きが変わります。
(ちなみにスペースとお題の宇宙を掛けています)

操作キーが1種類だけなのと、
ルール(地球に3回攻撃されたら負け)というゲームの根幹部分を、
シンプルにまとめることができたと思います。

  • ドット絵の活用

今回は画面全体でドット絵(ピクセルアート)を採用しました。
他の参加者の方が強いドット絵使いだったので、
せっかくだから自分も使ってみようと思ったからです。

使ってみて、手軽に画面全体の統一感を出すことができて便利だなと思いました。

今回はUnityに搭載されている2D Pixel Perfectというパッケージを利用することで、
自動でピクセルパーフェクトな画面を実現してくれたので、
「Unityのちからってすげー」と思いました(小並感)。

反省点

今回作ったゲームで、上手くいかなかった点を挙げていきます。

ステージ作成に短時間しかとれず、難易度調整も適当すぎました。
敵の強さの上昇具合が思っていたよりも激しかったようで、
緩急をしっかりつけると良いというアドバイスをいただきました。

また、実際に人がプレイしているところを後ろから見てみると、
パワーショットがガンガン使われる反面、反射攻撃があまり使われていませんでした。
反射攻撃のリスクとリターンのギリギリ具合を楽しむよりも、
パワーショットで敵をガンガン破壊していくゲームになってしまいました。
反射攻撃のメリットを大きくするべきだったと反省しています。

レベルデザイン・難易度調整はいつも手を抜きがちなので、
近いうちにガッツリと強化期間を取りたいなと思っています。

  • ギミックの不足

基本的に出現する敵が「動かない敵」「動く敵」「壁」の3種類しかなく、
単調になりがちかなと思いました。

最初の段階では、「反射攻撃でしか倒せない敵」「パワーアップアイテムを落とす敵」などを考えていましたが、
ゲームが複雑になりそうだったのと、単純に実装する時間がなかったので見送りました。
何かこの辺良いアイディアはなかったかなぁと終わってからずっと考えています。

思ったこと

ここのところ体調とメンタルの調子が悪い日々が続いていましたが、
ゲームを作る楽しさや、新しいことにチャレンジして試行錯誤する経験をすることで、
脳にいい感じの刺激を与えられて良かった感じがあります。

また、ゲームジャムについてですが、
せっかくなのでunity1weekとは違う、
「少人数」かつ「知り合い間での開催」という点を活かせたら良いなと思いました。
もちろん本家unity1weekもしっかり参加していきたいです!

Error: The reference assemblies for framework ".NETFramework,Version=v4.7.1" were not found.

先日VS CodeでUnityでの開発を行おうとしたところ、
以下のようなエラーが出て、コードの補完が効かなくなりました。

Error: The reference assemblies for framework ".NETFramework,Version=v4.7.1" were not found.

数日前にVisual Studioをアンインストールしたせいで、
.NETFrameworkも一緒に消えてしまったのが原因だと思われます。

WindowsであればVisual Studio Installerから、
4.7.1のSDKをインストールすることで解決できます。
f:id:kilimanjaro-a2:20190629165236p:plain

macOSではmonoをインストールすることで解決できるようです。
qiita.com

VS Code: マークダウン記法で書かれたファイルをプレビューしながら編集する

VS Code (Visual Studio Code - Code Editing. Redefined) は、
マークダウン記法で書かれたファイルのパース結果を、
リアルタイムで確認することができます。

f:id:kilimanjaro-a2:20190714120445p:plain

カラムを生の.mdファイルとプレビューの2つに分割することで、
常に見た目を確認しながらファイルを編集することができます。

f:id:kilimanjaro-a2:20190714120314p:plain
(左: 編集中のファイル, 右: パースされた結果)


以下手順です。

.mdファイルを開く

VS Codeで拡張子.mdのファイルを開きます
f:id:kilimanjaro-a2:20190714120223p:plain

.mdファイルのタブを右クリック→(上下左右)へ分割

エディタ分割機能で、好きな方向へ分割します
f:id:kilimanjaro-a2:20190714120245p:plain

.mdファイルのタブを右クリック→プレビューを開く

プレビューを表示したい場所のタブから、プレビューを開きます
f:id:kilimanjaro-a2:20190714120301p:plain

完成!

編集したファイルはすぐにプレビューに反映されます
f:id:kilimanjaro-a2:20190714120314p:plain

(記事中の.mdファイルは
A template to make good README.md · GitHub
を使用しています)

VS Code: C# (非Unity) のコード補完を行う

VSCodeC#を書くときに、コード補完を有効にするための手順のメモです。
macOSでしか試していませんが、多分他のOSでも同じだと思います。

手順1: 必要なもののインストール

Visual Studio Code - Code Editing. Redefined

f:id:kilimanjaro-a2:20190707171226p:plain

  • .NET Coreのインストール

Download .NET Core 2.2 (Linux, macOS, and Windows)

手順2: プロジェクトファイルを生成する

C#ファイルを置きたいディレクトリへ移動し、
以下のコマンドを実行します。

dotnet new console

C#のプロジェクトにはプロジェクトファイル(.csproj)が必要なため、
それを生成するためのコマンドのようです。
(.csprojを作らず、.csファイルを置いてもコードを補完してくれない)

参考:
teratail.com

その後、File -> Openでこのディレクトリを開くことで、
そのディレクトリ以下に作られた.csファイルにはコードの補完が効くようになります。

#unity1week に参加した ~あつめる編~

unityroom主催のUnity 1週間ゲームジャムに参加しました。
今回は第12回目の開催で、お題は「あつめる」でした。

https://unityroom.com/unity1weeks/13

作ったゲームについて

シンプルに規定の数のアイテムをあつめるゲームにしました。

"ラーメンの上に浮いている油をあつめる",
"定年退職までに2000万円あつめる"

などのくだらないアイディアも思いつきましたが、
ゲームとして成り立たせるのが難しかったため、
採用を見送りました。


作ったのは、ボールを弾いて星をあつめるゲームです。

f:id:kilimanjaro-a2:20190707175132p:plain
https://unityroom.com/games/c-o-llect

角度を考えて弾いて、星を規定の数集めるとステージクリアです。
6ステージあります。
早ければ3分くらいで終わります。

良かった点

今回、良かった点は「完成させたこと」でした。
ギリギリまでゲームの内容が思い浮かばず、
前回のように参加を見送ろうかと思いましたが、
諦めなかったのが良かったです。

反省点

  • 実装の時間が足りなかった

実装に取りかかるまでの時間が長すぎて、時間が足りませんでした。

  • 根本のゲームのアイディアがあまり練られてなかった

単純に面白みがどこにあるのかわからないものを作ってしまいました。
当初の予定では「適当にボールを弾いてるだけで、星がチャリンチャリンと集まってすごい気持ちいい!」
的なゲームを作る予定でしたが、いざ実装してみると全然面白くなかったです。

  • UIやUX的な部分に力を入れなかった

いつもは、ゲームの手触りやマイクロインタラクションなどに力を入れていたのですが、
今回は思うところあって、その辺を一切手をつけずにやってみましたが、
よくない判断でした。
(時間が足りなかったというのもあります。)

思ったこと

参加して、投稿するだけで、えらいと思います。
次回は早めにアイディアを決めて、すぐ実装に取り掛かるか、
誰かと組んで作業を分担するなどの対策を考えたいと思います。

npm install -gでfirebase-toolsのインストールができないとき

Firebaseを利用するために、

npm install -g firebase-tools

でfirebase-toolsをインストールしようと思ったのですが、

gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/firebase-tools/node_modules/fsevents/.node-gyp'
gyp ERR! System Darwin 18.6.0
...(以下略)...

このようなエラーが発生し、インストールに失敗しました。
権限の設定やキャッシュの削除などを試してみたのですが、うまくいかず...

調べてみると、「npmではなくyarnでインストールすると良い」
との情報があったので試してみました。

yarn global add firebase-tools
success Installed "firebase-tools@7.0.1" with binaries:
      - firebase

すると、難なく成功しました。

Thanks
github.com