Help us understand the problem. What is going on with this article?

Unityで通信対戦ゲームを作った話1

せっかくやったのでその時のことを書いておく
将来の自分向けメモ

ゲームの前提
- 3Dゲーム
- 通信あり
- 横移動だけで縦は無し
- 対戦アクションゲーム。殴ったり殴られたり、魔法ぶっ放せたりする
- マルチプレイサーバーは他者から送られたものを流すだけで、ゲームロジックを計算はしてくれない

座標同期
お互いの居場所がわからないと近づけないし殴れないので同期はもちろん必要

初期

単純に今の座標送りあえばなんとかなるでしょw

結果
残念だったな残像だ
いきなり拳が飛んできた
ありのまま今起こったことを(ry

等々散々な結果だった
読みが甘すぎた。初めて作る分野ってそんなもんだよね。

原因は各プレイヤーの通信環境の違い
このままではゲームとして成立しないのでなんとかしなければ

やったこと

単純に座標を送り合うだけではダメなので、未来座標と到達予定時刻を送信するようにした

手元にある情報は現在座標ベクトル通信時間があるのでこれを加工していく

相手に送る情報
未来座標 = 座標 + ベクトル * 時間(通信時間ではない)

到達予定時刻 = サバの現在時間 + 調整時間
調整時間 = 最低制限時間 + 自分の通信遅延時間 - 調整パラメータ * 調整割合
を相手側に送る

これで受け取った相手はそのとおり動いてくれるので、
自分のところでも送った情報どおりキャラクターを動かしていく

これで通信がいい人は気持ちよく動けて、環境の悪い人は自覚できるような動きになった

実際環境を悪くして実験してみると、つるつる地面を滑って動いていたので、
今回はこれでよし

次回は攻撃関連のことを書いてみる

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away