投稿記事

無料プランの記事 (168)

Heliodor 2020/12/02 22:07

テンポラリファイルが作成できません

今回はちょっぴりPC自作的なお話です。
興味無い人にはワケ分からないかも。いつもか。



要約するとこんなお話。


私が自宅でメインに使っているPCは10年ぐらい前に組んだもので、DDR3メモリーを使用しています。(それでも当時出たばっかりの第2世代Core i7で組んだハイエンド機なんですよ)

言うまでも無く今の主流はDDR4で、新しいPCを組めば当然DDR4メモリーを使うわけで、古いPCから組み替えて余るDDR3メモリーを友人から乞食貰って回った結果、私のPCは32GBもメインメモリー搭載しています。DDR3だけど

一般に4GBだとちょい不足気味、普通に使う分には8GB、少し重い使い方でも16GBもあれば十分と言われてますし、私の使い方では32GBは本当に役不足(本当の意味で)です。動画編集とかしないし。

その余りあるメインメモリーを少しでも活用するために2GBほどRAMディスクにして、そこをwindowsのテンポラリファイルの置き場にしていました。ブラウザのキャッシュもそこに読み込むので、web閲覧も超速くて快適です。

参考までに、実際に測定した読み書き速度。


RAMディスク


見るからにブッチギリの速さのRAMディスク。
当然PCの電源切ると全部消えますが、テンポラリファイルなら何の問題もありません。


SSD


まだM.2なんて無い時代の普通のSATA接続SSD、メインドライブ(c:)。
250GBしかありませんが、OSと主要ソフトぐらいしか入ってないので特に不満も無し。
これでも当時はWindowsの起動の早さに驚いたものです。


HDD


データ保存用のHDD。結構容量多いやつ(8TB)です。
RAMディスクやSSDと比べたら読み書き速度はまあこんなもんですよね。
このHDDに今まで作ったものとか買い漁ったエロ同人とか全部詰め込まれているのでこれが死んだら私も死にます。一応自作物のバックアップはしてるけど。


正直SSDでも体感上大差無いと言えば無いんですが、ベンチマークでこれほどの数値が出るとすごく快適なような気がしますよね。SSDの書き換え回数も節約できるし。

そんなこんなで、少し前に謎のブルースクリーンが出たりしましたが、分解掃除したらその後安定しているし、まだまだ10年は戦えそうです。10年は厳しいか。



……さて、ここまでが今回の前置きです。



このRAMドライブ、以前は2GBにしていたのですが、今時のブラウザゲーとか複数起動すると2GBじゃあちょっと怪しいし、どうせ使わないメモリー有り余っているし、思い切って8GBぐらいRAMドライブにしちゃうか!という気分になりました(それでもメインメモリー24GB)。

で、RAMディスクのソフトを起動して容量を変更…………あれ、変更できない??

RAMドライブとはいえ、マウントしたまま容量変更は出来ないのかな?管理ツールからアンマウントしてソフト起動すればいいのか?いや、いっそ一度削除して再インストールすればいいか?と適当にいじっているうちに、なんかヤバそうなエラーが


余計なことやっちまった感ハンパありません。

エラー出ちゃったけど、なんかPCを再起動しろと出るので素直に再起動。
で、再起動後にドライブ確認してみたらRAMディスクドライブ(z:ドライブ)自体が無い。

じゃあRAMディスクのソフトを再インストール……しようとするとエラーがでてインストールできない!!
色々と面倒臭くなって「もうRAMディスク無くてもいいか」とも思ったのですが、何やらWindowsの挙動がおかしい



テンポラリファイルが作成できません
タイトル回収


何かする度にこのエラーが出て、まともにソフトが起動しません。※一応、起動するものもあるし、起動しないものもある
原因は明らかですが、RAMディスクを再導入するためのRAMディスクが無くてエラーが出るという如何ともし難い状態。




またOS再インストールしかないのか……。
マジ面倒くせぇ……。(少し前に丸一日潰れた悪夢が蘇る)

だいたいテンポラリファイルが作成できませんって何だよもう。
SSDもHDDも空き容量あるし、テンポラリファイルごとき作成する容量が足りないなんて……。



……テンポラリファイル!?


環境変数の編集を確認すると、自分で書き換えたz:\temp(RAMディスク)となっているので、本来のc:\windows\tempに戻すとエラーが出なくなりました。そりゃそうだ。




こうして自分で勝手に作り出した危機を、自分の力で乗り越えることに成功しました。


しかしどうしてくれよう、この徒労感。
ちなみにRAMディスクは無事8GBに変更出来ました。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Heliodor 2020/11/23 13:49

タイトル画面その後

ずっと前に書いた、タイトル画面の記事(https://ci-en.dlsite.com/creator/59/article/85520 )のその後の話です。

今回は裏話的な内容もあるので、一応フォロワー以上で。


この桜模様は百合姿/ボルボネ様(https://borbone.info/ )の素材を使わせて頂いてます。

フォロワー以上限定無料

まずは無料プランで様子見を。 お気軽にフォローしてみて下さい。

無料

【 500円 】プラン以上限定 支援額:500円

このバックナンバーを購入すると、このプランの2020/11に投稿された限定特典を閲覧できます。 バックナンバーとは?

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Heliodor 2020/11/21 19:45

袋小路から脱出したい

何度か小出しにしている動画やテスト版で皆さんお気づきかもしれませんが、あやかし紅白戦ではプレイヤーが操作するキャラクターの他にもう一人仲間がいます。


某時空戦闘機のオプションや、よくあるRPGの仲間キャラみたいにキッチリ後を着いて来る仲間なら簡単なのですが、本作の仲間は勝手に動き回りながらプレイヤーの後についてきて、時々戦ってくれたりするようになっています。

しかしそれが裏目に出て、袋小路の奥に敵がいるときプレイヤーそっちのけで袋小路に入り込んでいき、敵と戦っている間にプレイヤーを見失い、その後プレイヤーの場所に戻りたいのに地形にハマって出られなくなる……という悲しい事故が頻繁に発生しました。

理由は簡単で、仲間は単純にプレイヤーのいる方向へ移動するという実装になっていたからです。


壁の向こう側にプレイヤーがいるような状況になると、壁を迂回するという発想ができずに壁に向かって歩き続けてしまうんですね。

まあ、これはなにも仲間に限ったことではなく、プレイヤーを狙う敵でもそうなんですが……。

背の低い障害物ならばただジャンプするだけで乗り越えられるのですが、完全な壁だとそうもいかないですね。(ヴィータ大脱出の敵は、障害物を検出したらとりあえず前ジャンプしていた)





ところで、以前見下ろし型のマップを使ったゲームを実験で作ったことがあったのですが、それはプレイヤーや敵が自由に壁を破壊できるシステム(ボ○バーマンみたいに)だったので、時間経過に従ってどんどん地形が変化していました。
そのような状況で敵がプレイヤーまで到達するようにするってのが結構大変でした。プレイヤーに向かってまっすぐ進むだけではまず到達できないですからね。

その時は A*(A-star: エースター)という経路検索方法を使って、自動的にプレイヤーに到達する経路を見つけ出すということをやっていました。
https://ja.wikipedia.org/wiki/A*
(※すみません、URLのアスタリスクが勝手に消えてしまうので、最後の全角「*」を半角で入力し直して下さい)



以下ちょっと細かい話

まずマップを細かい正方形のセルに分割して(ボ○バーマンで言うところの1ブロック=1セル)、すべてのセルの中心にノード(点)を置きます。つぎに、各ノードとその上下左右のノードをつなぐエッジ(通路)を、作成しておきます。

こうして作ったデータには「点がどの場所にあるか」といった位置の情報は全く含まれておらず、「どの点とどの点が繋がっているか」という情報だけがあります。これを無向グラフと言います。「登れないけど飛び降りることはできる」みたいに一方通行なエッジが存在するものは有向グラフです。

後は、現在地ノードからどのエッジをたどって目的地ノードに行くか、という問題になります。

まず地形状態に応じて各エッジの通過コストを設定します。
安全なノード同士を結ぶエッジはコストを低く設定し、危険なノード、通行不可能ノードを結ぶエッジはコストを高くするわけです。
(ノードを「国」や「都市」、エッジを「路線」、コストを「リスク」に言い換えればわかりやすいかと思います。安全な都市同士を結ぶ路線はリスクが低いが、危険な都市とつながっている路線はリスクが高いってことです)

このコストは、キャラクターによって変えることが出来ます。
(逆に言うと、ここでキャラクターの個性を表現する事が出来ます)

「破壊不可能なブロックでも破壊できる」みたいな敵にとっては、破壊不可能ブロックの通過コストはそれほど高くありませんし、「アイテムを好んで取得する」キャラクターにとっては、アイテムが存在する通路よりも何もない通路のほうがコストが高くなります。
好戦的なキャラ、逃げ回るキャラなんかも作れますね。
「プレイヤーの近くにあるノードほど通過コストが高い」みたいにすれば、プレイヤーから遠い場所を好んで通過するような移動をさせることができます。
(地形は常に変動しているので、極端な場合はこれらのコストを毎フレーム再設定することになります)


このようにして作ったデータ(重み付き無向グラフ)を A* に処理させると、目的地までたどり着くために最もコストが少なくなるようなノード配列(つまり経路)を得ることができます。

……と、まあこれはボ○バーマンのように地形が正方形単位で構成されていれば簡単にできたことなんですが、あやかし紅白戦のように正方形などまるで関係のない地形を組んであると、ちょっとやりにくいんですよね。
それに地形がそこまで複雑でないので、マップを細かいセルに分割してどうのこうのって方法は役不足(本当の意味で)かなあと。


そういう時に割と単純かつ効果的なのは、マップ上にナビゲーション用のマーカーを設置しておく方法です。
マップエディタでも何でもよいので、マップ上にマーカーをばんばん置いていきます。
マーカーを置くときのルールは単純で

1.マップ上のどの位置(プレイヤーが侵入できる位置)からも、最低一つのマーカーが見える
2.マーカーからは、最低一つの別のマーカーが見える

です。このマーカーはゲーム中では一切表示されません。でもキャラクターたちはマップのどこにマーカーがあるかを知っています。
プレイヤーを見失ったキャラクターは、とりあえずマーカーをたどっていけば、壁にぶつかる事なくプレイヤーが見えるところまで移動することができるってことです。
(この経路検索においては、移動コスト=マーカー間の距離になります)




ちなみにこの経路検索、なにも移動のためだけではないんですよ。
「音」の経路を設定するって使い方もあります。
移動するための経路検索のときと同様に、マップ上にノードとエッジを配置して、ノード間の距離(エッジの長さ)と障害物(音に対する障害物)によるコストを設定します。
ただし、この時のコストはキャラクターの移動コストではなく、音がよく通るかといったコストです。
例えば何もない場所や金網など音が素通りの場所は低コスト、閉じている扉や窓は中コスト、壁は高コストみたいに。
で、マップのどこかで音が鳴った時に、その音がプレイヤーまでどのような経路でたどり着くかってのを調べるんですよ。

そうすると、例えばプレイヤーの目の前の壁の向こう側で敵が吠えたとして、その音は壁からではなく開いている扉から聞こえてくる ってことができるようになります。
(まあ、これはガチ3Dなゲームの話なので本作にはほとんど関係無いんですが)


障害物関係無く効果音が聞こえるととてもやかましけど、それがゲーム性になってるケースもある


いつも思うことですが、普段当たり前のようにゲームで体験していることでも、裏では結構大変な思いをしているんですよね。

おそらくゲーム製作者あるあるだと思うのですが、ゲーム楽しむ以前に「うわ、これ作るの大変そう」とか「どうやってるんだこれ」って考えてしまいます。

かつてはただ遊んでいるだけだった、大昔のゲームを最近改めて見たときも同じように思うことがあります。


単純な物量は分かりやすいんですけど、実際に自分で作ってみて初めて分かる謎技術の恐ろしさ。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Heliodor 2020/11/11 19:24

ゲームシーンの管理

ゲーム内には様々なオブジェクトが存在します。いえ、ヘヴィーな兵器ではなく。

プレイヤー、敵、地面、ブロック、背景の木、エフェクト、アイテムなど分かりやすく目につくものから、飛び散る火花やイベントボックス、3Dゲームであればキャラクターの体を構成する各パーツや武器、ゆらゆら動く鎖の一つ一つの輪もそれぞれ個別のオブジェクトになってる場合もありますから、一つのシーンの中にそれこそ何千、何万個ものオブジェクトがあるわけです。
で、この膨大な数のゲームオブジェクトをどうやって管理するかが問題になるわけですが、まあ普通はツリー構造を使いますよね。


あやかし紅白戦の開発画面で見るオブジェクトとツリー構造(画像左のリスト)。
この程度の2Dゲームでも、もはやパッと見では何が何やら。


ゲームオブジェクト同士で親子関係を設定できるようにして、どのオブジェクトがどのオブジェクトに従属しているかを示していきます。
例えばキャラクターならば、まず一番上位に腰があって、その子として頭・腕・足・胴体があり、腕の子として手が、足の子として足の先がある(余談ですけど、足首より先の部分(靴で隠れる部分)を一発で表す言葉って無いですよね)という感じです。

子は親に追従する(親をどんなに移動回転させても、親子間の相対位置は変化しない)ため、腰が動けば腰につながるすべての部分が一緒に動き、腕が動けば、その子である手も一緒に動きまます。

これをゲームシーン全体に拡張すると、地面の子として木や家があり、家の子として煙突パーツがあり、煙突パーツの子として煙パーティクルを作っておく、といった感じになります。これは単にグループ分けしたい、という場合にも使えて、例えば敵キャラクターをまとめておくためのダミーオブジェクト "Enemies" を用意しておいて、敵をキャラクターを全て "Enemies" の子として生成しておくといった使い方です。

全ての敵キャラを削除したければ、敵を一つ一つ削除するのではなく "Enemies" を1個削除するだけで、自動的にその子である敵キャラも消えるというわけです。フォルダを一つ削除するだけで、その中身が自動的にすべて消えるのと同じですね。



ところでヴィータ大脱出を作った時、その初期段階ではツリー構造による管理を採用していませんでした。
オブジェクトはすべて対等で親子関係がなく(言わばフラットな状態)、オブジェクト同士の関係などはすべてタグで管理していました。


あやかし紅白戦と比べると、まだシンプルな構造だったヴィータ大脱出

昔使った画像管理ソフトで、フォルダ分けという概念が存在せず、タグだけですべての画像を管理するというものがありました。

例えば「旅行アルバムA」を作りたい場合、普通なら「旅行アルバムA」というフォルダを作って写真を入れるわけですが、そうではなく、写真に対して「旅行アルバムA」というタグを追加するわけです。更に「食事」とか「旅館」とか、複数のタグ付けをしておけば、それぞれのタグでも検索できるわけです。


しばらくはこの方法で問題なかったのですが、開発が進んでいって扱うゲームオブジェクトの数が多くなってくると、とんでもなく扱いにくくなったのです。どのオブジェクトがどのオブジェクトに依存しているか、みたいなことがツリーという単純な形で可視化できないので、全く把握できなくなってきたんですよね。

それで結局ツリー管理方式に変更して、直感的に親子関係を設定できるようにしました。前述の画像管理ソフトも評判が悪く、後日フォルダを導入していたということです。

広く一般的に使われているということは、それなりに選ばれる理由があるということですね……。


タグで管理は画期的だと思ったんですけどねぇ。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Heliodor 2020/11/03 18:22

進捗確認版2の不具合修正しました

先日公開した「あやかし紅白戦・進捗確認版2」の不具合を修正しました。


ver 0.71
・パワーアップ状態で、プレイヤーの表示がおかしくなる不具合の修正
・ゲームオーバー時の挙動がおかしかった問題の修正
・その他、細かい不具合の修正


あくまで不具合の修正なので、未実装の部分(音声とか)はそのままです。
先月(2020年10月)、銀ベリルプラン以上でご支援頂いた方は同じ記事から再DL出来るはずです。
https://ci-en.dlsite.com/creator/59/article/387595


正直、操作がややこしいとか、特定の手順でしか倒せない敵めんどくさいとか、ボス強過ぎるって苦情来るかなーと思っていたんですが、(今のところ)そういうコメントやメールは無くてホッとしています。
とは言っても開発中の同人ACTゲーに手を出すような人は絶対只者ではない(偏見)ので油断できない


自分としては好きなもの、主にブルマードット絵、学園モノ、2Dベルトスクロールアクションゲーム、触手など……を好きなように大真面目に作っているのですが、どう考えても今時じゃない要素(主にブルマー以下略)ばかりなので「このゲームはあんまり売れないだろうなぁ」と覚悟していたのですが、想像よりも多くの方にご注目頂けているようで、本当にありがとうございます。

ブルマーとドット絵好きな皆様のご期待に沿えるよう、頑張ります。m(__)m



あやかし紅白戦現在製作中。
完成時期は未定です。

AYAKASHI KOUHAKUSEN
Now under construction.
The completion date is not yet determined.

3件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

5 6 7 8 9 10 11

限定特典から探す

記事のタグから探す

月別アーカイブ

記事を検索