Skip to content

develop knife

Seong Hyeok OH edited this page Mar 11, 2023 · 12 revisions

준비

단검

  • image
  • image
  • image

진화 단검

  • image
  • image
  • image

스크립트


public class Knife : MonoBehaviour
{
    float timer = 0;
    bool useKnife = false;
    Vector3 knifeTransform;
     void Update()
    {
        if (!useKnife) return;  //knife 사용 안할 때 Update를 안 함
        transform.position += knifeTransform * GameManager.instance.character.GetComponent().Weapons[GameManager.instance.character.GetComponent().TransWeaponIndex[2]].WeaponTotalStats[((int)Enums.WeaponStat.ProjectileSpeed)] * Time.deltaTime;
    }

    //ToDo: totalAttackRange 적용하기
    public void FireKnife(GameObject objPre)
    {
        timer += Time.deltaTime;
        if (timer > objPre.GetComponent().WeaponTotalStats[((int)Enums.WeaponStat.Cooldown)])
        {
            for (int i = 0; i < objPre.GetComponent().WeaponTotalStats[((int)Enums.WeaponStat.Amount)]; i++)
            {
                GameObject newobs = Instantiate(objPre);   //skillFiringSystem에서 프리팹 가져오기
                newobs.transform.parent = GameObject.Find("SkillFiringSystem").transform;   //SkillFiringSystem을 부모로 지정하여 프리팹들이 SkillFiringSystem에 관리가 됨
                newobs.transform.position = GameManager.instance.player.transform.position; //시작 위치
                newobs.GetComponent().knifeTransform = setDirection(newobs);
                newobs.GetComponent().useKnife = true;  //true일 경우 Update 실행
                //무기가 몬스터와 충돌이 일어나거나, 화면 밖으로 나가면 삭제 + 관통
            }
            timer = 0;
        }
    }

    private Vector3 setDirection(GameObject obj) {   //무기 방향과 무기가 날라가는 방향 세팅
        if (GameManager.instance.player.Movement.x > 0)
        {
            obj.GetComponent().localScale = new Vector3(2, -2, 1);
            return Vector3.right;
        }
        else if (GameManager.instance.player.Movement.x < 0)
        {
            obj.GetComponent().localScale = new Vector3(2, 2, 1);
            return Vector3.left;
        }
        if (GameManager.instance.player.Movement.y > 0)
        {
            obj.GetComponent().rotation = Quaternion.Euler(0, 0, 0);
            return Vector3.up;
        }
        else if (GameManager.instance.player.Movement.y < 0)
        {
            obj.GetComponent().rotation = Quaternion.Euler(0, 0, 180);
            return Vector3.down;
        }
        else
        {
            return Vector3.zero;    //캐릭터가 안 움직일 경우
        }
    }
}

참고 자료

Clone this wiki locally