개발일기
유니티#14 구조체와 리팩토링은 신이야 본문
//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
);
// 생략...
}
'Unity' 카테고리의 다른 글
| 유니티#16 SkillHandler 스크립트 정리, 인터페이스(추상 클래스) (0) | 2025.01.06 |
|---|---|
| 유니티#15 UI 활용 (1) | 2025.01.03 |
| 유니티#13 NPC 구현 (0) | 2025.01.02 |
| 유니티#12 Hierarchy 정리, Tilemap 활용 (0) | 2025.01.01 |
| 유니티#11 Tilemap (0) | 2024.12.31 |
