TouchReceiveComponent

엔티티를 터치할 수 있게 되며 터치 시 동작을 제어할 수 있습니다.

# Properties

[{"index":"boolean AutoFitOnce (MakerOnly)","0":"true로 설정하면 AvatarRendererComponent 또는 SpriteRendererComponent의 Scale 값에 맞추어 TouchArea 및 Offset 값을 자동으로 변경됩니다. 최초 한 번만 변경합니다."}]

[{"index":"boolean AutoFitToSize","0":"true로 설정하면 AvatarRendererComponent 또는 SpriteRendererComponent의 Scale 값이 변할 때마다 TouchArea와 Offset 값이 자동으로 변경됩니다."}]

[{"index":"boolean DynamicTouchArea (Deprecated)","0":"더는 사용하지 않는 프로퍼티입니다. AutoFitToSize 프로퍼티를 사용하세요."}]

[{"index":"Vector2 Offset","0":"터치 영역의 중심점을 설정합니다."}]

[{"index":"boolean RelayEventToBehind","0":"렌더링 순서상 뒤에 위치한 TouchReceiveComponent의 터치 이벤트 발생 여부를 설정합니다."}]

[{"index":"Vector2 TouchArea","0":"터치 영역의 크기입니다. AutoFitToSize가 true일 경우 중간에 TouchArea의 값이 변경될 수 있습니다."}]

[{"index":"float TouchAreaUpdateTime (Deprecated)","0":"더는 사용하지 않는 프로퍼티입니다. AutoFitToSize 프로퍼티를 사용하세요."}]

##### inherited from Component:

[{"index":"boolean Enable (Sync)","0":"컴포넌트 활성화 여부를 확인합니다."}]

[{"index":"boolean EnableInHierarchy (ReadOnly) (HideFromInspector)","0":"계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다."}]

[{"index":"Entity Entity (ReadOnly)","0":"이 컴포넌트를 소유한 엔티티입니다."}]

# Methods

##### inherited from Component:

[{"index":"boolean IsClient()","0":"현재 실행 환경이 클라이언트인지 아닌지의 여부를 반환합니다."}]

[{"index":"boolean IsServer()","0":"현재 실행 환경이 서버인지 아닌지의 여부를 반환합니다."}]

# Events

[{"index":"TouchEvent","0":"엔티티를 터치했을 때 발생하는 이벤트입니다. 엔티티에 TouchReceiveComponent가 있어야 이벤트가 발생합니다."}]

[{"index":"TouchHoldEvent","0":"엔티티를 터치하는 동안 발생하는 이벤트입니다. 엔티티에 TouchReceiveComponent가 있어야 이벤트가 발생합니다. 짧게 터치하면 발생하지 않습니다."}]

[{"index":"TouchReleaseEvent","0":"엔티티를 터치를 뗐을 때 발생하는 이벤트입니다. 엔티티에 TouchReceiveComponent가 있어야 이벤트가 발생합니다. 짧게 터치하면 발생하지 않습니다."}]

# Examples

#### TouchEvent

다음은 NPC를 터치하면 관련 UI를 표시하는 예제입니다. NPC와의 대화, 거래 등에 응용할 수 있습니다.
    
    
    @Component
    script UITouchDisplay extends Component
        @EventSender("Self")
        handler HandleTouchEvent(TouchEvent event)
        -- Parameters
        --------------------------------------------------------
    
        local uiPath = "/ui/DefaultGroup/ExampleUI"
        local targetUI = _EntityService:GetEntityByPath(uiPath)
    
        targetUI:SetVisible(true)
        end
    end
    

#### TouchHoldEvent

플레이어가 엔티티를 터치하고 이동시키는 예제입니다. `TouchReceiveComponent`가 엔티티에 추가되어야 합니다.
    
    
    @Component
    script TouchDragger extends Component
        property table Index = {}
        property any Handler = nil
    
        @ExecSpace("ClientOnly")
        method void Move(any screenholdEvent)
        local touchId = screenholdEvent.TouchId
        local touchPoint = screenholdEvent.TouchPoint
    
        local str_var
        for i =1, #self.Index do
        	if self.Index[i] == touchId then
        		self.Entity.TransformComponent.WorldPosition = _UILogic:ScreenToWorldPosition(touchPoint):ToVector3()
        		break
        	end
        end
        end
    
        @ExecSpace("ClientOnly")
        method void AddHandler(integer touchId)
        	if self.Handler ~= nil then
        		return
        	end
    
        	table.insert(self.index, touchId)
        -- 	self.Handler = _InputService:ConnectEvent(ScreenTouchHoldEvent, self.Move)  -- [Commented: MLUA requires handler pattern]
        end
    
        @EventSender("Self")
        handler HandleTouchEvent(TouchEvent event)
        --------------- Native Event Sender Info ----------------
        -- Sender: TouchReceiveComponent
        -- Space: Client
        ---------------------------------------------------------
    
        -- Parameters
        local TouchId = event.TouchId
        local TouchPoint = event.TouchPoint
        ---------------------------------------------------------
    
        self:AddHandler(TouchId)
        end
    
        @EventSender("Self")
        handler HandleTouchHoldEvent(TouchHoldEvent event)
        --------------- Native Event Sender Info ----------------
        -- Sender: TouchReceiveComponent
        -- Space: Client
        ---------------------------------------------------------
    
        -- Parameters
        local TouchId = event.TouchId
        local TouchPoint = event.TouchPoint
        ---------------------------------------------------------
        self:AddHandler(TouchId)
        end
    
        @EventSender("Self")
        handler HandleTouchReleaseEvent(TouchReleaseEvent event)
        	--------------- Native Event Sender Info ----------------
        	-- Sender: TouchReceiveComponent
        	-- Space: Client
        	---------------------------------------------------------
    
        	-- Parameters
        	local TouchId = event.TouchId
        	local TouchPoint = event.TouchPoint
        	---------------------------------------------------------
        	for i =1, #self.Index do
        		if self.Index[i] == TouchId then
        			table.remove(self.index, i)
        			if #self.Index <= 0 then
        -- 				_InputService:DisconnectEvent(ScreenTouchHoldEvent, self.eventHandler)  -- [Commented: Use handler pattern instead]
        				self.Handler = nil
        			end
        			break
        		end
        	end
        end
    end
    

# SeeAlso

  * TransformComponent
  * TouchEvent
  * UILogic
  * EntityService
  * InputService