Photon Network/Fusion

[Photon Fusion 1.1.8] Setting/Getting Input

일등하이 2023. 11. 5. 22:58
반응형

PlayerInput 스크립트를 생성후 다음과 같이 작성한다 

 

시프트 + 알트 + . 을 눌러 같은 이름의 문자열을 찾아 지우면 편하다 

using System;
using System.Collections;
using System.Collections.Generic;
using Fusion;
using Fusion.Sockets;
using UnityEngine;

public struct PlayerInputData : INetworkInput
{
    public Vector3 direction;
}

public class PlayerInput : MonoBehaviour, INetworkRunnerCallbacks
{
    private void Start()
    {
        NetworkManager.Instance.SessionRunner.AddCallbacks(this);
    }

    private void Update()
    {
        
    }

    #region INetworkRunnerCallbacks
    public void OnPlayerJoined(NetworkRunner runner, PlayerRef player)
    {
        
    }

    public void OnPlayerLeft(NetworkRunner runner, PlayerRef player)
    {
        
    }

    public void OnInput(NetworkRunner runner, NetworkInput input)
    {
        PlayerInputData inputData = new PlayerInputData();
        inputData.direction = Vector3.forward;
        input.Set(inputData);
    }

    public void OnInputMissing(NetworkRunner runner, PlayerRef player, NetworkInput input)
    {
        
    }

    public void OnShutdown(NetworkRunner runner, ShutdownReason shutdownReason)
    {
        
    }

    public void OnConnectedToServer(NetworkRunner runner)
    {
        
    }

    public void OnDisconnectedFromServer(NetworkRunner runner)
    {
        
    }

    public void OnConnectRequest(NetworkRunner runner, NetworkRunnerCallbackArgs.ConnectRequest request, byte[] token)
    {
        
    }

    public void OnConnectFailed(NetworkRunner runner, NetAddress remoteAddress, NetConnectFailedReason reason)
    {
        
    }

    public void OnUserSimulationMessage(NetworkRunner runner, SimulationMessagePtr message)
    {
        
    }

    public void OnSessionListUpdated(NetworkRunner runner, List<SessionInfo> sessionList)
    {
        
    }

    public void OnCustomAuthenticationResponse(NetworkRunner runner, Dictionary<string, object> data)
    {
        
    }

    public void OnHostMigration(NetworkRunner runner, HostMigrationToken hostMigrationToken)
    {
        
    }

    public void OnReliableDataReceived(NetworkRunner runner, PlayerRef player, ArraySegment<byte> data)
    {
        
    }

    public void OnSceneLoadDone(NetworkRunner runner)
    {
        
    }

    public void OnSceneLoadStart(NetworkRunner runner)
    {
        
    }
    #endregion
    
}

 

 

RunnerPrefab을 더블 클릭해 프리팹 모드로 들어간후 PlayerInput컴포넌트를 부착 해준다 

 


Getting Input

 

PlayerMovement스크립트를 생성후 다음과 같이 작성하자 

 

using System.Collections;
using System.Collections.Generic;
using Fusion;
using UnityEngine;

public class PlayerMovement : NetworkBehaviour
{
    public float moveSpeed;

    public override void FixedUpdateNetwork()
    {
        base.FixedUpdateNetwork();
        if (GetInput<PlayerInputData>(out var inputData))
        {
            transform.Translate(inputData.direction * Runner.DeltaTime);
        }
    }
}

 

NetworkPlayer프리팹을 더블 클릭해 프리팹 모드로 들어가서 PlayerMovement컴포넌트를 부착 한다 

 

 

PlayerSpawner 클래스의 OnPlayerJoined 메서드에서 position y 값을 수정 한다 

카메라 위치와 각도를 조절후 

 

반응형