https://www.youtube.com/watch?v=vJACbWBDa90&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=18
1. 캐릭터 선택 UI
UI의 새로운 빈 오브젝트를 생성
- Canvas > GameStart > 우클릭 > Creat Empty (Character Group)
+세부 조정
Grid Layout Goup : 자식 오브젝트를 그리드 형태로 정렬하는 컴포넌트
- Cell Size 50 50 , Spacing 1 1
시작 버튼을 자식 오브젝트로 넣기(이름 변경 Character 0)
버튼에 Image 추가
Image 0 할당(y8)
캐릭터 선택 버튼으로 편집(Text Name etc)
버튼과 Text의 Outline의 색을 변경
완성한 버튼을 Ctrl + D로 복사하여 다른 캐릭터로 편집
2. 선택 적용하기
GameManager.cs 에서 캐릭터 ID를 저장할 변수 선언
[Header("# Player Info")]
public int playerId;
public void GameStart(int id)
{
playerId = id;
maxHealth = 100;
health = maxHealth;
uiLevelUp.Select(playerId % 2); //임시 스크립트 (첫번째 캐릭터 선택)
Resume();
}
- 게임 시작 함수에는 int 매개변수 추가
- 기본무기 지급(임시 스크립트)을 위한 함수 호출에서 인자 값을 캐릭터ID로 변경
플레이어 오브젝트는 미리 비활성화
게임 시작할 때 플레이어 활성화 후 기본 무기 지금
public void GameStart(int id)
{
playerId = id;
maxHealth = 100;
health = maxHealth;
player.gameObject.SetActive(true);
uiLevelUp.Select(playerId % 2); //임시 스크립트 (첫번째 캐릭터 선택)
Resume();
}
- % 2 : 에러 발생 방지용
https://www.youtube.com/watch?v=vizfd1TeRMI
플레이어 스크립트에 여러 애니메이터 컨트롤러를 저장할 배열 변수 선언
public RuntimeAnimatorController[] animCon;
일단 두개로 진행
Player.cs OnEnable 함수 추가 후, 애니메이터 변경 로직 추가
private void OnEnable()
{
anim.runtimeAnimatorController = animCon[GameManager.instance.playerId];
}
GameManager 캐릭터 선택 버튼의 게임시작 함수를 재연결
3. 캐릭터 특성 로직
캐릭터 특성을 관리하는 새로운 스크립트 생성(Character)
public class Character : MonoBehaviour
{
public static float Speed
{
get { return GameManager.instance.playerId == 0 ? 1.1f : 1f; }
}
- 함수가 아닌 속성을 작성
- 삼항연산자를 활용하여 캐릭터에 따라 특성치 적용
Player.cs
private void OnEnable()
{
speed *= Character.Speed;
anim.runtimeAnimatorController = animCon[GameManager.instance.playerId];
}
- 스피드 곱연산
- 평소 많이 활용한 클래스들의 속성들도 이런 방식으로 작성되어 있어요
Gear.cs
void SpeedUp()
{
float speed = 3 * Character.Speed;
GameManager.instance.player.speed = speed + speed * rate;
}
- 스피드 곱연산
Character.cs 캐릭터 특성치에 맞는 각종 속성들을 작성
public class Character : MonoBehaviour
{
public static float Speed
{
get { return GameManager.instance.playerId == 0 ? 1.1f : 1f; }
}
public static float WeaponSpeed
{
get { return GameManager.instance.playerId == 1 ? 1.1f : 1f; }
}
public static float WeaponRate
{
get { return GameManager.instance.playerId == 1 ? 0.9f : 1f; }
}
public static float Damage
{
get { return GameManager.instance.playerId == 2 ? 1.2f : 1f; }
}
public static int Count
{
get { return GameManager.instance.playerId == 3 ? 1 : 0; }
}
}
나머지 연사속도 적용
Weapon.cs
public void Init(ItemData data)
{
//...
switch (id)
{
case 0:
speed = 150 * Character.WeaponSpeed;
Batch();
break;
default:
speed = 0.3f * Character.WeaponRate;
break;
}
Gear.cs
void RateUp()
{
Weapon[] weapons = transform.parent.GetComponentsInChildren<Weapon>();
foreach(Weapon weapon in weapons)
{
switch (weapon.id)
{
case 0:
float speed = 150 * Character.WeaponSpeed;
weapon.speed = 150 + (150 * rate);
break;
default:
speed = 0.5f * Character.WeaponRate;
weapon.speed = 0.5f * (1f - rate);
break;
}
}
}
데미지 상승, 갯수 증가
Weapon.cs
public void Init(ItemData data)
{
// ...
// Property Set
id=data.itemId;
damage = data.baseDamage * Character.Damage;
count = data.baseCount + Character.Count;
}
public void LevelUp(float damage, int count)
{
this.damage = damage * Character.Damage;
this.count += count;
//...
}
깃허브 올리기
Commit : ver 1.13
Description : Play Character Select
https://github.com/mekain80/CloneCode_Undead_Survivor
'게임개발 > 언데드서바이벌_골드메탈_클론코딩' 카테고리의 다른 글
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 15 (편리한 오디오🔊시스템 구축) (0) | 2023.05.25 |
---|---|
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 14+ (캐릭터 해금🔓시스템) (0) | 2023.05.25 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 13 (게임 시작과 종료) (0) | 2023.05.11 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 12 (레벨업🥳시스템) (0) | 2023.05.10 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 11+ (플레이어 무기 장착 표현하기) (0) | 2023.05.10 |