221Games開発記録

痔と腰痛に苦しみながらゲームを作った記録

第十四話 生存報告②

ハウディー!(生存報告)

被災地のいち早い復興と亡くなられた方のご冥福をお祈り申し上げます。

 

unityroom様の

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

に出ました。

 

これです

アツクテシヌデチ | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

プレイ動画

www.youtube.com

 

開発に関する記事でも書こうかと思いましたが大した事はしていないのとマラッカ海峡とセイロン島の平定、さらにライン演習作戦への参加などで忙しいので多分書きません。需要があれば書くかもしれないので気になるところあったら聞いてね。

大したゲームではないのですが29時間くらい停電したのを徹夜でなんとかして納期ギリギリで上げたクソゲーなのであそんでほしい。

 

おわり

第十三話 生存報告

 ハウディー!!!!(盆休み終了)

 

お察しの通りブログをサボっていましたがゲームはちょっとづつ作ったり作らなかったりしていた。目に見えんものを作ったりしていた(げーむの設計とか)ので目に見える動画を貼ってお茶を濁すでち。

youtu.be

youtu.be

youtu.be

 

以下、ゲームを作っているっぽい画像もといアトリエ殺人水上機の活躍をご覧ください。

かっこいいメカの画像(まだまだ増える予定だ!)

f:id:kaninoyokonov:20180819233502p:plain

塗装サンプル

f:id:kaninoyokonov:20180819233638p:plain

 

おまけ

ぼくが適当にかいた謎の設計図(なおこの通りにはならんもよう)

f:id:kaninoyokonov:20180819233958p:plain

苦しみをリストアップして苦しみを軽減した画像(?)

f:id:kaninoyokonov:20180819234042p:plain

 

おわりです。

第十二話 弾が出たり散ったり & 弾痕の実装

ハウディーーーー!

 

アレがこうなりました。

youtu.be

 

なので、なんか書こうと思います。

 

弾が出る

大体何書いても弾出ると思うんで適当で良いと思います。今回は銃口が1つだったり2つだったりに対応できるようにしてあるけどそれくらい。以下は左手から弾出すやつ。プレイヤーキャラに装着するスクリプトの中に書く。

public float leftArmFireRate = 0.1f;//発射間隔

private float leftArmTime = 65535f;//左手用のTime

public GameObject leftArmBullet;//出す弾

public Transform leftArmBulletSpawnPos1, leftArmBulletSpawnPos2;//弾出る位置

void LeftArmFire() {//左手から弾出る

if(Input.GetMouseButton(0)) {//左クリック中に

if(leftArmTime >= leftArmFireRate) {//TimeがFireRate以上になったら(TimeはUpdate関数内で増えているよ!)

Instantiate(leftArmBullet,leftArmBulletSpawnPos1.transform.position, leftArmBulletSpawnPos1.transform.rotation);//弾が出る

if(leftArmBulletSpawnPos2 != null) Instantiate(leftArmBullet, leftArmBulletSpawnPos2.transform.position, leftArmBulletSpawnPos2.transform.rotation);//銃口2が無ではない時、弾が出る

leftArmTime = 0;//Timeをリセット

}

}

}

 こっちは弾に装着するスクリプト。Start関数でRigidbodyにAddForceすれば生まれた瞬間に飛んでく。Speedはお好みで。

public float Speed = 65535f;//弾速

void Start() {
gameObject.GetComponent<Rigidbody>().AddForce(transform.forward * Speed, ForceMode.VelocityChange);//力加える

 こんな感じに書くとこれだけで弾が出て前に飛んでいく。やったね!

弾が散る

必要だよなあと思ってだいぶ適当に作った。

その1

適当に思いついて作った奴。Scatterの大きさに応じてタテ方向とヨコ方向に力を加えて飛ばす。細かい事を気にしないならこれでもそれっぽく見えるけど…・

public float Scatter = 10f;//飛び散り力

void Start() {

float scatterX = Random.Range(-Scatter, Scatter);//ヨコ方向の飛び散り力をランダムに決定

float scatterY = Random.Range(-Scatter, Scatter); //タテ方向の飛び散り力をランダムに決定

gameObject.GetComponent<Rigidbody>().AddForce(transform.right * scatterX, ForceMode.Impulse);

gameObject.GetComponent<Rigidbody>().AddForce(transform.up * scatterY, ForceMode.Impulse);

gameObject.GetComponent<Rigidbody>().AddForce(transform.forward * Speed, ForceMode.VelocityChange); 

 結果がこれ。四角い!!!!

f:id:kaninoyokonov:20180725022126p:plain

その2

三角関数を使う。ぼくは数学無理マンなのでググって作った。

public float Scatter = 10f;//飛び散り力

void Start() {

float r = Random.Range(-Scatter, Scatter);

float theta = Random.Range(0, 360);

float scatterX = r * Mathf.Cos(theta);

float scatterY = r * Mathf.Sin(theta); gameObject.GetComponent<Rigidbody>().AddForce(transform.right * scatterX, ForceMode.Impulse);

gameObject.GetComponent<Rigidbody>().AddForce(transform.up * scatterY, ForceMode.Impulse);

gameObject.GetComponent<Rigidbody>().AddForce(transform.forward * Speed, ForceMode.VelocityChange); 

}

 結果がこれ。丸くなった。

f:id:kaninoyokonov:20180725022630p:plain

プログラム見りゃ分かる通り、「初弾は真っ直ぐ飛ぶ」だとか「えらく飛び散る奴が出る確率」だとかは実装してない。ゲーム作っていく内に必要そうなら加えるかもしれない。

弾痕を出す&くっつける

Unity で弾痕を表示する - dskjal

こちらの記事を参考にして作りました。

弾痕はこれ。Spriteです。

f:id:kaninoyokonov:20180725220644p:plain

弾痕オブジェクトを当たった物体の子にする事でくっ付けてる。

f:id:kaninoyokonov:20180725221138p:plain

親と子のスケールの問題があったけど弾痕の元のスケールと親オブジェクトのスケールを使って割り算したら何とかなった。

public GameObject Dankon;//弾痕オブジェクト

public LayerMask mask;//弾痕を表示したくない物体をマスク

public Vector3 defaultScale;//弾痕の元のスケール

void Start() {

defaultScale = Dankon.transform.localScale;//弾痕の元のスケールを取得

}

private void OnCollisionEnter(Collision collision) {

RaycastHit hit;

Ray ray = new Ray(transform.position - transform.forward * 1, transform.forward);

if(Physics.Raycast(ray, out hit, 10f, mask)) {

if(collision.gameObject == hit.transform.gameObject) {

Vector3 BulletHolePos = hit.point + hit.normal * 0.01f;

Quaternion BulletHoleRot = Quaternion.FromToRotation(-Dankon.transform.forward, hit.normal);

GameObject BulletHole = Instantiate(Dankon, BulletHolePos, BulletHoleRot, collision.transform) as GameObject;

float x, y, z;//弾痕の親と弾痕の元のスケールを使って割り算

x = defaultScale.x / BulletHole.transform.parent.transform.localScale.x;

y = defaultScale.y / BulletHole.transform.parent.transform.localScale.y;

z = defaultScale.z / BulletHole.transform.parent.transform.localScale.z; if(collision.gameObject.tag == "Jimen") {//テスト段階では地面が平たい板なので地面に着弾した場合弾痕の高さに地面の奥行を使う(????)

y = z;

}

BulletHole.transform.localScale = new Vector3(x, y, z);

Debug.Log(collision.gameObject.name + " / 弾痕出現!");

Destroy(BulletHole, 1000f);

} else {

Debug.Log(collision.gameObject.name + " / 弾痕出現せず!");

}

}

Destroy(gameObject);

 これで動いた。もちろん問題もある。オブジェクトの端に着弾した場合弾痕がはみ出る。つらい。解決策が欲しい。f:id:kaninoyokonov:20180725221516p:plain

プロジェクターという技を使って弾痕を表示する方法もあるようなので試した方が良い。

 

以上!おわり!解散!

第十一話 何をしていたか

ハウディー!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

記事を書こうとは思っていたのですが作業をして満足してしまうので書いていませんでした。何をしていたかというと

これを作って

www.youtube.com

うごかして

www.youtube.com

これを作って

youtu.be

こうしました(モデル提供:アトリエ殺人水上機

youtu.be

 

今後仕組みについての記事を書いたり書かなかったりするかもしれません。いずれにしても大したことはしていないのであしからず!!!!

 

 

第十話 ProBuilderで作った物体をfbxとして出力してBlenderで開く

ハウディー!!!!今日も元気にProBuilder様は素晴らしいです。

 

ProBuilderで物体を作る

作った。

f:id:kaninoyokonov:20180706234649p:plain

FBX Exporterを入手する

アセットストアからゲットしよう!

assetstore.unity.com

エクスポートする

インスペクターからエクスポートしたいオブジェクト(複数可)を選んで右クリックすると素晴らしい機能が追加されているのでExport to FBXを押す。

f:id:kaninoyokonov:20180706235117p:plain

オプションが出るので設定する。Export FormatBinaryにしないとBlenderで開けないので注意してね!(初期状態ではASCIIになってるはず)

f:id:kaninoyokonov:20180706235405p:plain

Blenderで開いてみる

普通にインポートできた。マテリアルも付いてくるっぽい。

f:id:kaninoyokonov:20180707002530p:plain

でも宇宙的に邪悪なUVが展開されているのでお好みに合わせて調整してください。

f:id:kaninoyokonov:20180707000838p:plain

不要なUVマップは忘れずに始末しようね!(1敗)

f:id:kaninoyokonov:20180707000444p:plain

ここから先は各自色を塗ったり改造したりできると思う。今回はなにもいじらずにスマート展開してみたよ。

f:id:kaninoyokonov:20180707002847p:plain

 

みんなもProBuilderを使って現場モデリングをしよう!

おわり

 

 

第九話 伝えたいことがある

ProBuilder様はすばらしいです。

これは重心位置を物体の原点にする素晴らしいボタンです。

f:id:kaninoyokonov:20180705021755p:plain

これは物体のTransform三要素すべてを0,0,0に設定してくれる神のようなボタンです。

f:id:kaninoyokonov:20180705022006p:plain

ProBuilder様はすばらしいです。無料です。いますぐUnityをダウンロードして使いましょう。

blogs.unity3d.com

 

おわり

第八話 ProBuilder様は偉大です。

.Liveの14時間リレーの視聴中、手が暇だったので壺を5周したりUnity2018をインストールしたり牛巻にお便りを読んでもらってめっちゃビビったりしていた(ありがとうございました)。ついでにProBuilderで遊んだのでちょっと書く。

 

ProBuilderって何

これ

assetstore.unity.com

Unity2018から標準装備になったそうなので、AssetStoreに取りに行かなくてもパッケージマネージャという項目から装備する事もできる。

つくった

説明書を読まずに作業した。こういったメカを作るなら普通にBlenderやCADソフトを使った方が早いんだろうけど、なんでも作れるよという事で…。

f:id:kaninoyokonov:20180701004722p:plain

悲しみ

あれ~おかしい。

白いCubeが世界の中心に存在してるんだけど、コックピットの部品の座標を0,0,0にして作業をしてたのにパーツの中心位置がおかしい。DOUSITE・・・?

f:id:kaninoyokonov:20180701005855p:plain

発覚

なるほど~~~~ProBuilderが生み出したCubeのピボット位置はここか~~~~~~~~。

f:id:kaninoyokonov:20180701010222p:plain

対策

というかProBuilderでキャラ作るなんてあんまり無いだろうから割とどうでもいいんだろうけど一応どうすりゃいいのか書いとく。

ProBuilderが産み落としたCubeのTransformをいじって、良い位置に置いたらCenterPivotを押す。

f:id:kaninoyokonov:20180701011011p:plain

すると今の座標が0,0,0になる。やったぜ。でもミラー機能を使う事があるならやらない方が良いかも。というかそういうのを作るならBlenderを使え!

ProBuilder様はすばらしいです。

冗談抜きですごい機能です。ちゃんと使いこなしましょう。

blogs.unity3d.com

 

おわり