Genesis Game Client Project Setup
This commit is contained in:
8
Assets/02_Scripts/Player/Camera.meta
Normal file
8
Assets/02_Scripts/Player/Camera.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7717b7d2f922a0a47b5d434199cbf8c9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
3
Assets/02_Scripts/Player/Camera/CameraMode.cs
Normal file
3
Assets/02_Scripts/Player/Camera/CameraMode.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
using UnityEngine;
|
||||
|
||||
public enum CameraMode { FreeLook, Aim }
|
||||
2
Assets/02_Scripts/Player/Camera/CameraMode.cs.meta
Normal file
2
Assets/02_Scripts/Player/Camera/CameraMode.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 352c627185dd0f644a938ceeb3f50257
|
||||
25
Assets/02_Scripts/Player/Camera/PlayerCameraRig.cs
Normal file
25
Assets/02_Scripts/Player/Camera/PlayerCameraRig.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using UnityEngine;
|
||||
using Unity.Cinemachine;
|
||||
|
||||
public class PlayerCameraRig : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private CinemachineCamera _previewCam;
|
||||
[SerializeField] private CinemachineCamera _aimCam;
|
||||
|
||||
private CinemachineCamera _currentCam;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_currentCam = _previewCam;
|
||||
}
|
||||
|
||||
public float CurrentFOV
|
||||
{
|
||||
get { return _currentCam.Lens.FieldOfView; }
|
||||
set
|
||||
{
|
||||
if(_currentCam == _previewCam)
|
||||
_currentCam.Lens.FieldOfView = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Player/Camera/PlayerCameraRig.cs.meta
Normal file
2
Assets/02_Scripts/Player/Camera/PlayerCameraRig.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c8edc71b2d7ec249bbdb4b23726bee0
|
||||
8
Assets/02_Scripts/Player/Controllers.meta
Normal file
8
Assets/02_Scripts/Player/Controllers.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 48f5f91b03abc29499153c0d08c9104b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,283 @@
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayerCharacterController : MonoBehaviour
|
||||
{
|
||||
private CharacterController _cController;
|
||||
private Animator _anim;
|
||||
private PlayerStateMachine _stateMachine;
|
||||
|
||||
//환경
|
||||
private float _gravityValue = Physics.gravity.y; //중력
|
||||
|
||||
//이동
|
||||
private Vector2 _moveInput; // 입력받은 이동 방향
|
||||
private Vector3 _velocityY = new Vector3(0,-2f,0); // 플레이어Y의 속도 //Y축만 물리법칙의 지배를 일부 받기 때문에 필요
|
||||
private Vector3 _moveTargetDir; // 실제 가고자하는 이동방향
|
||||
|
||||
//캐릭터 스피드
|
||||
[SerializeField] private float _spdCoefficient = 4f; //스피드 계수
|
||||
[SerializeField] private float _acceleration = 4f; // 가속도
|
||||
[SerializeField] private float _deceleration = 20f; // 감속도
|
||||
private float _walkSpdRatio = 0.3f; // 걷기 속도 블렌드 비율 //여기를 수정하면 에디터의 블렌드도 수정해야함
|
||||
private float _runSpdRatio = 1f; // 달리기 속도 블렌드 비율 //여기를 수정하면 에디터의 블렌드도 수정해야함
|
||||
private float _currentSpd; //현재 스피드
|
||||
|
||||
//점프
|
||||
[SerializeField] private float _jumpPower = 1.5f; //점프 힘
|
||||
private float _jumpReadyCool = 0.8f; //점프 쿨타임
|
||||
private float _jumpReadyCoolTimer = 0f; //점프 쿨타이머
|
||||
|
||||
//대쉬
|
||||
[SerializeField] private AnimationCurve _dodgeCurve; // 변속용 커브
|
||||
[SerializeField] private float _dodgeDistance = 5f; // 총 대쉬 거리
|
||||
[SerializeField] private float _dodgeDuration = 0.5f; // 대쉬 지속 시간 (무적시간)
|
||||
private float _dodgeTimer = 0f; // 대쉬 진행 측정용
|
||||
private Vector3 _dodgeDir; // 대쉬 시작 시점의 방향 고정
|
||||
|
||||
//카메라 전환
|
||||
[SerializeField] private PlayerCameraRig _playerCameraRig; //카메라 집합체
|
||||
private CameraMode _cameraMode = CameraMode.FreeLook; //카메라 모드
|
||||
private CancellationTokenSource _cameraDelayChangeCts; //지연전환 취소 토큰
|
||||
|
||||
//캐릭터 관련
|
||||
public CharacterIdentity PlayerCharacterIdentity { get; set; }
|
||||
public PlayerStat PlayerCharacterStat{ get; set; }
|
||||
|
||||
//무기
|
||||
//[SerializeField] private Weapon _weapon;
|
||||
|
||||
/*
|
||||
* 웨폰 모듈로 따로 빼볼것
|
||||
*
|
||||
//차지공격
|
||||
//private float _chargePowerAdded = 0f; //차지 기본값에 더해줄 힘 //weapon 모듈로 뺄것
|
||||
//private float _chargePowerFirst = 20f; //차지 기본값 (바로 시전해도 값이 있어야 되기 때문) //weapon 모듈로 뺄것
|
||||
//private float _chargePowerDelta = 0.2f; //차지할때 힘이 더해질 단위시간 //weapon 모듈로 뺄것
|
||||
private event Action _chargeAttackCallback; //차지공격시 실행될 함수
|
||||
|
||||
//private AimingModule _aimingModule; //이건 weapon 모듈로 빼볼것
|
||||
|
||||
//private float _bowShootCoolTime = 0.5f; // weapon(Bow)로 뺄것
|
||||
//private float _bowShootCoolTimer = 0f; // weapon(Bow)로 뺄것
|
||||
|
||||
//[SerializeField] private LineRenderer _arrowTraceRenderer; // weapon(Bow)로 뺄것
|
||||
//private int _arrowTraceResolution = 30; // 화살 궤적 선을 구성하는 점의 개수 (정밀도) // weapon(Bow)로 뺄것
|
||||
//private float _arrowTraceStepTime = 0.1f; // 화살 궤적 점 사이의 시간 간격 // weapon(Bow)로 뺄것
|
||||
*/
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_cController = GetComponent<CharacterController>();
|
||||
_anim = GetComponent<Animator>();
|
||||
_stateMachine = GetComponent<PlayerStateMachine>();
|
||||
PlayerCharacterIdentity = GetComponent<CharacterIdentity>();
|
||||
PlayerCharacterStat = GetComponent<PlayerStat>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
//캐릭터 컨트롤러는 FixedUpdate보다 Update에서 하는게 권장됨
|
||||
Movement();
|
||||
CheckGround();
|
||||
WorkGravity();
|
||||
ApplyVelocity();
|
||||
|
||||
//PlayerDebug();
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void PlayerDebug()
|
||||
{
|
||||
Debug.Log($"isGrounded : {_stateMachine.IsGrounded}");
|
||||
}
|
||||
|
||||
#region 체크
|
||||
private void CheckGround()
|
||||
{
|
||||
_stateMachine.IsGrounded = _cController.isGrounded;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 중력
|
||||
private void WorkGravity()
|
||||
{
|
||||
if (_stateMachine.IsGrounded && _velocityY.y < 0)
|
||||
{
|
||||
_velocityY.y = -2f;
|
||||
}
|
||||
|
||||
_velocityY.y += _gravityValue * Time.deltaTime;
|
||||
_anim.SetFloat("velocityY", _velocityY.y);
|
||||
|
||||
// 상태 자동 전환 로직
|
||||
if (!_stateMachine.IsGrounded && _stateMachine.CurrentState != PlayerState.Jump && _stateMachine.CurrentState != PlayerState.Attack && _stateMachine.CurrentState != PlayerState.Charge)
|
||||
{
|
||||
_stateMachine.ChangeState(PlayerState.Fall);
|
||||
}
|
||||
else if (_stateMachine.IsGrounded && _stateMachine.CurrentState == PlayerState.Fall)
|
||||
{
|
||||
_stateMachine.ChangeState(PlayerState.Idle);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 이동
|
||||
public void MoveInput(Vector2 moveInput)
|
||||
{
|
||||
if (_stateMachine.CanMove())
|
||||
{
|
||||
_moveInput = moveInput;
|
||||
}
|
||||
}
|
||||
public void SprintInput(InputState inputState)
|
||||
{
|
||||
if(inputState == InputState.Performing)
|
||||
{
|
||||
_stateMachine.IsRunInputPressed = true;
|
||||
}
|
||||
else if(inputState == InputState.Canceled)
|
||||
{
|
||||
_stateMachine.IsRunInputPressed = false;
|
||||
}
|
||||
}
|
||||
private void Movement()
|
||||
{
|
||||
//구르기중일때 전용 로직
|
||||
if (_stateMachine.CurrentState == PlayerState.Dodge)
|
||||
{
|
||||
_dodgeTimer = _dodgeDuration;
|
||||
|
||||
float normalizedTime = (_dodgeDuration - _dodgeTimer) / _dodgeDuration; // 0 ~ 1 사이의 진행률
|
||||
|
||||
if (normalizedTime >= 1.0f)
|
||||
{
|
||||
// 구르기 종료 -> 원래상태로 복귀 로직
|
||||
//_stateMachine.ChangeState(PlayerState.Idle);
|
||||
//_currentSpd = 0f;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// 커브에서 현재 시점의 '속도 배율'을 가져옴
|
||||
// 그래프의 전체 넓이는 1
|
||||
float curveValue = _dodgeCurve.Evaluate(normalizedTime);
|
||||
|
||||
// 최종 속도 = (전체 거리 / 시간) * 커브 배율 ??
|
||||
_currentSpd = (_dodgeDistance / _dodgeDuration) * curveValue;
|
||||
_moveTargetDir = _dodgeDir * _currentSpd;
|
||||
|
||||
// 구르기 중엔 즉시 회전 (선택 사항)
|
||||
transform.rotation = Quaternion.LookRotation(_dodgeDir);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
float targetSpd = 0;
|
||||
|
||||
if (_moveInput.sqrMagnitude < Mathf.Epsilon) // 이동이 없는상태 - 거의 0
|
||||
{
|
||||
targetSpd = 0f;
|
||||
// 완전히 멈추기 전까지는 이동 상태를 유지하다가 아주 느려지면 Idle 전환
|
||||
if (_currentSpd < 0.05f) _stateMachine.ChangeState(PlayerState.Idle);
|
||||
|
||||
|
||||
//가속도 안쓸시
|
||||
//_currentSpd = 0;
|
||||
//_stateMachine.ChangeState(PlayerState.Idle);
|
||||
}
|
||||
else //이동이 없지 않음 = 이동이 있다
|
||||
{
|
||||
// 런키를 누른 상태면 뛰는 스피드, 아니면 걷는 스피드 적용
|
||||
_stateMachine.ChangeState(_stateMachine.IsRunInputPressed ? PlayerState.Run : PlayerState.Walk);
|
||||
targetSpd = _stateMachine.IsRunInputPressed ? _runSpdRatio * _spdCoefficient : _walkSpdRatio * _spdCoefficient;
|
||||
|
||||
//가속도 안쓸시
|
||||
//_stateMachine.ChangeState(_stateMachine.IsRunInputPressed ? PlayerState.Run : PlayerState.Walk);
|
||||
//_currentSpd = _stateMachine.IsRunInputPressed ? _runSpdRatio * _spdCoefficient : _walkSpdRatio * _spdCoefficient;
|
||||
}
|
||||
|
||||
|
||||
// _currentSpd가 targetSpd로 서서히 접근
|
||||
float accelWeight = _stateMachine.CurrentState == PlayerState.Run ? 2 : 1; //런일때 가속도 가중치
|
||||
float currentStepSpeed = (targetSpd > _currentSpd) ? _acceleration : _deceleration;
|
||||
_currentSpd = Mathf.MoveTowards(_currentSpd, targetSpd, currentStepSpeed * accelWeight * Time.deltaTime);
|
||||
|
||||
_anim.SetFloat("speedRatio", _currentSpd / _spdCoefficient);
|
||||
|
||||
Vector3 camForward = Camera.main.transform.forward; //메인카메라의 로컬기준 앞쪽방향
|
||||
camForward.y = 0; //높이를 무시하기 위해 0으로
|
||||
camForward.Normalize();
|
||||
|
||||
Vector3 camRight = Camera.main.transform.right; //메인카메라의 로컬기준 x축, 오른쪽 방향
|
||||
camRight.y = 0; //높이를 무시하기 위해 0으로
|
||||
camRight.Normalize();
|
||||
|
||||
Vector3 moveDir = new Vector3(_moveInput.x, 0, _moveInput.y);
|
||||
|
||||
_moveTargetDir = (moveDir.x * camRight + moveDir.z * camForward) * _currentSpd;//오른쪽을 눌렀다면 camRight 방향으로 그만큼, 위쪽을 눌렀다면 camForward방향으로 그만큼 가라
|
||||
|
||||
RotationByMove();
|
||||
}
|
||||
private void RotationByMove()
|
||||
{
|
||||
if(_moveTargetDir.magnitude > Mathf.Epsilon)
|
||||
{
|
||||
Quaternion lookTarget = Quaternion.LookRotation(_moveTargetDir); // 방향 벡터를 쿼터니언 회전값으로 전환
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, lookTarget, Time.deltaTime * 10);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 속도적용
|
||||
private void ApplyVelocity()
|
||||
{
|
||||
Vector3 finalVector = new Vector3(_moveTargetDir.x, _velocityY.y, _moveTargetDir.z);
|
||||
_cController.Move(finalVector * Time.deltaTime); // xz 이동벡터를 적용
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 대시(구르기,횡이동등)
|
||||
public void DodgeInput(InputState inputState)
|
||||
{
|
||||
// 구르기 가능한 상태일 때만
|
||||
if (inputState == InputState.Started && _stateMachine.CanDodge())
|
||||
{
|
||||
Vector3 camForward = Camera.main.transform.forward;
|
||||
camForward.y = 0;
|
||||
camForward.Normalize();
|
||||
|
||||
// 입력이 없으면 카메라가 보는 앞방향, 있으면 입력 방향
|
||||
_dodgeDir = _moveInput.sqrMagnitude > Mathf.Epsilon ? _moveTargetDir.normalized : camForward;
|
||||
|
||||
// 상태 전환 및 타이머 초기화
|
||||
_stateMachine.ChangeState(PlayerState.Dodge);
|
||||
_dodgeTimer = 0f;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 점프
|
||||
public void JumpInput(InputState inputState)
|
||||
{
|
||||
if(_stateMachine.CanJump())
|
||||
{
|
||||
if (inputState == InputState.Started && _stateMachine.IsGrounded && _stateMachine.CurrentState != PlayerState.Jump && _jumpReadyCoolTimer <= 0f)
|
||||
{
|
||||
_anim.SetTrigger("jumpTrigger");
|
||||
_stateMachine.ChangeState(PlayerState.Jump);
|
||||
_jumpReadyCoolTimer = _jumpReadyCool;
|
||||
_ = Util.RunDelayed(0.7f, JumpAction, default);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void JumpAction()
|
||||
{
|
||||
_velocityY.y = Mathf.Sqrt(_jumpPower * -2f * _gravityValue);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 373d962328bfba94bba93617ed5a4830
|
||||
8
Assets/02_Scripts/Player/FSM.meta
Normal file
8
Assets/02_Scripts/Player/FSM.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ada7592d5969c5d41b789934b619e538
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1
Assets/02_Scripts/Player/FSM/PlayerState.cs
Normal file
1
Assets/02_Scripts/Player/FSM/PlayerState.cs
Normal file
@@ -0,0 +1 @@
|
||||
public enum PlayerState { Idle, Walk, Run, Dodge, Jump, Fall, Attack, Charge, Hit, Dead }
|
||||
2
Assets/02_Scripts/Player/FSM/PlayerState.cs.meta
Normal file
2
Assets/02_Scripts/Player/FSM/PlayerState.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 44cc9d20cdc683d429b6fb86a3ee88c0
|
||||
75
Assets/02_Scripts/Player/FSM/PlayerStateMachine.cs
Normal file
75
Assets/02_Scripts/Player/FSM/PlayerStateMachine.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayerStateMachine : MonoBehaviour
|
||||
{
|
||||
private Animator _anim;
|
||||
|
||||
public PlayerState CurrentState { get; private set; } = PlayerState.Idle;
|
||||
public Action<PlayerState> OnStateChanged; // 상태가 변했을 때 다른 컴포넌트들이 알 수 있도록 이벤트 제공 (함수 포인터 활용)
|
||||
|
||||
public bool IsGrounded { get; set; } //상태 머신이기 때문에 계산은 여기서 안함 (플레이어가 갱신할 수 있도록 set 허용)
|
||||
public bool IsRunInputPressed { get; set; } //달리기키가 눌린 상태인가
|
||||
public bool IsPossibleCharge { get; set; } //현재 차지 가능한 상태인가
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_anim = GetComponent<Animator>();
|
||||
}
|
||||
|
||||
public void ChangeState(PlayerState newState)
|
||||
{
|
||||
if (CurrentState == newState) return;
|
||||
|
||||
// 상태 전환 규칙 (예: 죽었는데 공격 상태로 갈 수 없음)
|
||||
if (CurrentState == PlayerState.Dead) return;
|
||||
|
||||
CurrentState = newState;
|
||||
_anim.SetInteger("playerState", (int)newState);
|
||||
|
||||
OnStateChanged?.Invoke(newState);
|
||||
|
||||
//Debug.Log($"State Switched to: {newState}");
|
||||
}
|
||||
|
||||
#region 상태확인용 헬퍼함수들
|
||||
//지상 이동이 가능한가?
|
||||
public bool CanMove() => IsGrounded && (CurrentState == PlayerState.Idle || CurrentState == PlayerState.Walk || CurrentState == PlayerState.Run);
|
||||
//점프가 가능한 상태인가?
|
||||
public bool CanJump() => IsGrounded && (CurrentState == PlayerState.Idle || CurrentState == PlayerState.Walk || CurrentState == PlayerState.Run);
|
||||
//대쉬가 가능한 상태인가?
|
||||
public bool CanDodge()
|
||||
{
|
||||
// 이미 구르는중
|
||||
if (CurrentState == PlayerState.Dodge) return false;
|
||||
|
||||
// 공중대쉬 제한
|
||||
// if (!IsGrounded) return false;
|
||||
|
||||
// 피격 상태이거나 죽었을 때 안 되게
|
||||
if (CurrentState == PlayerState.Hit || CurrentState == PlayerState.Dead) return false;
|
||||
|
||||
// 스태미나 시스템이 있다면 체크
|
||||
// if (CurrentStamina < DodgeCost) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
//공중에서 조작 가능한 상태인가?
|
||||
public bool CanControlInAir() => !IsGrounded && (CurrentState == PlayerState.Jump || CurrentState == PlayerState.Fall);
|
||||
//공격이 가능한 상태인가?
|
||||
public bool CanAttack()
|
||||
{
|
||||
//이미 공격 중이거나 차징 중이면 공격 불가 (연속기가 있다면 바뀔수 있음)
|
||||
if (CurrentState == PlayerState.Attack || CurrentState == PlayerState.Charge)
|
||||
return false;
|
||||
|
||||
//피격(Hit) 중이거나 죽었다면(Dead) 공격 불가
|
||||
if (CurrentState == PlayerState.Hit || CurrentState == PlayerState.Dead)
|
||||
return false;
|
||||
|
||||
// (Idle, Walk, Run, Jump, Fall 상태에서 공격 가능)
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
2
Assets/02_Scripts/Player/FSM/PlayerStateMachine.cs.meta
Normal file
2
Assets/02_Scripts/Player/FSM/PlayerStateMachine.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6cecb8fbaaff0144ab59c73f78f1ecff
|
||||
8
Assets/02_Scripts/Player/Status.meta
Normal file
8
Assets/02_Scripts/Player/Status.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 697788ed80d084a4dbfe28173f750b6b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
18
Assets/02_Scripts/Player/Status/PlayerHealth.cs
Normal file
18
Assets/02_Scripts/Player/Status/PlayerHealth.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayerHealth : Health
|
||||
{
|
||||
private PlayerStat _pstat;
|
||||
public int currentHp;
|
||||
|
||||
void Start()
|
||||
{
|
||||
_pstat = GetComponent<PlayerStat>();
|
||||
//currentHp = _pstat.MaxHp; // 스태틱 데이터를 가져와 초기화
|
||||
}
|
||||
|
||||
public void TakeDamage(int damage)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Player/Status/PlayerHealth.cs.meta
Normal file
2
Assets/02_Scripts/Player/Status/PlayerHealth.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ab0e8069f023be141afde6c2897d148e
|
||||
10
Assets/02_Scripts/Player/Status/PlayerStat.cs
Normal file
10
Assets/02_Scripts/Player/Status/PlayerStat.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
public class PlayerStat : Stat
|
||||
{
|
||||
public int StrStat;
|
||||
public int IntStat;
|
||||
|
||||
public int AttackPower => StrStat * 2;
|
||||
}
|
||||
2
Assets/02_Scripts/Player/Status/PlayerStat.cs.meta
Normal file
2
Assets/02_Scripts/Player/Status/PlayerStat.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 988583c34b5280e42a4ea5b50a93e1f9
|
||||
8
Assets/02_Scripts/Player/Weapon.meta
Normal file
8
Assets/02_Scripts/Player/Weapon.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f07df026e70bb85439cf32701da085be
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
6
Assets/02_Scripts/Player/Weapon/Weapon.cs
Normal file
6
Assets/02_Scripts/Player/Weapon/Weapon.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class Weapon : MonoBehaviour
|
||||
{
|
||||
private WeaponType weaponType;
|
||||
}
|
||||
2
Assets/02_Scripts/Player/Weapon/Weapon.cs.meta
Normal file
2
Assets/02_Scripts/Player/Weapon/Weapon.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ef0908b448dc79a4cb143afdd40525d1
|
||||
3
Assets/02_Scripts/Player/Weapon/WeaponType.cs
Normal file
3
Assets/02_Scripts/Player/Weapon/WeaponType.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
using UnityEngine;
|
||||
|
||||
public enum WeaponType { Sword, Bow}
|
||||
2
Assets/02_Scripts/Player/Weapon/WeaponType.cs.meta
Normal file
2
Assets/02_Scripts/Player/Weapon/WeaponType.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8a296b618cf084c49a76eaec005fc0ff
|
||||
Reference in New Issue
Block a user