2016-05-31 4 views
1

Unity3D 기능인 Vector3을 확장하려고합니다. 그것은 연산자보다 작지 않으므로 하나를 생성하려고합니다. 그러나, 그것에 대한 확장 방법을 쓸 때, 내 IDE는 "Identifier expected, this is a keyword"라고 알려줍니다.Unity3D, 운영자를위한 확장 방법을 작성하려면 어떻게해야합니까?

연산자를 사용하여 확장 메서드를 작성하려면 어떻게해야합니까? 이것은 예기치 않게 작동하지 않은 시도입니다.

using UnityEngine; 
using System.Collections; 

public static class Vector3Extensions 
{ 
    public static bool operator <(this Vector3 vector3, Vector3 other) 
    { 
     if (vector3.x < other.x) 
     { 
      return true; 
     } 
     else if (vector3.x > other.x) 
     { 
      return false; 
     } 
     else if (vector3.y < other.y) 
     { 
      return true; 
     } 
     else if (vector3.y > other.y) 
     { 
      return false; 
     } 
     else if (vector3.z < other.z) 
     { 
      return true; 
     } 
     return false; 
    } 
} 
+0

여기에있는 새로운 Unity 프로그래머를위한 확장 기능에 대한 간략한 소개는 ... http://stackoverflow.com/a/35629303/294884 Unity에서 확장 기능은 가장 기본적인 기능입니다. 항상. 거의 모든 유니티 코드는 거의 모든 라인에 확장 기능을 가지고 있습니다. 그것은 코드 측면에서 Unity의 엔지니어링에 대한 "기본 아이디어"입니다. – Fattie

+0

이것은 처음에 다른 벡터보다 적은 벡터를 어떻게 설명합니까? 더 적은 또는 더 많은 것을 가정하면 벡터에 대한 합리적인 용어가됩니다. 덜 중요하거나 더 의미가있는 것은 벡터의 크기이며 플로트로 가져옵니다. 네, 그게 당신의 실제 질문과 아무 관련이 없다는 것을 압니다. – yes

답변

5

운영자에게 과부하를 적용하는 방법은 사용할 수 없습니다. 아마도 .LessThan을 추가 할 수 있습니다.

-2

확장 메소드가 아니고 연산자 오버로드입니다. 주장이 MSDN documentation를 참조하십시오

비교 연산자 오버로드 할 수 있습니다 (그러나 아래 참고 참조) ==, =, <,>, < =,> =

!. 참고 비교 연산자가 오버로드 된 경우에는 쌍으로 오버로드해야합니다. 즉, ==이 오버로드되면! = 또한 오버로드되어야합니다. 그 반대의 경우도 마찬가지이며, < 및>에 대해서는 < = 및> =에 대해서도 마찬가지입니다.

전체 설명서 here.

+1

이렇게하려면 Unity의 일부이며 편집 할 수없는 Vector3 클래스 안에 넣어야합니다. –

+0

오, 그래, 내 잘못. 나는 그것을 깨닫지 못했다. –