進捗報告2
お疲れ様です。
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
今月の進捗を書こうと思います。
ネットワークのキャラのアニメーションのレプリケーション周りわかって来た。今の所完全なるパターンを見つけたのでもう怖くない。僕らはもう一人じゃない
— ぶっさん (@Bussan_desu) 2017年9月24日
鯖とクライアントのアニメーションのテストをしていました。全然作り込んではいませんが・・・。大体処理方法は把握出来たので次はダメージ周りの調査をしようと思います。https://t.co/O1BbhcIA7O #EpicFriday
— ぶっさん (@Bussan_desu) 2017年9月29日
アニメーションに通知を入れてAnimNotifyでコントローラーのWidget出す関数を呼び出すとクライアントにすべてに同期されるので結局バインドで出すことに pic.twitter.com/h8iaC8Q3Vy
— ぶっさん (@Bussan_desu) 2017年10月19日
一応進めてます。
一応アニメーション同期周りやダメージ周りの検証を一通り終えたので少しづつ実装を行っています。最近メンタルが崩壊しかけたのでジムに通っているため進みが遅いです。あともう少し仕様を固めないと後々困りそうですね。
何か知見が出来たらまた記事にしようと思います。(ただネットワーク周りの説明がしんどいので思っているだけですが。)
てことで来月も頑張ります。
※協力してくれる暇人の方募集中です。
アイディア出しのブレインストーミングを一緒にしてくれる方など。
以上
進捗報告1
始めて一ヶ月が経ちました。
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
仮名をChaosOfWar。プロジェクトコードネームとして牛(Cow)と読んでいます。とっても変えたい。動画などでちょくちょくChaosのスペルミスがありますが、気にしないでください。学がないだけです。
進捗報告
行ったこととしてまずルームの作成、クライアントの参加の処理テストです。
一回目に通信成功した時にノートのエディタがクラッシュしたんだけどそれが悪さしてたっぽく再起動で通信できた....やっとスタートラインにこぎつけたぞ.... pic.twitter.com/ntsyL7bQjv
— ぶっさん (@Bussan_desu) 2017年8月18日
最低限のテストが出来ましたので、身体の色などを変更した場合にどういった処理を組むことにより同期が行われてるかのテストとなります。このことについては記事にまとめました。
次に行ったのはPlayerの操作権限を他のキャラクター、及びPawnに移した場合の検証となります。テスト方法としましてはバイクを用意し二人乗りの実装を行いました。
最後に、キャラクターの衣類の変更などが出来るような処理を作成しました。これはネットワークではなくルームの作成参加を行う前出来る機能となります。
CharacterCreate2から持ってきたモデルをMayaLTで髪、上半身、下半身、靴に分けキャラクターBPのコンポーネントに4つのスケルタルメッシュを設置し、そこにぶっこんでいく処理方法です。ネットワークの処理の組み方がめんどくさすぎてシングルプレイは楽に感じたのですが、素材のインポートがめんどくさすぎて辛い思いをしました。(服のスクショやらそれぞれの身体のパーツを持ってきたり・・・)
来月はアイテムや武器の取得及びそれに伴うアニメーションの検証を行います。
UI周りは作らないので素材インポートという面倒くさい作業もないためスピードは上がる気がします。
ネットワークの概念が理解できて来たのでトラブルが起きても冷静に対処。これが進化論における猿が棒を使えるようになるという事か....ウホウホ🐵🐵
— ぶっさん (@Bussan_desu) 2017年9月15日
ご期待下さい。
以上
サーバーとクライアント側のネットワークの同期~キャラの色の変更編~
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
やってます。
で、ネットワークの同期(PRC)がちょっとややこしいので得た知見をここに書きます。後々間違いに気づいて訂正するかも知れません。とりあえず出来たって感じで。
機能については詳しくかかないのでこれを見てください。
てことで色を変えます。
使用するもの
ThirdPersonキャラ
仕様
1を押すとServerだと赤、クライアントだと青に変更
エディター
プレイヤー数を1以上にするとネットワークのテストが出来ます。
サーバーとクライアントの色を変えます。
続きを読むUE4:[C++]ActionMappingの取得
アクションマッピングで設定したキーをC++で呼び出します。
色々と調べながらなのでアレかもしれません。動きはしました。
BPに慣れすぎるとコンパイル時間が長く感じますね。効率が悪い。
input.h private: UInputComponent* InputComponent = nullptr; void InputEvent(); input.cpp void UInput::BeginPlay() { Super::BeginPlay(); //入力を取得 InputComponent = GetOwner()->FindComponentByClass<UInputComponent>(); //取得できた場合の処理 if(InputComponent){ InputComponent->BindAction("InputMappings", IE_Pressed, this, &UInput::InputEvent); } // ... } void UInput::InputEvent() { UE_LOG(LogTemp, Warning, TEXT("入力ゲット!")) }
このブログはBPのみとしたいので近々他のブログに移すと思います。
UE4:C++にてLineTraceにてオブジェクトの取得
LineTraceでオブジェクトの名前をLogに出すメモです。
ActorComponentでC++を作成しPawnのコンポーネントに追加しています。自分の環境では動きました。
自分用メモなので参考にしないでください。いずれどこかに移します。
LineTrace.h private: float DirectLength= 1000.f; LineTrace.cpp #define OUT void ULineTrace::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); FVector PlayerViewLocation; FRotator PlayerViewRotation; GetWorld()->GetFirstPlayerController()->GetPlayerViewPoint(OUT PlayerViewLocation, OUT PlayerViewRotation); FVector TraceEnd = PlayerViewLocation + PlayerViewRotation.Vector()*DirectLength; FHitResult Hit; GetWorld()->LineTraceSingleByObjectType(OUT Hit, PlayerViewLocation, TraceEnd, FCollisionObjectQueryParams(ECollisionChannel::ECC_WorldStatic)); AActor* HitActor = Hit.GetActor(); if (HitActor) { UE_LOG(LogTemp, Warning, TEXT("LineTraceHit:%s"), *(HitActor->GetName())) } // ...
UE4:気になったノード達(不定期更新)
気になったノードのメモです。
不定期更新になります。このページに追記していく予定です。
GetActorEyesViewPoint
アクターの座標と回転を取得出来ます。
回転は360°単位で取得出来ます。