サーバーとクライアント側のネットワークの同期~キャラの色の変更編~
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@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°単位で取得出来ます。
2-3月の進捗
2-3月の進捗です。
1月に作ったUIはいろいろあって消えました。
それを気にコントローラーに全対応することにしたのでまたのちほど作り直します。
クエスト発生からのシーケンス再生の処理を作りました。
シーケンス内にイベントを設置してそこからテキスト、シーケンスの終了などを指定しています。
レベルブループリントで取得しか出来ないっぽかったのでこのように、シーケンスのアクターをレベルにおいて、そこから関数を呼び出すようにしています。
コンボ周りはモンタージュ内の通知にてNotifyBPを作成し、そこからモンタージュを呼び出しています。
データテーブルでモーションを管理してみたりしたのですが、次のコンボモーションをNotifyにて設定したほうが安牌でした。
空中攻撃はChracterクラスを継承しているとMovementModeを切り替える必要があるのできちんと通知を作らないとバグが起こりそうですね。そこが怖い。
ターゲットのロックオンをひっそり入れたのですが、これは作り直す予定です。
精度が余りにも酷いので・・・
今月も時間を見つけて少しづつ作っていきます。
今月に期待
以上