FootholdComponent

맵의 모든 발판을 관리합니다. 발판은 RigidbodyComponent와 상호작용합니다.

# Properties

##### 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

[{"index":"Foothold GetFoothold(int32 footholdId)","0":"발판에 해당하는 Foothold를 반환합니다."}]

[{"index":"table GetFootholdAll()","0":"맵상의 전체 발판들을 반환합니다."}]

[{"index":"Foothold GetNearestFootholdByPoint(Vector2 point, float distance)","0":"입력한 점에서 distance 범위 안의 가장 가까운 발판을 찾아 반환합니다."}]

[{"index":"Foothold Raycast(Vector2 point, Vector2 direction, float distance)","0":"point 위치에서 direction 방향으로 distance 만큼 이동하는 광선을 쏘고, 이 광선과 충돌하는 첫번째 발판을 찾아 반환합니다."}]

[{"index":"table RaycastAll(Vector2 point, Vector2 direction, float distance)","0":"point 위치에서 direction 방향으로 distance 만큼 이동하는 광선을 쏘고, 이 광선과 충돌하는 모든 발판을 찾아 반환합니다."}]

##### inherited from Component:

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

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

# Examples

화면을 터치하면 랜덤한 한 수를 뽑아 `GetNearestFootholdByPoint`, `Raycast`, `RaycastAll`를 매칭합니다. 이 세 함수를 사용해 탐색되는 동적 발판을 파괴하는 예제입니다.
    
    
    @Component
    script DynamicFootholdDestroyer extends Component
        @ExecSpace("ServerOnly")
        method void GetNearstFootholdByPoint(Vector2 point, number distance)
        local footholdComponent = self.Entity.CurrentMap.FootholdComponent
        if footholdComponent == nil then
        	return
        end
    
        local foothold = footholdComponent:GetNearestFootholdByPoint(point, distance)
        if foothold == nil then
        	log("There is no close foothold.")
        	return
        end
    
        local entity = _EntityService:GetEntity(foothold.OwnerId)
        if entity == nil or entity.CustomFootholdComponent == nil then
        	return
        end
    
        if entity.CustomFootholdComponent.IsDynamicFoothold == false then
        	return
        end
    
        entity:Destroy()
        end
    
        @ExecSpace("ServerOnly")
        method void Raycast(Vector2 direct, number distance)
        local footholdComponent = self.Entity.CurrentMap.FootholdComponent
        if footholdComponent == nil then
        	return
        end
    
        local foothold = footholdComponent:Raycast(self.Entity.TransformComponent.Position:ToVector2(), direct:Normalize(), distance)
        if foothold == nil then
        	log("There is no close foothold.")
        	return
        end
    
        local entity = _EntityService:GetEntity(foothold.OwnerId)
        if entity == nil or entity.CustomFootholdComponent == nil then
        	return
        end
    
        if entity.CustomFootholdComponent.IsDynamicFoothold == false then
        	return
        end
    
        entity:Destroy()
        end
    
        @ExecSpace("ServerOnly")
        method void RaycastAll(Vector2 direct, number distance)
        local footholdComponent = self.Entity.CurrentMap.FootholdComponent
        if footholdComponent == nil then
        	return
        end
    
        local footholds = footholdComponent:RaycastAll(self.Entity.TransformComponent.Position:ToVector2(), direct:Normalize(), distance)
        if footholds == nil then
        	log("There is no close foothold.")
        	return
        end
    
        for i, j in ipairs(footholds) do
        	local entity = _EntityService:GetEntity(j.OwnerId)
        	if entity == nil or entity.CustomFootholdComponent == nil then
        		return
        	end
    
        	if entity.CustomFootholdComponent.IsDynamicFoothold == false then
        		return
        	end
    
        	entity:Destroy()
        end
        end
    
        @EventSender("Service", "InputService")
        handler HandleScreenTouchEvent(ScreenTouchEvent event)
        -- Parameters
        local TouchPoint = event.TouchPoint
        --------------------------------------------------------
        local rand = _UtilLogic:RandomIntegerRange(1,3)
        log(rand)
    
        if rand == 1 then
        	self:GetNearestFootholdByPoint(_UILogic:ScreenToWorldPosition(TouchPoint), 1)
        elseif rand == 2 then
        	self:Raycast(_UILogic:ScreenToWorldPosition(TouchPoint), 5)
        else
        	self:RaycastAll(_UILogic:ScreenToWorldPosition(TouchPoint), 10)
        end
        end
    end
    

# SeeAlso

  * CustomFootholdComponent
  * UILogic
  * math
  * EntityService
  * [발판 만들기](/docs?postId=71)
  * [이동 발판 만들기](/docs?postId=579)