일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 터치디자이너
- TouchDesigner
- TDableton
- particleGPU
- 터치디자이너 reference
- displace
- 파이썬 if
- 터치디자이너 인터페이스
- touchdesigner displace
- 파이썬reference
- 터치디자이너 Instancing
- 터치디자이너 클론
- 터치디자이너 참조
- 터치디자이너 오퍼레이터
- 터치디자이너 replicator
- 터치디자이너 list
- touchdesigner particle
- 터치디자이너 interface
- 터치디자이너 함수
- 터치디자이너 튜토리얼
- 터치디자이너 python
- 터치디자이너 if
- 터치디자이너 강의
- 터치디자이너 timeline
- touchdesinger
- ableton live 10
- 파이썬
- 터치디자이너 에이블톤
- touchdesigner GPU
- 터치디자이너 파이썬
- Today
- Total
caLAB
[유니티 네트워크] 애니메이션 동기화 본문
0. 네트워크 환경 세팅
기본적인 네트워크 스크립트는 아래와 같이 작업해두었습니다.
networkMgr 스크립트
- 서버 연결
- 방 생성
- 캐릭터 생성
- 다른 플레이어가 방 나가는 것 들어오는 것 체크
- 방에서 나가면 파괴
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
namespace networkTest
{
public class networkMgr : MonoBehaviourPunCallbacks
{
private GameObject spawnedPlayerPrefab;
private void Awake()
{
PhotonNetwork.ConnectUsingSettings();
}
public override void OnConnectedToMaster()
{
base.OnConnectedToMaster();
Debug.Log("Connected to master.");
PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions { MaxPlayers = 20 }, null);
}
public override void OnJoinedRoom()
{
base.OnJoinedRoom();
Debug.Log("joined room.");
spawnedPlayerPrefab = PhotonNetwork.Instantiate("player", Vector3.zero, Quaternion.identity);
}
public override void OnLeftRoom()
{
base.OnLeftRoom();
PhotonNetwork.Destroy(spawnedPlayerPrefab);
}
public override void OnPlayerEnteredRoom(Player newPlayer)
{
Debug.Log("a new player joined the room.");
base.OnPlayerEnteredRoom(newPlayer);
}
public override void OnPlayerLeftRoom(Player otherPlayer)
{
Debug.Log("a player left the room");
base.OnPlayerLeftRoom(otherPlayer);
}
}
}
1. 애니메이션 작업
캐릭터가 갈아가는 애니메이션을 간단하게 만들어주도록 합니다.
파라미터에는 IsWalking을 bool 타입으로 speed를 float 타입으로 설정해서 추가해주도록 합니다.
*bool 과 trigger의 차이
trigger는 bool과 유사합니다. 다만, bool은 상태가 전환되고 계속 상태를 유지하면 trigger는 상태가 전환되고 바로 다시 운래 상태로 돌아옵니다.
Idle에서 Walking으로 갈 때는 IsWalking의 Conditions를 true로 합니다.
반대로, Walking에서 Idle로 갈 때는 false로 합니다. Has Exit Time의 경우는 체크를 해제합니다.
* Has Exit Time이란?
Has Exit Time은 애니메이션이 실행되고 있을 때 값이 바뀌어도 애니메이션이 끝날 때까지 기다렸다가 다음 애니메이션으로 넘어가는 설정을 하는 것입니다. Has Exit Time을 체크해두면 상태가 바뀌어도 애니메이션의 루틴이 한 번 돌고 다음 상태에 맞는 애니메이션이 실행됩니다. Has Exit Time이 해제되어 있으면, 상태가 바뀌면 바로 그 상태에 맞는 애니메이션이 실행되게 됩니다.
2. 애니메이션 동기화
애니메이션 동기화의 경우 포톤네트워크에서 동기화 처리를 해주기 때문에 설정만 맞춰주면 됩니다. 우선, 방에 접속했을 때 PhotonNetwork.Instantiate 함수로 생성할 player의 설정을 아래와 같이 해줍니다.
- Animator
- PhotonView : 동기화 시킬 것들을 관측.
- Photon Transform View (위치 동기화)
- Photon Animator View (애니메이션 동기화) : Synchronize Parameters를 discrete로 설정해줄 것.
- Network PC player 스크립트 : 네트워크 플레이어의 움직임 관련 스크립트
아래는 networkPCPlayer 스크립트 입니다.
이 스크립트의 핵심은 Upadte에서 PhotonView가 isMine일 때만 움직이도록 설정하는 것입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
public class networkPCplayer : MonoBehaviourPunCallbacks
{
public PhotonView PV;
public Animator anim;
public float speed = 1.0f;
public float rotationSpeed = 100.0f;
public GameObject player;
private void Update()
{
if(PV.IsMine)
{
player.SetActive(false);
float translation = Input.GetAxis("Vertical") * speed;
float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
translation *= Time.deltaTime;
rotation *= Time.deltaTime;
transform.Translate(0, 0, translation);
transform.Rotate(0, rotation, 0);
if (translation != 0 || rotation != 0)
{
if (translation < 0)
{
anim.SetFloat("speed", -1);
}
anim.SetFloat("speed", 1);
anim.SetBool("IsWalking", true);
}
else
{
anim.SetFloat("speed", 1);
anim.SetBool("IsWalking", false);
}
}
}
}
포톤네트워크에서 동기화 처리를 잘 해주기 때문에 포톤네트워크의 컴포넌트를 잘 가져오고, 원하는 움직임이나 애니메이션을 PhotonView.IsMine일 때만 실행되게 하면 동기화가 잘 됩니다. 간단!
'Unity > 유니티 개발' 카테고리의 다른 글
[유니티 개발] Lighting (0) | 2021.12.14 |
---|---|
[유니티 개발]비디오 플레이어에서 audioSource 받아오기 (0) | 2021.11.21 |
[유니티 C#] 캐릭터 이동 회전 스크립트 (0) | 2021.10.18 |
[유니티] Barracuda (0) | 2021.10.07 |
[유니티 C#] Delegate 이벤트 예제(feat.Singleton) (1) | 2021.09.30 |