렌더링 파이프라인을 일종의 인형극으로 보면 된다
머테리얼에 셰이더 지정할 수 있다
머테리얼은 물감이고
셰이더는 붓이다
머테리얼은 변수들을 담고 있고
셰이더는 그 변수들로 어떻게 계산하는지 정해져있다
Asset Name | Link |
---|---|
Sci-Fi Facility Sector 43 | Link |
Sheriff 2 | Link |
Monster Mutant 7 | Link |
Male Medics Scientists | Link |
The Scientist | Link |
Laboratory Scientists Pack | Link |
Laboratory Interior and Props | Link |
Baphomet | Link |
Sci-Fi Engineer's Room | Link |
Surgical Instruments Hospital Props | Link |
Man in Protective Suit | Link |
Voices SFX | Link |
Protective Suit Man | Link |
Laboratory Complex Set | Link |
Laboratory Sci-Fi | Link |
Laboratory 2 Sci-Fi | Link |
Sci-Fi Dropship Modular Spaceship | Link |
PA Space Station | Link |
Sci-Fi Heavy Station Set | Link |
NPC Formal Set 01 | Link |
University Lecture Theatre | Link |
Control Benches Pack | Link |
Worker 1 | Link |
NPC Sailor Custom | Link |
Research Ship | Link |
Tropical Island | Link |
Medieval Man | Link |
Character Sailor | Link |
Atmospheric House Modular | Link |
Horror Mansion | Link |
Abandoned Psychiatric Hospital | Link |
Prize Wheel Minigame | Link |
Up Down Simple Hyper Casual Game | Link |
Memory Match Game Template | Link |
Cups and Balls Game Template | Link |
Sliding Puzzle Game Template | Link |
Math Balancing Game Template | Link |
Bubble Shooter Game Template | Link |
이 표를 통해 각 Unity Asset의 이름과 링크를 확인할 수 있습니다.
내가 짠 로직에 아직 그런 일이 발생 안 할 것 같은데? 라는 생각이 들더라도 예외 처리 해놓는게 좋다.
TextMeshPro
또는TextMeshProUGUI
컴포넌트의text
속성에this.text
로 바로 접근 가능한가?
this.text
로 바로 접근할 수 없습니다.text
속성에 접근하려면, 해당 컴포넌트를 먼저 가져와야 합니다.using TMPro;
using UnityEngine;
public class Example : MonoBehaviour
{
private TextMeshProUGUI tmpText;
void Start()
{
// TextMeshProUGUI 컴포넌트를 가져와서 tmpText에 할당
tmpText = GetComponent<TextMeshProUGUI>();
tmpText.text = "Hello, World!"; // tmpText.text로 접근
}
}
이렇게 TextMeshProUGUI 컴포넌트를 변수에 할당한 후 tmpText.text
로 접근해야 합니다.
.text
속성에 한 번만 값을 설정하면, Update 문에서 계속 갱신하지 않아도 되는가?
tmpText.text = "some text";
처럼 텍스트를 한 번만 설정해두면, 이후 Update에서 별도로 갱신하지 않아도 텍스트 값이 유지됩니다.따라서, 일회성으로 설정할 텍스트라면 Start
나 특정 이벤트에서 한 번만 설정해도 됩니다.
tmpText.color = Color.green; 이거 왜 오류 남
tmpText.color = Color.green;
코드를 사용할 때 오류가 발생하는 이유는 TextMeshProUGUI
에서 color
속성이 읽기 전용으로 설정되어 있을 가능성이 있습니다. 일부 버전에서는 tmpText.color
대신 tmpText.faceColor
나 tmpText.outlineColor
속성을 사용하여 텍스트 색상을 변경해야 합니다.
void Start()
{
remainingPlayers = new List<GameObject>(GameObject.FindGameObjectsWithTag("Player")); // 모든 플레이어를 찾아서 리스트에 추가
Cursor.lockState = CursorLockMode.Locked; // 마우스 커서 숨김
spectatingTarget = remainingPlayers[currentPlayerIndex]; // 초기 관전 대상 설정
virtualCamera.Follow = this.transform; // 버츄얼 카메라가 Spectator를 따라다니도록 설정
canvasInstance = Instantiate(canvasPrefab); // 캔버스 생성
spectatorText = canvasInstance.GetComponentInChildren<SpectatorText>(); // 관전 대상 텍스트
spectatorText.SetSpectatingTarget(spectatingTarget); // UI에 관전 대상 표시
Debug.Log("Spectator Camera Start");
}
Spectator에 붙어있는 SepctatorCamera에 있던 기존 Start에 캔버스 instantiate 시키는거 추가
// 관전 대상 변경
private void SwitchPlayer(int idx_change)
{
if (remainingPlayers.Count == 0)
return;
currentPlayerIndex += idx_change;
if (currentPlayerIndex < 0)
currentPlayerIndex = remainingPlayers.Count - 1;
else if (currentPlayerIndex >= remainingPlayers.Count)
currentPlayerIndex = 0;
spectatingTarget = remainingPlayers[currentPlayerIndex];
spectatorText.SetSpectatingTarget(spectatingTarget); // UI에 관전 대상 표시
Debug.Log("Switching to player " + spectatingTarget.name);
}
좌클 우클할 때 카메라 스크립트에서의 변수만 바꾸는게 아니라
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class SpectatorText : MonoBehaviour
{
private GameObject spectatingTarget;
private TMPro.TextMeshProUGUI tmpText;
public void SetSpectatingTarget(GameObject target)
{
spectatingTarget = target;
tmpText = GetComponentInChildren<TextMeshProUGUI>();
switch (target.GetComponent<Player>().type)
{
case CharacterType.Scientist:
tmpText.color = Color.green;
tmpText.text = "Scientist\n" + spectatingTarget.name;
Debug.Log("Change text to Scientist");
break;
case CharacterType.Monster:
tmpText.color = Color.red;
tmpText.text = "Monster\n" + spectatingTarget.name;
Debug.Log("Change text to Monster");
break;
case CharacterType.NPC:
Debug.Log("Change text to NPC");
break;
}
tmpText = GetComponentInChildren<TextMeshProUGUI>();
Debug.Log("Spectating Target Text Set : " + spectatingTarget.name);
}
}
새로 생긴 canvas에 있는 UI text도 바꿔준다
(이거 처음 구현하고 타입 별 문구 다르게 하려다가 tmpText 할당을 삭제해버려서 왜 안되지 이러고 있었음)
미션 완료
다른 사람들 보이는 건
벽을 투시하게 보이면 좋을지 말지 모르겠
일단 해보고 별로면 그냥 마주쳤을 때 윤곽선만?