Transform.position(set)과 Transform.Translate의 차이점을 알아 보겠습니다.

차이점을 알아 보기전 아래의 두 스크립트를 살펴봐주세요.

Transform.position & Transform.Translate

 

결론부터 말씀 드리면 위의 두 스크립트는 동일하게 동작합니다.

 

하지만 동작원리는 갖지 않습니다.

Transform.position은 월드의 절대 좌표(혹은 월드 좌표)를 기준으로 동작하고 Transform.Translate는 자기 자신 즉, 로컬 좌표를 기준으로 동작합니다.

 

즉, 위의 스크립트를 설명하자면

1번의 경우  Transform.position(get)으로 현재 자신의 월드 좌표를 가지고 와서 그 월드 좌표에 (0.01, 0, 0)을 더하기 한후 다시 자신의 그 더해진 좌표로 Transform.position(set)해주고 있습니다. Transform.position(set)은 그 좌표로 이동한다는 의미입니다. 이것이 PC 프레임마다 Update되기 때문에 0.01씩 계속 이동하게 됩니다.

 

2번의 경우 절대 좌표는 상관없습니다. 자신(This)의 위치 Transform.Translate에서 매 프레임마다 0.01씩 X축으로 이동하라는 의미입니다.

사용하기 나름이겠지만 보통 비행기가 이동하거나 특정 오브젝트를 따라가거나 할 때(몬스터가 Player 캐릭터를 따라가기)는 Transform.Translate를 사용합니다.

Transform.Translate에 대해 추가적인 설명글이 별도로 있습니다.

'VS 유닛' 카테고리의 다른 글

Time Units  (1) 2021.08.24
Control units  (0) 2021.08.24
This unit  (0) 2021.08.24
유닛의 종류  (0) 2021.08.23
Transform.Translate  (0) 2021.07.23

Object를 이동시키는 매우 단순한 Visual Script입니다.

 

위 스크립트는 X축으로 Update Frame마다 0.01씩 움직입니다.

참고) 오브젝트를 이동시키는 방법은 여러가지가 있다. 여기서는 쉽게 이해할 수 있도록 가장 단순한 개념인 Transform.position을 이용하였다. 다른 방법들은 다른 글을 통해 소개하였다.

 

참고> Unity 2022  버전 이후로는 나타나지 않는 문제입니다.

 

My Unity Version: [2021.1.10f1]

현재 2021 Unity Version에서 Visual Script를 실행하면 다음과 같은 에러가 발생됩니다.

--------- Error Message ---------

Failed to fetch inherited attributes on Unity.Plastic.Antlr3.Runtime.Tree.CommonTree.

System.TypeLoadException: Could not load type Antlr.Runtime.Tree.AntlrRuntime_BaseTreeDebugView while decoding custom attribute: (null)

  at (wrapper managed-to-native) System.MonoCustomAttrs.GetCustomAttributesInternal(System.Reflection.ICustomAttributeProvider,System.Type,bool)

  at System.MonoCustomAttrs.GetCustomAttributesBase (System.Reflection.ICustomAttributeProvider obj, System.Type attributeType, System.Boolean inheritedOnly) [0x00013] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at System.MonoCustomAttrs.GetCustomAttributes (System.Reflection.ICustomAttributeProvider obj, System.Type attributeType, System.Boolean inherit) [0x002b3] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at System.RuntimeType.GetCustomAttributes (System.Type attributeType, System.Boolean inherit) [0x00038] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at System.Attribute.GetCustomAttributes (System.Reflection.MemberInfo element, System.Boolean inherit) [0x00052] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at Unity.VisualScripting.AttributeUtility+AttributeCache..ctor (System.Reflection.MemberInfo element) [0x0002c] in D:\ProjectsDev\001 Purple Ocean Git\8 Visual Script Tutorial\Visual Script Tutorial\Library\PackageCache\com.unity.visualscripting@1.6.1\Runtime\VisualScripting.Core\Reflection\AttributeUtility.cs:56 

UnityEngine.Debug:LogWarning (object)

Unity.VisualScripting.AttributeUtility/AttributeCache:.ctor (System.Reflection.MemberInfo) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Runtime/VisualScripting.Core/Reflection/AttributeUtility.cs:66)

Unity.VisualScripting.AttributeUtility:GetAttributeCache (System.Reflection.MemberInfo) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Runtime/VisualScripting.Core/Reflection/AttributeUtility.cs:266)

Unity.VisualScripting.AttributeUtility:HasAttribute<Unity.VisualScripting.SerializedPropertyProviderAttribute> (System.Reflection.MemberInfo,bool) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Runtime/VisualScripting.Core/Reflection/AttributeUtility.cs:337)

Unity.VisualScripting.SingleDecoratorProvider`3/<>c<System.Type, Unity.VisualScripting.ISerializedPropertyProvider, Unity.VisualScripting.SerializedPropertyProviderAttribute>:<MapAttributeTypes>b__9_0 (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:57)

System.Linq.Enumerable/WhereEnumerableIterator`1<System.Type>:MoveNext ()

Unity.VisualScripting.SingleDecoratorProvider`3<System.Type, Unity.VisualScripting.ISerializedPropertyProvider, Unity.VisualScripting.SerializedPropertyProviderAttribute>:MapAttributeTypes () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:57)

Unity.VisualScripting.SingleDecoratorProvider`3<System.Type, Unity.VisualScripting.ISerializedPropertyProvider, Unity.VisualScripting.SerializedPropertyProviderAttribute>:.ctor () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:23)

Unity.VisualScripting.SerializedPropertyProviderProvider:.ctor ()

Unity.VisualScripting.SerializedPropertyProviderProvider:.cctor () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/SerializedProperties/SerializedPropertyProviderProvider.cs:37)

Unity.VisualScripting.InspectorProvider:CustomPropertyDrawerInspector (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:148)

Unity.VisualScripting.InspectorProvider:ResolveDecoratorType (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:42)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:TryGetDecoratorType (System.Type,System.Type&) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:85)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:GetDecoratorType (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:104)

Unity.VisualScripting.InspectorProvider:HasInspector (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:158)

Unity.VisualScripting.InspectorProvider:GetDecoratedType (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:31)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:CreateDecorator (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:42)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:GetDecorator (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:251)

Unity.VisualScripting.XInspectorProvider:Inspector (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:174)

Unity.VisualScripting.LudiqGUI:GetInspectorHeight (Unity.VisualScripting.Inspector,Unity.VisualScripting.Metadata,single,UnityEngine.GUIContent) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Interface/LudiqGUI.cs:77)

Unity.VisualScripting.VariablesEditor:GetHeight (single,UnityEngine.GUIContent) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Variables/VariablesEditor.cs:14)

Unity.VisualScripting.Inspector:GetCachedHeight (single,UnityEngine.GUIContent,Unity.VisualScripting.Inspector) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Inspector.cs:228)

Unity.VisualScripting.Inspector:GetLayoutPosition (UnityEngine.GUIContent,single,UnityEngine.RectOffset) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Inspector.cs:317)

Unity.VisualScripting.Inspector:DrawLayout (UnityEngine.GUIContent,single,UnityEngine.RectOffset) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Inspector.cs:322)

Unity.VisualScripting.LudiqRootObjectEditor/Individual:OnGUI () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Root/LudiqRootObjectEditor.cs:52)

Unity.VisualScripting.OptimizedEditor`1<Unity.VisualScripting.LudiqRootObjectEditor/Individual>:OnInspectorGUI () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/OptimizedEditor.cs:31)

UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

 

Machine 추가시 Versiion Control과의 충돌 경고

 

이는 Unity에 기본적으로 설치된 "Version Control" 기능과 충돌이 나기 때문입니다.

이를 해결하기 위해서는 Version Control을 제거(Remove)하면 됩니다.

Version Control은 Unity "Collaborate" 기능과 "Plastic SCM"을 이용하는 것과 관련이 됩니다. 위 기능을 이미 아시는 분이라면 스스로 판단하시면 되지만 그렇지 않다면 사용할 일이 없을 듯 합니다. 게임 또는 앱을 만드는 유니티 본연의 기능과는 무관하고 팀작업을하거나 파일 관리를 지원하는 것인데 대부분 git이나 SVN을 사용할 가능성이 높고 개인 프로젝트라면 굳이 필요치 않습니다. 과감히 삭제하셔도 무관합니다.

 

"Unity > Window > Package Manager"에서 Version Control을 찾아 우측 하단의 "Remove"버튼을 눌러 제거해주세요.

 

 

유니티가 업데이트되면서 언젠가는 위 문제가 해결이 되지 않을까 싶습니다.

 

 <간략소개>

이 글을 읽고 있다면 이미 비주얼 스크립트가 무엇인지 어느 정도는 알고 있으리라 판단이 됩니다. 따라서 복잡한 설명은 생략하고 한 가지만 말씀드린다면 어려운 코딩작업이 없이도 PC, 모바일(ANDROID, APPLE), WebGL 등 다양한 플랫폼의 앱이나 게임을 만드는게 가능하다는 것입니다. 그런데 중요한 것은 어느 수준의 어플리케이션을 개발할 수 있는가인데 적어도 이글에 관심이 있는 분이 상상하시는 것 정도는 모두 개발 가능하다고 감히 말씀드릴 수 있습니다.

유니티 비주얼 스크립트 혹은 볼트(Bolt) 스크립트에 대한 탄생 배경이나 지나온 과정들에 대한 이야기는 네이버 혹은 구글 검색을 통해 확인해 보시기 바랍니다.

 

<유니티 설치하기>

Visual Script를 사용하기 위해서는 유니티를 먼저 설치해야 합니다. 파워풀한 유니티 엔진을 코딩없이 사용할 수 있다는 것이 매우 놀라울 따름입니다.

유니티는 2021년도 최신버전을 설치해야합니다.

이전 버전들과는 달리 Visual Script가 기본으로 탑재되어 있기 때문에 별도의 Visual Script Package를 설치할 필요없이 바로 사용이 가능합니다.

 

가. 회원가입하기

     https://unity.com/kr 

     아직 유지티에 회원가입이 되어 있지않다면 위 사이트를 방문해서 먼저 가입해주세요!

 

나. 유니티 허브(Unity Hub) 설치하기

 ㄱ) 다운로드 링크: https://unity3d.com/get-unity/download

 ㄴ) Download Unity Hub를 클릭하여 설치 파일을 다운로드하고 설치하세요!

 

 ㄷ) 유니티 허브 실행과 로그인

      유니티 허브를 실행하고 유니티에 가입한 ID로 로그인을 합니다.

 

 

 ㄹ) 라이선스 등록



다. 유니티 설치하기

     참고) ②번에서는 [정식 릴리스 > Unity 2021 version]이면서 최신 버전을 설치하면 됩니다.

             만약, 권장릴리스(2022년 이후 부터)에 Unity 2021 version이 있다면 권장 릴리스에 있는 2021버전 설치를 하면면 됩니다.

 

    참고) ④번에서 Visual Studio Community는 Visual Script의 목적상 필수는 아니겠으나 그래도 설치를 권장합니다. 그리고 ⑤번 이후부터는 메시지가 나오면 확인 버튼만 누르면서 지나가면 됩니다.

 

<처음보는 비주얼 스크립트>

 가. 유니티 프로젝트 생성하기

    참고) ⑤번은 원하는 폴더를 선택하면 됩니다.아니면 기본 폴더에 생성하세요!

            추후 삭제를 위해 생성 위치를 잘 기억해 주세요!


나. 무작정 따라해보는 Visual Script

     참고) 유니티에 익숙하신 분이라면 아주 잠깐만에 끝나는 작업입니다.

 

 

 

 

Script Machine 파일 생성하기

 

 

Fuzzy Finder(퍼지 파인더)

 

 

 

 

 

    Graph 하나를 추가해서 3D 큐브가 회전하는 것을 구현하였습니다.

 

 

참고) 바로 위에 보이는 마지막 이미지의 Visual Script는 아래의 C#코드를 작성하여 Cube에 적용한 것과 동일합니다.

  using System.Collections;
  using System.Collections.Generic;
  using UnityEngine;


  public class CubeRotator : MonoBehaviour
  {
      // Start is called before the first frame update
      void Start()
      {
        
      }


      // Update is called once per frame
      void Update()
      {
          transform.Rotate(10, 10, 10);
      }
  }    

 

+ Recent posts