ホーム » takehata の投稿

作者アーカイブ: takehata

スチームチャレンジ244日目

おさらい。
今年の元旦に立てた目標がありました。
1年間でゲームを完成させて、スチームでゲームをリリースする。
というものでした。
ヒットするかどうかは、横に置いといて、ゲームを完成させることぐらいはできるんじゃないかと、色々やってきていました。

当初は3Dゲームを作るつもりだったけど、こっちはまだ勉強してから挑みたい。最近はコーギーエンジンに夢中になってるので、2Dアクションでこのまま突っ切ろうかと思ったりしてる。

とりあえず完成させることが目標なんだ。
あと4ケ月しかないが、できることをやりたい。

それで、今は色んな行動パターンを作っているところ。

CorgiEngineを、2週間ぐらい使ってみての感想。

2Dアクションゲームのテンプレが、そのまま自分のものにできるのは美味しい。
誰かにオススメできるかどうか聞かれたら、人にもよるなぁという印象。
テンプレを改造してって形にするのが好きな人向け。
Unity標準の機能も知ってる必要もあるし、独自ルールを覚えなきゃいけない。
そこさえクリアできたら無双できるツール。と思った。

▲タイルマップとスプライトアニメーションはUnity標準の機能。
自分はその辺りの知識がなかったので、覚える必要があった。

CorgiEngineの情報があるところと覚書

2Dアクションゲームが作れるアセット。
2Dアクションの基本はだいたい網羅されてて、カスタマイズもできる。
いつもアセットストアの目立つところにあるので、きっと良いものに違いない。
気になって購入した。

今は、使い方を覚えようと情報集め中。
CorgiEngineの情報があるところメモしたよ。

◆公式ドキュメント

◆公式YouTube

◆CorgiEngine-1-とりあえず使ってみる/げんとめブログ

◆Corgi Engineを勉強中 Part.1〜最小のシーンを作る

◆Unity&CorgiEngineを使ったアクションゲーム作り ~アニメーションと当たり判定①~

◆Corgi EngineのNPCのAIを細かく砕く


とりあえずやってみたこと。

●MinimalLevelという最低限必要なものだけがあるシーンがあり、それをコピーする。
●キャラクターを追加するのは、任意のゲームオブジェクトに「Character」というコンポネートを追加。それをプレイヤーとして使いたい場合は、コンポネート内の「Autobuild Player Character」それ以外のAI(敵とかNPC)にしたい場合は、「Autobuild AI Character」を押す。
●色んな能力が追加されるので、いらないものを外したり、変更したりでオリジナルのキャラクターにしていく。
英語なのがネックなだけで、欲しい能力はチェックして、変更したい場合は数値をいじったり、いらないのは外すという素直な作りなので、理解しやすいと思う。

ジェットパックがいらないと思ったら「Character Jetpack」のチェックを外せばいけました。
デフォで2段ジャンプだったので1度でいいと思ったら、「Character Jump」の中の項目「Number Of Jumps」の数値を1に変更したらOKでした。
落下中ジャンプができてしまうのをできないようにしたいと思ったら、「Character Jump」の中の項目「Jump Restrictions」の選択タブを「Can Jamp On Ground」にしたらできた。


とりあえずやってみたのはここまで。
どんな機能があるのかは、学習中であります。

Unityリフト移動

Unityでつまずきやすいポイントのメモ。
移動するリフトに乗っても、プレイヤーは移動しない問題。
床だけが移動するリフトというのも面白いけど、一緒に動きたい場合は、
リフトに乗っている間だけ親子関係にするとよい。
子供のオブジェクトは、親の動きと同期する。

↓の記事が詳しく載っていました。
Unityで動く床を実装するときにハマる罠とその解決方法

これの応用で、接地している間だけ、リフトの形状を変えたり、動きを変えたりもできる。

タグの種類を増やしてって、リフトの種類も増やせる例を作ってみた。 コードは乗る側、タグはリフト側で設定。
void OnCollisionEnter(Collision col)
    {
        //接触した相手のタグが"LiftA"場合、その子供になる
        if (col.gameObject.tag == "LiftA")
        {
            transform.SetParent(col.transform);
        }

        //接触した相手のタグが"LiftB"場合、相手のサイズを変える
        if (col.gameObject.tag == "LiftB")
        {
            col.transform.localScale = new Vector3(20, 1, 5);
        }

     }

    void OnCollisionExit(Collision col)
    {
        //接触が終わったとき元に戻す
        if (col.gameObject.tag == "LiftA")
        {
            transform.SetParent(null);
        }

        if (col.gameObject.tag == "LiftB")
        {
            col.transform.localScale = new Vector3(5, 1, 5);
        }
    }
    

Unity覚書 二次配列のマップ

Unityで二次配列を使ってマップを作るやつ。よく忘れるのでメモ。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MAP : MonoBehaviour
{
    public GameObject kabe;
    public GameObject jimen;
    public GameObject st;


    int[,] map = new int[,] {

        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 
        { 1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1},
        { 1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1},
        { 1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1},
        { 1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1},
        { 1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1},
        { 1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1},
        { 1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,1},
        { 1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1},
        { 1,0,1,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1},
        { 1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,1,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
        { 1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,0,0,0,0,1,0,0,0,0,0,0,1,1,2,1,1,1,1,1,0,0,0,1},
        { 1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1},
        { 1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1},
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},

    };


    // Start is called before the first frame update
    void Start()
    {
        
        for (int i= 0;i< 24; i++){
            for (int j = 0; j < 24; j++)
            {

                if (map[i,j] ==0) { Instantiate(jimen, new Vector3(i * 1, 0, j * 1), transform.rotation); }
                if (map[i,j] ==1) { Instantiate(kabe, new Vector3(i * 1, 1, j * 1), transform.rotation); }
                if (map[i, j]==2) { Instantiate(st, new Vector3(i * 1, 0, j * 1), transform.rotation); }
            }
        }
    }


    // Update is called once per frame
    void Update()
    {
        
    }
}

ラストオブアス2をクリアした感想(ネタバレ注意)

※ネタバレ注意です。クリア後に読むことをオススメ。

自分なりの妄想を含んだ感想です。

敵側にも、色々事情があって、想い合う仲間がいる。
血が通った、同じ人間なのだ。
そういうのを徹底した結果がこんな恐ろしいゲームになってしまった。
敵は悪者ではないが、どうしても憎いし許せない。ぶっ殺してやる。
そういうゲームだった。

エリーもアビーもお互いの大切に想う仲間が殺されて、憎しみを増幅させるたびに、周囲の誰かが死んでいく。

エリー側に感情移入してるので、どちらかというとエリーを応援していたので、中盤以降アビーに主人公交代することに面食らったし、ショックだった。

アビー視点でスタートすると、エリーに仲間たちが殺されていくのを見せつけられる。最終的には、エリーと対峙し、エリーを倒す方向に話が進む。

ここが、自分の中でモヤモヤしたポイントでした。
主人公の目的と、プレイヤーの目的が一致しなくなるのだ。
アビー操作をミスして、ゲームオーバーになった時、これが結末でもいいのでは? という考えが頭をよぎる。
エンディングを迎えるよりも、あるタイミングでアビーが命を落としてくれたほうが、マシな結末になるのだ。

でもゲームは進めたい。
ゲームを進めたいので、アビー視点で、エリーを倒さなきゃいけない。
何でプレイヤーにエリーを殴らせてるんだろう?
訳が分からない。

再びエリーに主人公交代したときは、安心したが、これはこれで複雑な気持ちになった。
この頃にはアビーは憎い相手ではあるけど、悪者ではないということに気付いてしまうからだ。
もしも、アビーが極悪人だったなら、喜んで復讐に進めるのに。

それをわかってのことか、エリーはアビーに対して不思議な行動をとる。

放っておけば死ぬ状況のアビーの命を救い出し、それから決闘を申し込むのだ。
決闘を申し込んでおいて最後トドメを刺せるタイミングになって、中断する。
ジョエルに対して放った「許せないけど、許したい」という言葉がここに重なってくる。

面白かったかと聞かれると、答えに迷うゲームだが、遊んでよかったゲームではある。

ジョエルとエリーに感情移入していたので、ふたりには幸せになって欲しかったが、そういうゲームではなかった。特効薬を見つけてハッピエンド、そういうのだったらいいなと思ったが、そんなお花畑な考えはすぐに吹き飛ぶ内容でした。

3が出ることがあれば買いたいが、さらに過酷な内容のゲームになりそうで怖いな。

ゲーム完成できない病からの脱出

頭に浮かんだゲームは神ゲーなのに、実際に作ろうとすると形にならない。
実力以上のことをやろうとしてたんだなと冷静になって考えた。

長編の超大作も作りたいが、コンパクトでカジュアルに遊べるゲームも合間に作って経験値稼ぎをしようと思ったのが6月の初めでした。

で、作ってみた。

神経衰弱にRPGの要素を加え、インド風味にした内容のゲームです。
3分ぐらいで遊べます。

今はなき「神経衰弱塔」っていうブラウザゲームの影響を強く受けて作ったものです。

「神経衰弱・インド編」ブラウザで遊べます。


ここで反省会。
ちょっとしたブラウザゲームを作るのにも一か月掛かってしまった。
作るスピードが遅いかもしれない。
思いついたアイディアはすぐに形にして、どんどんリリースするのを目標にしたい。

とはいえ、自分はゲーム作っているのに完成できない人間じゃないかと不安が膨らんでいたのが、その呪縛を解くことができたってのは収穫でした。

今はまだ、超凄いゲームは作れていないけれど、いつか超凄いゲームが作れるはずだと信じて、頑張ります。

千里の道も一歩から。
少しづつ進んでいけばいいんだと思いました。

マジックザギャザリングに差別問題の余波

少し昔に「ちびくろサンボ」という絵本があった。
絵本の内容は、虎が何故かバターになるというシュールな話で、差別的な表現はない。ただ、サンボという表現は、良くない言葉だったらしく、それに抗議が起こり、この絵本は世界から消えた。
そんなエピソードがあったことを、ぼんやりと思い出した。
その時と、似たようなことがさっき起こったからだ。

マジックザギャザリングというカードゲームで、7枚のカードが消滅することになった。
その理由が、差別的な表現があるカードだったからだそうだ。
どんなカードが禁止になったのか、どの部分がアレだったのか気になったので調べてみた。

※テキストはWikiから引用

Invoke Prejudice (青)(青)(青)(青)
エンチャント

対戦相手1人が、あなたがコントロールするクリーチャーと共通する色を持たないクリーチャー呪文を唱えるたび、そのプレイヤーが(X)を支払わないかぎり、その呪文を打ち消す。Xはそれの点数で見たマナ・コストである。

Cleanse (2)(白)(白)
ソーサリー

すべての黒のクリーチャーを破壊する。

Stone-Throwing Devils (黒)
クリーチャー — デビル(Devil)

先制攻撃1/1

Jihad (白)(白)(白)
エンチャント

Jihadが戦場に出るに際し、色1色と対戦相手1人を選ぶ。
選ばれたプレイヤーが選ばれた色のトークンでないパーマネントをコントロールしているかぎり、白のクリーチャーは+2/+1の修整を受ける。
選ばれたプレイヤーが選ばれた色のトークンでないパーマネントをコントロールしていないとき、Jihadを生け贄に捧げる。

Imprison (黒)
エンチャント — オーラ(Aura)

エンチャント(クリーチャー)
プレイヤーが、エンチャントされているクリーチャーの、その起動コストに(T)を含むマナ能力でない能力を起動するたび、あなたは(1)を支払ってもよい。そうした場合、その能力を打ち消す。そうしなかった場合、Imprisonを破壊する。
エンチャントされているクリーチャーが攻撃かブロックするたび、あなたは(1)を支払ってもよい。そうした場合、そのクリーチャーをタップし、戦闘から取り除く。この戦闘でそれによってのみブロックされていた、それがブロックしていたクリーチャーはブロックされていない状態になる。そうしなかった場合、Imprisonを破壊する。

Crusade / 十字軍 (白)(白)
エンチャント

白のクリーチャーは+1/+1の修整を受ける。

ざっと効果に目を通してみると、自分の色を有利にし、別の色を不利な状況にするものという共通点は見られる。
でもそれが理由だとすると、そういう類のカードはこの7枚に留まらず、大体のカードがそうなる。

あとマジックザギャザリングには5色の色があり、白は秩序と正義。
黒は狂気と死という、そもそものコンセプトカラーがあり、黒は邪悪な色という前提がある。それが、差別問題に触れるというなら、このゲーム自体の存続が危うい。

他のゲームではどうだろう。
属性を色で分けるものはあるが、闇属性は紫色が多かったりする。
配慮があってそうなってるわけではないと思うが、黒を避けるのであれば紫が妥当である。

結論。
いつ個人のゲームにも余波がくるかわからないので先手を打った方が良い。
個人でゲームを作る人は、エルフやゴブリンにも人権があることも思いをはせながら、闇属性に該当する魔法や技は、紫にしとくのがいいと思った。














スチームチャレンジ127日目

もう100日過ぎてる。
でも進捗は、いろんな壁にぶつかりまくりで、停滞している。
TPSゲームのテンプレアセットの、
「Third Person Controller Template」の力を借りれば楽ができると思ってたんだけどね。
確かにプレイヤーの操作やカメラ設定は、お任せであっさり完了できる。
ただ、武器の設定がめんどくさい。
武器の、手首や腕の角度などは、手動で調整していかないといけないのです。

こうやって動画で観ると、そんなに問題ないように見える。

でもよく見ると、添えてる手の位置がどうしても不自然になってしまう。
頑張ってやってはいるんだけど、その辺の才能がないみたい。

まあ、見た目が不自然なのを目をつぶれば、ゲームの進行には問題はないともいえる。見過ごすのも作戦のうちなのかも。

ピストルは不自然さが目立ったが、アサルトライフルはあまり不自然さは無かった。不自然さが目立つ武器を諦めて、そうでもないのでやりくりするのもいいかもしれない。

とにかく先に進みたいので、そうする。

スチームチャレンジ77日目

「Third Person Controller Template」というアセットを購入しました。
近接戦闘のプリセットが色々と用意してくれてるやつです。
あんまりスクリプトをいじらずにインスペクター上で完結するように設計されてるので、プログラム苦手でデザインに注力したい自分には合ってると思いました。

少し前に購入した「Camera Controller 」は、きめの細かい動きはやってくれるものの、システム構築は各自で頑張ってねっていうスタイルだったので、とにかく楽をしたい自分には合わなかったかもしれない。とにかく楽したい。
「Camera Controller 」 のほうは違う機会に、やるかも。

Character Creator3で作成した、キャラクターも無事にセットアップできました。

管理人

ハンドルネーム:タケハタ
本名:波田野剛望(はたのたけみ)

お絵描きとゲームが好きなオス。
2020年の目標は、スチームでゲームをリリースすること。