Results 1 to 4 of 4
  1. #1

    Default 언리얼 초보의 스크립트에 대한 질문입니다.

    언리얼 스크립트에 대한 개념이 안잡힌거 같아서 질문을 해봅니다.


    보통 다른 언어에서는 다른 클래스에 있는 함수를 불러오기 위해 include로 참조하여 변수를 만들어 사용하는데

    언리얼에서는 어떻게 하는지 궁굼합니다.


    예로 제가 하고있는 프로젝트에서는 MyPawn 이라는 pawn 클래스를 만들고 여기서 GroundSpeed를 기본으로 400값을 주었습니다.

    그리고 함수를 만들어서 그 함수가 호출되면 GroundSpeed를 800으로 올리려고 하는데

    다른 클래스에서 var MyPawn MyP; 이렇게 만들고 MyP.SpeedUp(); 이렇게 하면 아무것도 안되더군요..(SpeedUp이 800으로 올리는 함수)

    그리고 이게 된다면 키즈멧에서 트리거에 연결하여 캐릭터가 트리거에 충돌하면 SpeedUp이라는 함수를 호출하고 싶은데

    이것도 어떻게 해야 할지 모르겠더군요...


    다른 카페나 블로그에서 참고하여 foreach AllActors나 exec function으로 만들어서 console command로 불러온다거나
    다른 것들을 사용하라고 봤는데 어떻게 사용해야 할지 몰라서요..
    자세한 답변 부탁드립니다..

  2. #2
    MSgt. Shooter Person
    Join Date
    May 2011
    Location
    Busan Korea Republic of
    Posts
    275

    Default

    DefaultEngine.ini 에 배열된 언리얼 스크립트 패키지 순서대로 컴파일을 합니다.

    즉, 하위에 배열된 패키지들은 상위에 배열된 패키지의 스크립트를 모두 인클루드한다고 표현할 수 있습니다.

    그러므로 클래스 파일에 따로 임포트 또는 인클루드를 명시하지 않습니다.


    적어주신 예시는 위의 내용과 관련이 없습니다.

    이 문제는 참조가 비었기 때문에 생긴 문제지 상속이나 컴파일에 관한 문제가 아닙니다.

    다른 클래스에서 생성한 MyP는 MyPawn의 빈 참조자(널 포인터, MyP == none)이지

    새로운 인스턴스(레벨에 배치한 인스턴스는 더더욱)가 아닙니다.

    이벤트나 함수를 통해 배치한(또는 원하는) 인스턴스의 참조를 MyP에 할당한 뒤 프로퍼티에 엑세스 해야 합니다.
    Last edited by donggas90; 03-25-2012 at 02:04 PM.
    Intel Core i5 2500K 4.0GHz O.C
    16GB RAM
    GeForce 560Ti O.C
    ASUS P67 Chipset
    Windows 7 Ultimate K 64bit

  3. #3
    Skaarj
    Join Date
    Oct 2011
    Location
    서울,Seoul
    Posts
    2

    Default

    보통 자신의 폰에 대한 컨트롤은 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() 함수 내용을 수정해서 어느 지역 근처에 있는 플레이어 또는 자신 또는 기타 등등의 조건을 만들어 넣을 수 있습니다. 예를 들어, 변수로 충돌 볼륨을 설정할 수 있게 해주고 그 안에 있는 플레이어만 속도를 올리는 것도 가능합니다.
    Last edited by junhan627; 03-29-2012 at 10:41 PM.
    순수한 재미-Pure Fun
    http://junhan627.blogspot.com

  4. #4
    MSgt. Shooter Person
    Join Date
    May 2011
    Location
    Busan Korea Republic of
    Posts
    275

    Default

    Quote Originally Posted by junhan627 View Post
    보통 자신의 폰에 대한 컨트롤은 PlayerController를 상속한 클래스에서 처리합니다. 이 경우 별도로 MyPawn의 현재 인스턴스를 찾을 필요는 없이 그저 PlayerController.Pawn 멤버를 사용하면 됩니다.
    PlayerController.Pawn은 플레이어 컨트롤러 인스턴스가 빙의(Possess)한 폰 인스턴스의 참조입니다.

    MyPawn.uc
    Code:
    function SpeedUp()
    {
         self.GroundSpeed = 800;
    }

    MyPlayerController.us
    Code:
    MyPlayerController extends PlayerController;
    
    function CallSpeedUp()
    {
          MyPawn(self.Pawn).SpeedUp();
    }
    Intel Core i5 2500K 4.0GHz O.C
    16GB RAM
    GeForce 560Ti O.C
    ASUS P67 Chipset
    Windows 7 Ultimate K 64bit


 

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Copyright ©2009-2011 Epic Games, Inc. All Rights Reserved.
Digital Point modules: Sphinx-based search vBulletin skin by CompletevB.com.