Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발일기

유니티#4 스크립트 정리 본문

Unity

유니티#4 스크립트 정리

kimjw7815 2024. 12. 26. 12:43

Parameter 진짜;;;;;;;;;;

//PlayerSkill.cs
using UnityEngine;

public class PlayerSkill : MonoBehaviour //Player 오브젝트 연결
{
    public KeyCode skillKey = KeyCode.F;
    public float coolDownTime=3f;
    public Vector3 skillPositionOffset=new Vector3 (0f,0f,0f);
    public Vector3 skillScaleOffset=new Vector3 (1f,1f,1f);
    public RuntimeAnimatorController skillAnimatorController;
    public string skillTriggerParameter="Trigger";
    // public Vector2 size;  // 반경
    // public float forceMagnitude = 10f; // 가할 힘의 크기
    private PlayerMove playerMove;
    private float currentTime;
    private float lastTime;
    private bool canUseSkill=true;
    // private Animator slashAnimator;
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        lastTime=Time.time;
        playerMove = GetComponent<PlayerMove>();
        // size=new Vector2 (2,1);
        // Transform slash1Transform=transform.Find("Slash1");
        // if (slash1Transform != null) {
        //     slash1 = slash1Transform.gameObject;
        //     slashAnimator = slash1.GetComponent<Animator>();
        //     if (slashAnimator == null) Debug.LogError("Animator not found on Slash1!");
        // } else {Debug.LogError("Slash1 object not found!");}
        
        // 무결성 검사
        if (skillAnimatorController == null)
        {
            Debug.LogError("Skill Animator Controller is not assigned!");
            canUseSkill=false;
            return;
        }
        if (playerMove == null) {
            Debug.LogError("PlayerMove Script is null!");
            canUseSkill=false;
            return;
        }
    }

    // Update is called once per frame
    void Update()
    {
        // 키다운 감지
        if (!Input.GetKeyDown(skillKey)) return;
        // 시간 계산
        currentTime=Time.time;
        if (currentTime - lastTime <= coolDownTime) {
            Debug.Log("Skill is on cooldown!");
            return;
        }
        if (!canUseSkill) {return;}
        UseSkill();
        lastTime=Time.time;
    }

    void UseSkill() {
        // 스킬 사용
        // Debug.Log("Skill triggered!");

        // skillObject 생성
        bool direction = playerMove.direction;
        Vector3 adjustedPositionOffset=skillPositionOffset;
        adjustedPositionOffset.x*=(direction?1:-1);
        Vector3 spawnPosition = transform.position + adjustedPositionOffset;

        GameObject skillObject = new GameObject("Skill");
        skillObject.transform.position = spawnPosition;

        // 방향에 따라 X축 반전
        Vector3 scale = skillScaleOffset;
        scale.x *= direction ? 1 : -1;
        skillObject.transform.localScale = scale;

        // 스킬 시전 시간 업데이트
        lastTime = Time.time;

        //SpriteRenderer, Animator, OnAnimationEnd 설정
        SpriteRenderer spriteRenderer = skillObject.AddComponent<SpriteRenderer>();
        Animator skillAnimator = skillObject.AddComponent<Animator>();
        skillAnimator.runtimeAnimatorController = skillAnimatorController;
        skillAnimator.SetTrigger(skillTriggerParameter);
        OnAnimationEndS animationEndScript = skillObject.AddComponent<OnAnimationEndS>();

        // 스킬 자동 삭제 (선택 사항)
        Destroy(skillObject, 1f); // 1초 뒤 삭제
    }

    // private void OnDrawGizmos()
    // {
    //     // 감지 범위를 시각적으로 표시
    //     Gizmos.color = Color.green;
    //     Gizmos.DrawWireCube(transform.position, size);
    // }

}

 

더러운 코드들 다 정리했다

무결성 검사 전부 void Start로 옮겼고 무엇보다 Prefap 들고 오던거를 그냥 Animator 받아오는 거로 바꿨다

근데 얘가 Animator에서 Parameter를 못 받아옴 왜이러지;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

그 밖에 짜잘한 거는 Scale 추가하고 스킬 사용 옮기고 에....... 머시기머시기.

 

이제 playerSkill에서해야할 거

  • Animator Parameter 받아오는 거 수정
  • skillController.cs 만들어서 적용시키기
  • 충돌 잘 되는지 확인하기
  • Gizmos 설정하기

다른 거

  • Enemy HP 만들기
  • UI와 설정창 만들기
  • 스킬 봉인, 해금 아이템 만들기

 

근데 이거 보다보니까 스킬 설정 리스트같은 거로 따로 보관해두고 가져와도 괜찮을 듯? 컴포넌트를 계속 추가할 수는 없으니까

 

//PlayerMove.cs void Update()
if (Input.GetKeyDown(KeyCode.Space) && !(Input.GetKey(KeyCode.S) || v<0) && jumpNum < maxJumpNum)
{
    if ((rigid.linearVelocity.x>0&&!direction)||(rigid.linearVelocity.x<0&&direction)) {
        rigid.linearVelocity=new Vector3 (-rigid.linearVelocity.x, rigid.linearVelocity.y,0);
    }
    Vector2 jumpVec = new Vector2 (0f, 0f);
    if (jumpNum==0) {jumpVec=new Vector3 (rigid.linearVelocity.x, jumpPower);}
    if (jumpNum==1) {
        if (v>0f) {jumpVec=new Vector3 (rigid.linearVelocity.x*0.8f, jumpPower*2f);}
        else {jumpVec=new Vector3 (jumpPower*(direction?1:-1)*2f, rigid.linearVelocity.y+jumpPower*0.3f);}
    }
    rigid.linearVelocity=jumpVec;
    jumpNum++;
}

// ...

if (onGround && h==0) {
    rigid.linearVelocity*=0.9f;
}

+조작감이 조금 이상해서 그냥 점프할 땐 addForce 안쓰고 linearVelocity 쓰게 설정해줬다

'Unity' 카테고리의 다른 글

유니티#6 ScriptableObject  (0) 2024.12.26
유니티#5 private 변수 참조  (0) 2024.12.26
유니티#3 early return, 모듈화 초입  (4) 2024.12.25
유니티#2 prefap  (0) 2024.12.23
유니티#1 animator  (2) 2024.12.23