보통 자신의 폰에 대한 컨트롤은 PlayerController를 상속한 클래스에서 처리합니다. 이 경우 별도로 MyPawn의 현재 인스턴스를 찾을 필요는 없이 그저 PlayerController.Pawn 멤버를 사용하면 됩니다.
자신의 폰과 컨트롤들을 설정하는 방법은 여기를 참고하세요.
원하시는 것을 제가 아는 방식으로 구현해보면,
MyPawn.uc
Code:
class MyPawn extends Pawn
var float BaseGroundSpeed;
...
exec function SpeedUp()
{
BaseGroundSpeed=800
}
event Tick(float DeltaTime)
{
GroundSpeed = BaseGroundSpeed;
// SpeedUp 지속시간이 종료되면 속도를 원래대로 돌립니다.
if (SpeedUpIsOver)
{
BaseGroundSpeed = Default.BaseGroundSpeed;
}
}
DefaultProperties
{
BaseGroundSpeed=400
}
SeqAct_SpeedUp.uc
Code:
class SeqAct_SpeedUp extends SequenceAction
event Activated()
{
local MyPlayerController PC;
foreach GetWorldInfo().DynamicActors(class'MyPlayerController',PC)
{
MyPawn(PC.Pawn).SpeedUp();
}
ActivateOutputLink(0);
}
DefaultProperties
{
ObjName="Speed up my pawn"
ObjCategory="My Action"
InputLinks.Empty
InputLinks(0)=(LinkDesc="Start")
OutputLinks.Empty
OutputLinks(0)=(LinkDesc="Finished")
VariableLinks.Empty
}
이제 키즈맷을 띄워서 New Action>>My Action>>Speed up my pawn 을 클릭하여 엑션을 추가하고, 원하는 트리거에 연결하면, 모든 플레이어의 속도가 빨라집니다.
SeqAct_SpeedUp.Activated() 함수 내용을 수정해서 어느 지역 근처에 있는 플레이어 또는 자신 또는 기타 등등의 조건을 만들어 넣을 수 있습니다. 예를 들어, 변수로 충돌 볼륨을 설정할 수 있게 해주고 그 안에 있는 플레이어만 속도를 올리는 것도 가능합니다.
Bookmarks