LineRenderer
this.lineRenderers[i].SetPosition(0, this.firePoses[i].InverseTransformPoint(ray.origin)); // 월드 좌표를 로컬 좌표로 변환
InverseTransformPoint
저걸 안쓰고 그냥 좌표값을 넘기면, 월드좌표가 들어가게 되면서 내가 원하는 모양이 안나오고 어디 이상한곳에 LineRenderer가 생기게 된다.
____________________________________________________________________________________
사운드 매니저
지금까지 소리 날것들엔 전부 AudioSource를 넣었었음
사실 어떤 소리가 날건지와, 어디서 날건지만 있으면 AudioSource는 하나만 있으면 된다.
그걸 위한것
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SoundManager : MonoBehaviour
{
public static SoundManager Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public void playSFX(Vector3 pos, AudioClip clip, bool looped)
{
GameObject soundObject = new GameObject("SoundEffect");
soundObject.transform.position = pos;
AudioSource audioSource = soundObject.AddComponent<AudioSource>();
audioSource.clip = clip;
audioSource.loop = looped;
audioSource.Play();
if (!looped)
{
Destroy(soundObject, clip.length);
}
//Instantiate 로 하는게 아닌 풀링식으로 해야함
//일단 임시로 대충 써놨음
}
}
소리가 많이나는 애(플레이어 등) 은 그냥 source붙이는게 더 쓰기 쉽고 부하도 덜걸린다
하지만 소리가 많이 안날애들(어디에 있는 벽 등)을 하나의 SoundManager로 통합관리 하는것이 옳다.
___________________________________________________________
Pun2

https://dashboard.photonengine.com/ko-kr



헬기 / 탱크 게임을 멀티로 만들 예정
플레이어인 탱크가 여러개 있을거라, 적인 헬기는 탱크중 가장 가까이 있는걸 타겟으로 잡아야한다

App ID


App Id부분에 저 App Id입력
________________________________________________________
로컬 오브젝트 : 내가 직접 컨트롤 하고있는 물체(player)
리모트 오브젝트 : 네트워크 너머의 타인이 플레이 하고있는 물체(team)
내(A) 로컬 오브젝트가 움직이는게
B라는 유저의 리모트 오브젝트(A) 가 움직이는것과 같아지는것
-> 네트워크 동기화
_____________________________________________
전용서버 : 서버의 모든 자원이 온전히 네트워크 서비스를 유지하는데 사용
따로 서버 하나가 있고, 거기엔 모두가 리모트로 돌아가고있고, 그걸 기반으로 플레이어가 움직인다
리슨서버 : 전용서버 없이 플레이어 클라이언트중 하나가 서버역할을 하게 된다.
서버 역할을 맡은 클라이언트를 방장, 호스트, 마스트 클라이언트 등으로 부른다.
만약 게임하는 사람끼리 서로 가까이 있다면 , 전용서버보다도 빠를수가 있다
P2P : 게임에 참가한 클라이언트 모두가 호스트 역할을 겸한다.
특정 단일 호스트에 참가하는 방식이 아니라, 서로 직접 연결된 형태이다.
탱크 게임은 매치 메이킹 서버, 리슨 서버 방식으로 구현할 예정이다.
리슨서버나 p2p 방식을 사용하더라도 참가할 클라이언트들이 서로를 찾아 방 하나에 모이는 과정에서 사용할 전용서버가 필요하다.
______________________________________________________________
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine.SceneManagement;
public class PhotonInit : MonoBehaviourPunCallbacks
{
void Start()
{
}
void Update()
{
}
}
MonoBehaviourPunCallbacks
MonoBehaviour를 쓰면서, Photon쪽에 콜백을 전달하게 되는 내용
예시
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine.SceneManagement;
public class PhotonInit : MonoBehaviourPunCallbacks
{
public string Version = "1.0";
void Start()
{
PhotonNetwork.GameVersion = this.Version;
PhotonNetwork.ConnectUsingSettings();
//포톤 네트워크에서 접속
}
public override void OnConnectedToMaster()
{
base.OnConnectedToMaster();
Debug.Log("마스터 클라이언트 접속");
PhotonNetwork.JoinLobby(); //로비 접속
}
public override void OnJoinedLobby()
{
base.OnJoinedLobby();
Debug.Log("로비 접속");
PhotonNetwork.JoinRandomRoom(); //랜덤 방 접속 시도
}
public override void OnJoinRandomFailed(short returnCode, string message)
{
base.OnJoinRandomFailed(returnCode, message);
print("로비 접속 실패");
}
public override void OnJoinedRoom()
{
base.OnJoinedRoom();
Debug.Log("방 접속 성공");
}
void Update()
{
}
}

마스터 클라이언트 접속되고
그다음 로비접속 하라고 해놨으니 로비 접속 한다음
로비접속에 방에 들어가라고 해놨는데
방을 만든게 없으니 방 접속 실패
void Start()
{
PhotonNetwork.GameVersion = this.Version;
PhotonNetwork.ConnectUsingSettings();
//포톤 네트워크에서 접속
}
public override void OnConnectedToMaster()
{
base.OnConnectedToMaster();
Debug.Log("마스터 클라이언트 접속");
PhotonNetwork.JoinLobby(); //로비 접속
}
public override void OnJoinedLobby()
{
base.OnJoinedLobby();
Debug.Log("로비 접속");
PhotonNetwork.JoinRandomRoom(); //랜덤 방 접속 시도
}
public override void OnJoinRandomFailed(short returnCode, string message)
{
base.OnJoinRandomFailed(returnCode, message);
print("로비 접속 실패");
PhotonNetwork.CreateRoom("신 창 섭 니가만든 Worlds", new RoomOptions { IsOpen = true, IsVisible = true, MaxPlayers = 20}); //방 생성
}
public override void OnJoinedRoom()
{
base.OnJoinedRoom();
Debug.Log("방 접속 성공");
}

마스터 클라이언트 접속되고
그다음 로비접속 하라고 해놨으니 로비 접속 한다음
로비접속에 방에 들어가라고 해놨는데
방을 만든게 없으니 방 접속 실패, 그리고 방을 만든다
그 다음 접속됨
'2025유니티수업' 카테고리의 다른 글
| 0714(포톤 채팅) (1) | 2025.07.14 |
|---|---|
| 0711 Photon(Pun, Realtime) (0) | 2025.07.11 |
| 0709 유니티(헬기, ) (0) | 2025.07.09 |
| 0708 유니티(좀비 서바이벌 완성 , scope zoom) (0) | 2025.07.08 |
| 0707 유니티(좀비 서바이벌) (0) | 2025.07.07 |