Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
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
31
Tags
more
Archives
Today
Total
관리 메뉴

개발일기

유니티#14 구조체와 리팩토링은 신이야 본문

Unity

유니티#14 구조체와 리팩토링은 신이야

kimjw7815 2025. 1. 2. 16:24
//SkillHandler.cs
public class SkillParameters
{
    public SkillData skillData;
    public Vector3 positionOffset;
    public Vector3 scaleOffset;
    public int animationIndex = 0;
    public bool spawnRelativeToPlayer = true;

    public SkillParameters(SkillData skillData, Vector3 positionOffset, Vector3 scaleOffset, int animationIndex = 0, bool spawnRelativeToPlayer = true)
    {
        this.skillData = skillData;
        this.positionOffset = positionOffset;
        this.scaleOffset = scaleOffset;
        this.animationIndex = animationIndex;
        this.spawnRelativeToPlayer = spawnRelativeToPlayer;
    }
}
// ...
GameObject InitializeGameObject(string name, Vector3 positionOffset, Vector3 scaleOffset, bool spawnRelativeToPlayer = true)
    {
        GameObject obj = new GameObject(name);

        if (spawnRelativeToPlayer)
        {
            obj.transform.localPosition = playerObject.transform.localPosition;
            positionOffset = new Vector3(
                positionOffset.x * (playerMovement.GetDirection() ? 1 : -1), 
                positionOffset.y, positionOffset.z
            );
        }
        obj.transform.localPosition += positionOffset;

        // 방향에 따른 X축 반전
        if (spawnRelativeToPlayer)
            scaleOffset.x *= playerMovement.GetDirection() ? 1 : -1;
        obj.transform.localScale = scaleOffset;

        return obj;
    }

구조체와 리팩토링은 신이야 구조체와 리팩토링은 신이야 구조체와 리팩토링은 신이야 구조체와 리팩토링은 신이야 구조체와 리팩토링은 신이야

 

 

//SkillHandler.cs
// 구조체X, 리팩토링X
GameObject MakeSkillEffectObject(
    SkillData skillData, Vector3 positionOffset, Vector3 scaleOffset,
    int animationIndex=0, bool spawnRelativeToPlayer=true
)
{
    GameObject effectObject = new GameObject("EffectObject");
    effectObject.transform.localPosition = new Vector3 (0f,0f,0f);
    if (spawnRelativeToPlayer) {
        effectObject.transform.localPosition = playerObject.transform.localPosition;
        positionOffset = new Vector3(positionOffset.x*(playerMovement.GetDirection()?1:-1), positionOffset.y, positionOffset.z);
    }
    effectObject.transform.localPosition += positionOffset;

    // 방향에 따라 X축 반전
    Vector3 skillScale = scaleOffset;
    if (spawnRelativeToPlayer) {
        skillScale.x *= playerMovement.GetDirection() ? 1 : -1;
    }
    effectObject.transform.localScale = skillScale;
    
    // 생략...
}

// 구조체O, 리팩토링O
GameObject MakeSkillEffectObject(SkillParameters skillParams)
{
    GameObject effectObject = InitializeGameObject(
        "EffectObject",
        skillParams.positionOffset,
        skillParams.scaleOffset,
        skillParams.spawnRelativeToPlayer
    );
    
    // 생략...
}