스크립트 리팩토링

비주얼 스크립팅은 프로젝트의 사용자 지정 스크립트에서 메소드(methods), 필드(fields) 및 속성(properties)을 자동으로 호출한다. 예를 들어 TakeDamage 메소드(Method)가 있는 사용자 지정 플레이어 클래스(Class)를 유닛으로  생성할 수 있다.

using UnityEngine;

public class Player : MonoBehaviour 

    public void TakeDamage(int damage)
    {
        // ... 
    }
}


스크립트 그래프에서 스크립트를 변경하거나, TakeDamage 메서드 또는 Player 클래스의 이름을 바꾸거나 제거하면 그 그러나 사항들이 바로 반영될 것이다.

Player Take Damage
Player Take Damage


C# 스크립트가 다음 처럼 변경이 된다면.


using UnityEngine; 

public class Player : MonoBehaviour 

    public void InflictDamage(int damage)
    {
        // ... 
    }
}


결국, 유닛은 그래프 창에서 빨간색으로 바뀌고 비주얼 스크립팅은 콘솔에 경고를 표시한다.


Warning
Warning


  Failed to define Bolt.InvokeMember:
  System.MissingMemberException: No matching member found: 'Player.TakeDamage'



멤버(Members) 리네임하기


이전 예제에서 오류를 수정하려면 C# 스크립트 파일을 다시 열고 새 이름을 이전 이름으로 변경하면 된다. [RenamedFrom] 속성(Attribute)을 이용한다. 단일 String 매개 변수를 사용하는데 원래 멤버의 이름(TakeDamage)을 입력한다.


using UnityEngine;
using Unity.VisualScripting;

public class Player : MonoBehaviour 
{
    [RenamedFrom("TakeDamage")] 
    public void InflictDamage(int damage)
    {
        // ... 
    }
}


다시 컴파일을 완료한 후에도 해당 속성(Attribute)은 소스에 남겨두는 것이 좋다. 비주얼 스크립팅이 Unity가 모든 그래프를 정상적으로 작성된 이름으로 Reserialize(재직렬화)를 보장하지는 않는다. 비주얼 스크립팅의 [RenamedFrom] 속성(Attribute)은 Unity 자신의 [FormerlySerializedAs] 속성(Attribute)처럼 작동한다.



타입 리네임하기


[RenamedFrom] 속성을 사용하여 타입(클래스, 구조체 및 열거형 포함)의 이름을 변경할 수 있다. 


예를 들어, Player Class 이름이 Character로 변경된다:


using UnityEngine; 
using Unity.VisualScripting;

[RenamedFrom("Player")] 
public class Character : MonoBehaviour 
{
    [RenamedFrom("TakeDamage")] 
    public void InflictDamage(int damage)
    {
        // ... 
    }
}

 

참고: 이전 이름에는 네임스페이스(namespace)가 포함되어야 한다. 만약, 글로벌 네임스페이스에 있었다면 필요하지는 않다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-refactoring.html

댓글

이 블로그의 인기 게시물

EMACS - 파일 열기, 저장, 도움말

EMACS - 검색 및 바꾸기

EMACS, CLISP, SLIME 설치