Skip to content

develop knife

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

준비

  • Boundary(무기가 화면 밖으로 나가면 삭제 경계선)
  • image

단검

  • image
  • image
  • image

진화 단검

  • image
  • image
  • image

스크립트

  • GameManager

    public int[] killCount = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };   // Whip, MagicWand, Knife, Axe, Cross, KingBible, FireWand, Garlic, SantaWater, Peachone, EbonyWings, Runetracer, LightningRing

  • Weapon

    private void OnTriggerExit2D(Collider2D col)
    {
        if (col.gameObject.tag == "Boundary")
        {
            Destroy(this.gameObject);
        }
    }

-PlayerMovement


    Vector2 preMovement; //이전 이동 방향 벡터 가져오기
    void Update(){
...
        if (movement != Vector2.zero)
        {
            preMovement = movement;
        }
    }
    public Vector2 PreMovement { get { return preMovement; } }


  • Knife

public class Knife : MonoBehaviour
{
    float timer = 0;
    bool useKnife = false;
    Vector3 knifeTransform;
    int touch = 0;
     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;
        if(touch == 3)   //관통 계수
        {
            Destroy(this.gameObject);
        }
    }

    //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;
                newobs.transform.position = GameManager.instance.player.transform.position; //시작 위치
                newobs.GetComponent().knifeTransform = setDirection(newobs);
                newobs.GetComponent().useKnife = true;
            }
            timer = 0;
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.gameObject.tag == "Monster")
        {
            touch++;
        }
    }
    private Vector3 setDirection(GameObject obj) {
        //칼날 방향
        if (GameManager.instance.player.Movement.x > 0)
        {
            obj.GetComponent().flipY = true;
            if (GameManager.instance.player.Movement.y > 0) { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 135); }
            else if (GameManager.instance.player.Movement.y < 0) { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 45); }
            else { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 90); }
        }
        else if (GameManager.instance.player.Movement.x < 0)
        {
            obj.GetComponent().flipY = false;
            if (GameManager.instance.player.Movement.y > 0) { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 45); }
            else if (GameManager.instance.player.Movement.y < 0) { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 135); }
            else { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 90); }
        }
        else
        {
            if (GameManager.instance.player.Movement.y > 0) { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 0); }
            else if (GameManager.instance.player.Movement.y < 0) { obj.GetComponent().rotation = Quaternion.Euler(0, 0, 180); }
            else { obj.GetComponent().rotation = Quaternion.Euler(GameManager.instance.player.PreMovement); }
        }
        //이동 방향을 가져옴
        if (GameManager.instance.player.PreMovement == Vector2.zero){ obj.GetComponent().flipY = true; return Vector3.right;}
        else if (GameManager.instance.player.Movement == Vector2.zero & GameManager.instance.player.PreMovement != Vector2.zero) { return GameManager.instance.player.PreMovement;}
        else { return GameManager.instance.player.Movement; }
    }

참고 자료

Clone this wiki locally