Unity3D_MMO - 능력치 및 레이어 설정

k_hyun·2022년 10월 18일
0

Unity_MMO_Project

목록 보기
22/33

Stat.cs

public class Stat : MonoBehaviour
{
    [SerializeField]
    protected int _level;
    [SerializeField]
    protected int _hp;
    [SerializeField]
    protected int _maxHp;
    [SerializeField]
    protected int _attack;
    [SerializeField]
    protected int _defense;
    [SerializeField]
    protected float _moveSpeed;

    public int Level { get { return _level; } set { _level = value; } }
    public int Hp { get { return _hp; } set { _hp = value; } }
    public int MaxHp { get { return _maxHp; } set { _maxHp = value; } }
    public int Attack { get { return _attack; } set { _attack = value; } }
    public int Defense { get { return _defense; } set { _defense = value; } }
    public float MoveSpeed { get { return _moveSpeed; } set { _moveSpeed = value; } }

    private void Start()
    {
        _level = 1;
        _hp = 100;
        _maxHp = 100;
        _attack = 10;
        _defense = 5;
        _moveSpeed = 5.0f;
    }
}

스탯을 위한 스크립트이다. 몬스터가 될 Knight에 붙여주었다.

PlayerStat.cs

public class PlayerStat : Stat
{
    [SerializeField]
    protected int _exp;
    [SerializeField]
    protected int _gold;

    public int Exp { get { return _exp; } set { _exp = value; } }
    public int Gold { get { return _gold; } set { _gold = value; } }

    private void Start()
    {
        _level = 1;
        _hp = 100;
        _maxHp = 100;
        _attack = 10;
        _defense = 5;
        _moveSpeed = 5.0f;
        _exp = 0;
        _gold = 0;
    }
}

Stat을 상속해서 경험치와 재화를 추가하였다.

Player에 붙여주었다.

PlayerController.cs

    PlayerStat _stat;    
    void Start()
    {
        _stat = gameObject.GetComponent<PlayerStat>();        
    }    

    public enum PlayerState
    {
        Die,
        Moving,
        Idle,
        SKill,
    }    
    
    float moveDist = Mathf.Clamp(_stat.MoveSpeed * Time.deltaTime, 0, dir.magnitude);
  
    int _mask = (1 << (int)Define.Layer.Ground) | (1 << (int)Define.Layer.Monster);

	...
    
    void OnMouseClicked(Define.MouseEvent evt)
    {        
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        // Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);

        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, 100.0f, _mask))
        {
            _destPos = hit.point;
            _state  = PlayerState.Moving;

            if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
                Debug.Log("Monster Clicked!");
            else
                Debug.Log("Ground Clicked!");
        }        
    }
}

PlayerStat _stat을 추가 하여 주었다.

기존에 moveDist에서 _speed에 해당하는 것을 _stat.MoveSpeed로 수정하였다.

그리고 땅과 몬스터 레이어에 해당하는 것을 클릭할때 사용할 _mask 변수를 선언하였다.

관련 내용은 Defince.cs에 적어놓았다.

Define.cs

public enum Layer
    {
        Monster = 8,
        Ground = 9,
        Block = 10,
    }

레이어 관련 열거형 변수를 선언하였다.

실행 결과


로그가 잘 찍히는 것을 확인하였다.

0개의 댓글