[Photon]二人対戦ゲームでプレイヤー毎に初期位置、移動範囲を設定したいです。

実現したいこと

ルームに参加した際、同じプレハブを使用してプレイヤー毎に初期位置、移動範囲を設定する

前提

unityのバージョン:2022 3.4f1
PUN2パッケージを使用

SampleSceen.csでルームに参加した際に、プレイヤー1を添付画像の手前のフィールド、プレイヤー2を奥のフィールドに配置。また移動範囲をそれぞれのフィールド内に設定したいです。

現在は2人のプレイヤーが参加するとプレイヤー1,2のオブジェクトどちらも手前のフィールドに配置されます。移動範囲はプレハブにPlayerController.csをコンポーネントし、clampを使用して手前のフィールド内に制限しています。

参考になるソースコード、資料がありましたら宜しくお願いいたします。

イメージ説明

該当のソースコード

C#

1using Photon.Pun;2using Photon.Realtime;3using UnityEngine;4 5public class SampleScene : MonoBehaviourPunCallbacks 6{7 private void Start() {8 PhotonNetwork.NickName = "Player";9 PhotonNetwork.ConnectUsingSettings();10 }11 12 public override void OnConnectedToMaster() {13 PhotonNetwork.JoinRandomRoom();14 }15 16 public override void OnJoinRandomFailed(short returnCode, string message) {17 var roomOptions = new RoomOptions();18 roomOptions.MaxPlayers = 2;19 20 PhotonNetwork.CreateRoom(null, roomOptions);21 }22 23 public override void OnJoinedRoom() {24 var position = new Vector3(0,0,0);25 PhotonNetwork.Instantiate("Player", position, Quaternion.identity);26 27 }28}

C#

1using Photon.Pun;2using UnityEngine;3 4[RequireComponent(typeof(CharacterController))]5public class PlayerController : MonoBehaviourPunCallbacks 6{7 [SerializeField]private Animator animator;8 [SerializeField]private float moveSpeed = 3;9 10 float xlim = 2.2f;11 float zlim = 2.2f;12 13 14 private CharacterController _characterContoroller;15 private Transform _transform;16 private Vector3 _moveVelocity;17 18 private void Start()19 {20 _characterContoroller = GetComponent<CharacterController>();21 _transform = transform;22 }23 24 private void Update()25 {26 if(photonView.IsMine)27 {28 _moveVelocity.x = Input.GetAxis("Horizontal") * moveSpeed;29 _moveVelocity.z = Input.GetAxis("Vertical") * moveSpeed;30 31 _transform.LookAt(_transform.position + new Vector3(_moveVelocity.x, 0, _moveVelocity.z));32 33 _characterContoroller.Move(_moveVelocity * Time.deltaTime);34 35 animator.SetFloat("MoveSpeed", new Vector3(_moveVelocity.x, 0, _moveVelocity.z).magnitude);36 37 Vector3 now = _transform.position;38 39 now.x = Mathf.Clamp(now.x, -xlim, xlim);40 now.z = Mathf.Clamp(now.z, -zlim, zlim);41 42 _transform.position = now;43 }44 }45}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント