Unityでジャンクゲームを作っているっぽい

会社帰りにGPD PocketにUnity入れてゲーム作ってます

【アクツクMV】04_近接攻撃を作る

方向性

近接攻撃は、飛ばない弾を作るイメージで用意できそう

  1. アニメーション作る
  2. オブジェクト作る
  3. プレイヤーで制御する

アニメーションを用意

弾と似たような感じで
無限ループにはしない
今回は、見た目は弾で、ちょっとだけスケールアニメで伸ばしてみた。パイルバンカー的なw

オブジェクトを用意

オブジェクトの設定

モーションを設定
プレイヤーグループ扱いでOK

基本設定

いつもの感じで、設定していく

移動とジャンプ

弾は移動してほしくないので、左右移動量をゼロにする

アクションプログラム

構成的には、攻撃時(wait)と表示消す(destroy)とリンクで構成

攻撃時(wait)

モーションは、さっき用意したものを設定しとく
重力の影響は無効にする
その他の実行アクションは(今の時点では…)不要

表示消す(destroy)

その他の実行アクションで「オブジェクトを消滅する」を設定するだけ

リンク

その他の条件設定で「モーションの表示がすべて終わった」を設定

これでオブジェクトの設定はOK

プレイヤーで制御する

弾の設定

弾002を作って、近接用とする
設定自体は、弾丸とほぼ同じ

アクションプログラム

近接攻撃用のアクション(melee)を用意して、とりあえず待機と繋げる

アクション(melee)の中身はこんな感じ

モーションは、仮で射撃モーションをアサイ
その他の実行アクションでさっき作った弾の設定を使用

リンクの設定

待機→melee

空いているボタンを設定して、攻撃する

melee→待機

モーションの表示が回ったら、待機に戻る

これで動くようになった
youtu.be

【アクツクMV】03_enemyを作る

playerのmorionを複製、右クリックから「アニメーション設定」を開いてenemy画像に変更
playerと同じ画像サイズであれば、特に変更しなくて使えるはず
画像が違う場合はイチからデータ作るのではと予想

↑なんかコレをすると敵が消えない…
アニメーションタブから新規アニメーションenemy1を追加
playerのwalkと同じようなモーションを作る

enemyオブジェクトを作る

こんな設定でenemy1を作成。さっき作ったアニメーションを設定している

waitアクションを用意

名前とアニメーションを設定したぐらい

オブジェクトの基本設定

とりあえずHP=1で。無敵系の設定を無効化する

destroyアクションを用意

消滅用アクションなので、アニメーション無しで良さげ
その他の実行アクションに「オブジェクトを消滅する」を設定

リンクする

その他の条件設定に「体力が0」を設定

試しにシーンに置いて見たら、おおー破壊できた
youtu.be

【CorgiEngine】タイムのカウントダウン

スコアアタック用のカウント

テキストを配置

スクリプトを用意

Level直下にスクリプト用意してみる
↑で配置したテキストオブジェクトをセットしておく

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class CountTimer : MonoBehaviour{
	public float CountDownTime;	//カウントスタート値
	public Text TextCountDown;	//テキストオブジェクト設定用

	void Start(){
		CountDownTime = 60.0f;	//スタート値設定
	}

	void Update(){
		TextCountDown.text = CountDownTime.ToString("f3");	//f3 = 小数3位まで表示
		CountDownTime -= Time.deltaTime;			//カウントダウン
		//0.0以下になった時処理
		if(CountDownTime <= 0.0f){
			CountDownTime = 0.0f;
		}
	}
}

カウントダウン値を敵を倒した時に取得してスコアを変動させたい

早く倒せば得点が高くなるみたいな
Health_Enemy.csを改造すれば良いかも
まずは変数を追加

private GameObject countDownObject;	//CountTimerオブジェクトを入れる用
CountTimer countTimer;			//CountTimerスクリプトを入れる用
private int addTimeScore;		//intにcastしたもの入れる用

得点発生部分で加算してあげる

if (PointsWhenDestroyed != 0){
	countDownObject = GameObject.Find("CountTimer");		//CountTimerを検索して取得
	countTimer = countDownObject.GetComponent<CountTimer>();	//↑のオブジェクトからCountTimerスクリプト取得
	addTimeScore = (int)countTimer.CountDownTime;			//↑のスクリプト内の変数CountDownTimeをintにcast
	//トドメ攻撃の判定
	if(hitObjectName == "PlayerWeapon2(Clone)DamageArea (UnityEngine.GameObject)"){
		meleeScore = meleeScore + addTimeScore;				//破壊時にボーナススコアを加算
		CorgiEnginePointsEvent.Trigger(PointsMethods.Add, meleeScore);
	}else{
		shotScore = shotScore + addTimeScore;				//破壊時にボーナススコアを加算
		CorgiEnginePointsEvent.Trigger(PointsMethods.Add, shotScore);
	}
}

なんとか基本は出来た

youtu.be
射撃攻撃で倒すと今まで10点なんだけど、カウントダウンの数値が加算されてます

【CorgiEngine】ゴール処理

今まで通り、MMSceneLoadingManager使用してscene遷移していたのだけど
なんかトランジションが綺麗に繋がらなくて…悩んでいたら…
サンプルに答えが!!
ゴールにしたいパーツにFinish Levelをアタッチするらしい
設定はとりあえず↓な感じ
これでplayerが接触すればFinishLevelのLevelNameに設定したsceneに遷移できる
もちろん、フェード系もチャント動いた
BoxCollider2DはisTrigerにしておく

ちなみにフェードの設定はLevelMamagerに用意されている

いい感じ
youtu.be

【CEtest3】06_CorgiEngineでmelee攻撃のmotion再生

Melee攻撃のmotion再生が上手くいかない

なんでか、Melee攻撃motionが最後まで再生されない
どうも、Idleに遷移しているように見える
Web検索すると、どうやらUnityのAnimatorの設定が重要らしい
全部、見直してみる

motionを用意

いつも方法でパラパラアニメを用意

Unityで2Danimationのプレビュー方法

なんでかプレビューできないのですが、見る事ができるそうです
便利~
tsubakit1.hateblo.jp

motion遷移用のflagを用意

近接攻撃武器プレハブ内に設定
攻撃開始時にmotionを再生させたいので
StartAnimationParameterにflagを用意
flag名は任意の名前でOK。今回はMeleeとする

playerのcontrollerに追加

図のようにAnyStateと接続
Parametersにも↑で設定したflagを追加

各Transitionの設定

ここからが重要っぽい

AnyState > Idle

Has Exit Timeにチェック入れる
Conditionは設定しない。これで、Melee攻撃motionからすぐにIdleに遷移しなくなる

AnyState > Walking

Has Exit Timeのチェックは外す
ConditionはWalkingでtrue設定

AnyState > JumpAndFall

Has Exit Timeのチェックは外す
ConditionはJumpingでtrue設定

AnyState > Dashing

Has Exit Timeのチェックは外す
ConditionはDashingでtrue設定

AnyState > Melee

Has Exit Timeのチェックは外す
ConditionはMeleeでtrue設定

motionは仮なので変だけど、最後まで再生できた
youtu.be

Melee攻撃中は移動できないようにする

Melee武器に設定できる所あったよ

【アクツクMV】02_playerに弾を撃たせたい

というか、オブジェクト作るまでの手順が微妙にわからないのでメモ

  • 基本的な流れ
    • 画像登録
    • アニメーション設定
      • 当たり判定系を1フレームで設定
    • オブジェクト設定
    • playerに弾として設定

弾の画像を用意

とりあえず16*16に入るように弾の画像を用意して登録する

弾のアニメーションを用意

新規アニメーションbulletを作る


player_bullet1というアニメーションを作る

1フレーム目に壁判定、当たり判定、攻撃判定を見た目に合わせて設定
中心点も画像の真ん中に移動しておく

弾オブジェクトを作る

右下アイコンから新規オブジェクトを作成

用意したアニメーションを設定
プレイヤが撃つ弾なので、プレイヤグルーブで良いはず

弾のmoveアクションを作る

たぶん、弾が動いているときステータス
重力無効にしておく

弾のdestroyアクションを作る

たぶん、弾を消すステータス
重力無効にしておき
オブジェクトを消滅する、を設定する

moveとdestroyをリンクでつなげる

条件を追加していく。方向はすべて指定でいいと思う

弾の基本設定を変更

消滅後の復活条件ってやつがアクツクの独特な仕組みらしいので
とりあえず「無し」にする

playerの射撃用モーション作成

といってもwalkモーションを複製して無限ループしない。
接続点を1フレーム目に用意しておく
ここも左右の向きを用意しておく

playerのアクション追加

射撃というアクションを追加。先ほどのモーションをセットしておく

弾の設定を追加

歯車アイコンから弾の設定を追加すると、スイッチ管理の隣に追加される

弾の設定をする

とりあえずチュートリアルに沿って似たような設定しておく

playerの射撃アクションに実行アクションを追加する

「その他の実行アクション」で「弾を発射」を選択
弾の設定をアサイ

リンクを設定する

待機から射撃へのリンク

ボタン入力されたら遷移するようにする

射撃から待機へのリンク

playerの射撃用モーションが終わったら遷移するようにする

これで基本的な射撃が出来た
ジャンプ中も攻撃できるようにしておこう

【アクツクMV】01_player作って動かしたい

空のプロジェクトを作る

もう低解像度なドットで良いのだ

player画像作る

まずは2コマ程度の歩きモーションを作る
16*16でよいのだ
攻撃とかもコレを使いまわすで最初はいいと思うなど

アクツクに素材を読み込む

ここがちょっと悩むというw
素材タブを選択後、左下の画像を追加アイコンから、playerの画像を追加する

追加されたので、横方向を2分割設定にしておく。ここは保存とかそういう操作は不要みたい

アニメーション作る

公式っぽい動画を参考にしてみた

www.youtube.com

新規アニメを作る

アニメーションタブを選択後、左下のアニメーションを追加アイコンから新規アニメを作る

アニメーション名をplayerにして、分割数設定
細かな状態の名前は、この中で別に設定していくはず

下図のモーション001って表示されている所を選択してwalkに変更、無限ループにする

表示方向は、自動生成にしてみる
表示方向は、左右をちゃんと用意する。でないと射撃攻撃とか上手く動かない恐れがある

表示データは、反転表示機能を使えばOK

フレーム部分は、ちょっと独特
  • キーフレーム毎に使用する画像を設定できる
  • キーフレーム追加は、上のフレーム部分でもいいし、下のタイムラインで追加してもよい
  • キーフレーム単位で表示フレームを設定できる

とりあえず、2コマのアニメーション作った

あたり判定系のサイズ調整は、タイムラインのキーフレームを選択すると設定できる

表示の中心点は足元にしておくの忘れないように

オブジェクトを作る

アニメーションができたので、オブジェクトにしてシーンに配置できるようにする
オブジェクトタブを選択して、左下のオブジェクト追加アイコンから新規オブジェクトを作る
名前つけて、アニメーション設定して、コントロール出来るにチェックを入れる

おおー基本的なアクションプログラムが出来た

シーンを作る

背景画像を用意する

とりあえず、適当に仮データを用意してplayerの時みたいに登録する
タイルタブに移動して、新規でタイルを作る

16*16を最小単位にしているので
選択して、全部壁にしとけば、とりあえずOK

これでタイルデータはOKかな

新規シーンを作る

シーンタブに移動して、左下のアイコンから新規シーン作成
さっき作ったタイルセットを追加するのを忘れないように

タイル並べられた!!

小さなオブジェクトタブでplayerを選択して、シーンに追加する

ジャンプしない…

ジャンプ入力の設定はリンクの所にあった

ここで「Xボタン」が設定されている。
キーアサインは、設定 → 操作キー管理 で確認できる
キーボードのA入力でジャンプする

これで、最低限動くことができた
youtu.be