文系忘備録

どこにでもいる文系大学生の忘備録です

MENU

【スマブラSP】VIP魔境入りしたのでこれまでにかかった時間などを公開します

みなさんこんにちは、今回はやっとスマブラSPのVIP魔境入り果たせたのでかかった時間などを書いていこうと思います!

2023/4/3時点で魔境3

かかった時間

維持できるかは別として魔境入り出来ました。
かかった時間はなんと1065時間でした!

これが早いのかはわかりませんが、ここに来るまでにスマブラを購入してから約一年と三か月かかりました。

戦闘力を上げるなら

そしてここまでVIPに潜ってわかったのは、時間帯である程度相手の強さが変わってくるということです。
個人的に深夜帯はどちらかというと強い人が多いイメージでした。
もし戦闘力をなんとしても上げたいという場合はそれ以外の時間を狙うのもありかもしれません。

【Unity】敵をロックオンしてカメラを追従させる機能を実装する【C#】【入門】

みなさんこんにちは。
今回は敵をロックオンする機能を現在開発中のゲームに実装していこうと思います。

カメラの設定

CInemachineの導入

今回はカメラにCinemachineというUnity公式のアセットを使うので、もしインストールしていない方はインストールしてください。

シネマシンを導入するとカメラと一体化します
ここでのFollowはカメラを追従させるか、
LookAtはターゲットを見続けるかになります、
そしてAimという項目を必ずGroupComposerに設定してください。

そして次に空のオブジェクトに画像のようにCinemachineTargetGroupをアタッチしてください。
そしてこの空のオブジェクトをさっきのLookAtとFollowに設定します。

このCinemachineTargetGroupのTargetの部分に入ってるTransformがカメラの対象になります。

このTargetにスクリプトからTransformを追加する場合は下のように行えます。
Using Cinemachine; を先頭に記述してから

[SerializeField] private CinemachineTargetGroup group;
void Start()
{
    // targetに追加 (transform,Weight,Radius)
    group.AddMember(transform,1,1);
    //targetから削除
    group.RemoveMember(transform);
}

そして現在のTargetを取得する場合は、

var targets = new CinemachineTargetGroup.Target[8];
targets = group.m_Targets;

敵を検知する

Physics.OverlapSphereNonAlloc

Physics.OverlapSphereNonAllocは球状の設定した範囲内のコリダーを見つけることができます。
使い方としては、

Collider[] colliders = new Collider[16];
int num = Physics.OverlapSphereNonAlloc(pos, 10, colliders, targetLayer);

のようになります。
引数は(円の中心位置のVector3,円の半径,検知したコライダーの配列,検知するコリダーのレイヤー(任意))
戻り値は要素の数を返します。

実際に使ってみた

これらを使って実際に開発中のゲームにロックオン機能を実装してみました。
https://studio.youtube.com/video/3CTx4dN81o8/editwww.youtube.com

【Unity】バカゲーの格闘ゲーム作ってみた&UnityRoomで公開してみた!


unityroom.com


制作期間約一週間
使用アセット:
https://assetstore.unity.com/packages/3d/environments/dungeons/lite-dungeon-pack-low-poly-3d-art-by-gridness-242692
Quaternius • Animated Man Pack

格闘ゲームには初挑戦なのであまり形にはなっていませんがいい経験になりました。
友達の血液型同士が殴り合ったら面白そうという漠然としたアイデアからですがどうにかなってよかったです。

苦労した点

敵AIの実装

NavMeshにしようか迷いましたが、結局のところRayCasterで距離を取得→近ければランダムで攻撃、遠ければ近づく
といった方法に落ち着きました。一つ一つのアクションにはコルーチンで遅延をかけており、敵のレベルを上げるごとにその遅延を減らしていくという風になっています。

課題点

モバイル対応が甘かった

InputSystemを導入し、本来はタッチ操作でもできたはずなのですが、解像度やキャンバスの設定が甘かったようで、UnityRoomでは現在進行形でバグり散らかしています。詳しくは分かりませんがUnityRoomではスマホ表示した際に強制的にフルスクリーンに近い形になるようです。

【Unity】シーン遷移後のEnhancedTouchのイベントエラーの解消法【C#】【input system】

今回はシーン遷移したあとに同じシーンを読み込むとEnhancedTouchがヌルポを吐いてきたので、その対処法について忘備録として書いていこうと思います。

ありがちなパターンとしては、
バトルシーン(EnhancedTouch初期化)

タイトルシーン

バトルシーン(ここでエラー(Null Refference))

対処法(おそらく正しい書き方)

private void Start(){
    // イベントを登録
    Touch.onFingerDown += OnFingerDown;
    Touch.onFingerMove += OnFingerMove;
    Touch.onFingerUp += OnFingerUp;
}

private void OnDisable(){
    // イベント登録解除 (これを書かないと参照エラー)
    Touch.onFingerDown -= OnFingerDown;
    Touch.onFingerMove -= OnFingerMove;
    Touch.onFingerUp -= OnFingerUp;
    EnhancedTouchSupport.Disable();
}

private void OnEnable(){
    EnhancedTouchSupport.Enable();
}

一度解除しないと同じシーンを読み込みなおした時に前のシーンを参照しようとしてエラーになるみたいです。
本当はEnhanced touchはゲーム起動時に読み込んで使いまわすのがいい感じみたいです。

Realtime Databaseでユーザーのオンラインを検知する(プレゼンス)【Firebase】

今回はFirebase Version9のrealtime databaseでプリゼンスを取得してみようと思います。
ネットにおいてあるものはfirebase公式のものは大体Version8で記述されていたので大変でした。

var isOfflineForDatabase = {
    state: 'offline',
    last_changed: serverTimestamp(),
};

var isOnlineForDatabase = {
    state: 'online',
    last_changed: serverTimestamp(),
};

var userID;
var userStatusDatabaseRef;


    userID = auth.currentUser.uid;
    userStatusDatabaseRef = ref(window.database,'/status/' + userID);
    
    onValue(ref(window.database,'.info/connected'), function(snapshot) {

    if (snapshot.val() == false) {
        //データが存在しない
        return;
    };
   
   //さきにオフライン時の処理を実行する
    onDisconnect(userStatusDatabaseRef).set(isOfflineForDatabase).then(()=>{

        // オンライン時の処理、リアルタイムデータベースに書き込み
        set(userStatusDatabaseRef,isOnlineForDatabase);
    });
    })

この処理によって実際にユーザーがページを現在開いているか取得できます。
スマホなどのスリープなどでもオフラインになります。

【スマブラ】ロイ・クロムの弱空後の効果的な練習方法

2023/1/31現在 ロイ戦闘力:1241万

弱空後の出し方

弱ヒット後に
移動方向にダッシュ→反転→ジャンプ→空後(Cステがおすすめ)
というのが基本的なやり方になります。
たまにアタキャンというのを紹介している人がいますが、アタキャンで出すと小ジャンプでしか出せなくなるので確定範囲がかなり狭まります。

練習方法

段階を踏んで練習する

1.反転ジャンプ


最初はその場で反転ジャンプを出せるように練習しましょう。
移動スティックの動きとしては(右向きの場合)、

⇒(はじき) ⇐ ジャンプ

となります。

2.空後を出す

Cステの場合攻撃したい方向に出すだけなので簡単です。
移動スティックとAボタンで出す場合は体感少し遅れる?上に移動スティックの動きがさらに忙しくなるので無難にCステをおすすめします。
Cステを普段使わない場合はここで慣れておきましょう。

3.実際に当てる


確定帯はかなり広くアイスクライマーなら40%からでもコンボカウンターが回ります。
そのため低い%から高い%まで練習して、小ジャンプと大ジャンプどちらでも出せるようにしておきましょう。
特に撃墜するときは大ジャンプになることが多いので大ジャンプは絶対に出せるようにしておきましょう!
※アタキャンの場合はここで大ジャンプが出せなくなりそうです。

左右どちらも練習する方法


+ボタンからCP数を2にすると左側にも出せます。

定期的に練習しよう!

僕自体最近他の剣キャラにはまっていてふと専用部屋でロイを使ってみると、左側で弱空後が全くでなくなっていたのでびっくりしました。
完全にコツを忘れてしまうとまた一からになるので、定期的に練習してコツを忘れないようにしましょう!

【ラズパイ】ボタンがうまく反応しない時に勘違いしてたこと【PICO】【Python】

こんにちは。
今回は忘備録としてうまくボタンが反応しなかったときにずっと勘違いしてたことについてです。

from machine import Pin
import time

button = Pin(22, Pin.IN, Pin.PULL_DOWN)

while True:
    if button.value() == 1:
        print("pushed")

ここまでは普通なんですが実は
GPIO->ボタン->GNDではなく
3v3out->ボタン->GPIO
にする必要があるらしいです。

参考:
https://forums.raspberrypi.com/viewtopic.php?t=323785

他のラズパイ記事 - SSD1306
dntf.hatenablog.com