using UnityEngine;
public class ChangeCharacter : MonoBehaviour
{
public Avatar avatar1; // 첫 번째 아바타
public Avatar avatar2; // 두 번째 아바타
private Animator animator; // Animator 컴포넌트
void Start()
{
animator = GetComponent<Animator>(); // 시작 시 Animator 컴포넌트를 가져옴
}
void Update()
{
if (Input.GetKeyDown(KeyCode.C)) // C 키를 누르면
{
ChangeAvatar(); // 아바타 변경 함수 호출
}
}
void ChangeAvatar()
{
GameObject heroObj = transform.Find("Hero").gameObject;
GameObject girlObj = transform.Find("Girl").gameObject;
if (animator.avatar == avatar1) // 현재 아바타가 첫 번째 아바타이면
{
animator.avatar = avatar2; // 두 번째 아바타로 변경
heroObj.SetActive(false);
girlObj.SetActive(true);
}
else // 그렇지 않으면
{
animator.avatar = avatar1; // 첫 번째 아바타로 변경
heroObj.SetActive(true);
girlObj.SetActive(false);
}
}
}
간단하게 플레이 도중에 C키를 누르면 다른 캐릭터로 변하는것을 구현해봄.
변경할 프리팹과 아바타들을 미리 넣어놓고 활성화 & 비활성화 하면서 동시에 아바타도 변경해 주기.
위 방식은 StarterAssets / ThirdPersonController를 사용해서 구현함.
@ 캐릭터 변경할때 이펙트 나오게 하기
using UnityEngine;
public class ChangeCharacter : MonoBehaviour
{
public Avatar avatar1; // 첫 번째 아바타
public Avatar avatar2; // 두 번째 아바타
private Animator animator; // Animator 컴포넌트
public GameObject respawnEffectPrefab1; // 이펙트 프리팹1
public GameObject respawnEffectPrefab2; // 이펙트 프리팹2
void Start()
{
animator = GetComponent<Animator>(); // 시작 시 Animator 컴포넌트를 가져옴
}
void Update()
{
if (Input.GetKeyDown(KeyCode.C)) // C 키를 누르면
{
CreateRespawnEffect(); // 이펙트 생성
ChangeAvatar(); // 아바타 변경 함수 호출
}
}
void ChangeAvatar()
{
GameObject heroObj = transform.Find("Hero").gameObject;
GameObject girlObj = transform.Find("Girl").gameObject;
if (animator.avatar == avatar1) // 현재 아바타가 첫 번째 아바타이면
{
animator.avatar = avatar2; // 두 번째 아바타로 변경
heroObj.SetActive(false);
girlObj.SetActive(true);
}
else // 그렇지 않으면
{
animator.avatar = avatar1; // 첫 번째 아바타로 변경
heroObj.SetActive(true);
girlObj.SetActive(false);
}
}
void CreateRespawnEffect()
{
if (animator.avatar == avatar1)
{
// 이펙트 프리팹을 현재 캐릭터의 위치에 생성
GameObject effect1 = Instantiate(respawnEffectPrefab1, transform.position, transform.rotation);
Destroy(effect1, 4f);
}
else
{
// 이펙트 프리팹을 현재 캐릭터의 위치에 생성
GameObject effect2 = Instantiate(respawnEffectPrefab2, transform.position, transform.rotation);
Destroy(effect2, 4f);
}
}
}
프리팹만 추가해서 원하는 이펙트 VFX 프리팹 넣고 코드 수정. 이펙트가 시간이 지나도 하이어라키에 남아 있는걸 막기위해 N초 뒤에 삭제시킴.
인벤토리, 장비 (1) | 2024.06.02 |
---|---|
캐릭터 오브젝트 주변에 원 퍼져 나가게 하기(스캔) (0) | 2024.05.27 |
19장. 좀비 서바이벌 멀티 플레이어( 네트워크 게임 월드 구현 ) (1) | 2024.05.01 |
18장. 좀비 서바이벌(멀티플레이) (0) | 2024.04.29 |
17장. 좀비 서바이벌(아이템 생성, 포스트 프로세싱) (0) | 2024.04.22 |