Announcement

Collapse
No announcement yet.

카메라 클래스관련 질문합니다.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • replied
    답변 감사합니다 ^^

    해결됬습니다.

    Leave a comment:


  • replied
    if(CamActor != None)
    {
    이부분은 카메라 엑터가 있을경우 입니다 씨네마틱 카메라가 연결되거나 등등 카메라 엑터로 재생될때 쓰여지고
    }
    else 부분이 실제 카메라 제어 부분입니다

    TPawn = Pawn(OutVT.Target);
    저는 이렇게 사용 하는데 OutVT.Target는 카메라가 가르키는 pawn입니다 이걸 받아와서
    1, 2, 3인칭을 할껀지 직접 사용할수 있습니다.

    if( Pawn(OutVT.Target) == None || !Pawn(OutVT.Target).CalcCamera(DeltaTime, OutVT.POV.Location, OutVT.POV.Rotation, OutVT.POV.FOV) )
    {
    타겟을 받아왔다면

    switch( CameraStyle ) 카메라 스타일에 따라서 제어해 주시면 됩니다
    {
    case 'Fixed'
    }

    }

    OutVT.POV은 카메라 속성값이 됩니다
    OutVT.POV.Location = 카메라 위치가 되고
    OutVT.POV.Rotation = 카메라 회전이 됩니다
    TPawn을 이용하여 TPawn.Location + vcameraLocation이라고 한다면 카메라는 pawn에서 항상 vcameraLocation벡터 위치에 있게 됩니다.
    만약에 회전을 하고 싶다면 vcameraLocation을 돌린다면 되겠죠
    OutVT.POV.Rotation를 vcameraLocation과 TPawn.Location을 활용하여 캐릭터를 바라보게끔 할수도 있을겁니다.
    제가 실력이 부족하여 허접한 답변이라 죄송합니다.

    Leave a comment:


  • started a topic 카메라 클래스관련 질문합니다.

    카메라 클래스관련 질문합니다.

    Pawn와 PlayerController에서 카메라 계산을 하는것 말고
    카메라 클래스를 만들어 시점을 구현하고 싶습니다.

    튜토리얼을 보면서 카메라 클래스에 아래와같이 숄더캠 같은것을 구현해놓긴 했는데..
    막상 게임을 실행하고 어떻게 이걸 적용해야될지 모르겠네요
    당연히 이게 어떻게 작동하는지도 모르겠고요

    Code:
    class GPCamera extends Camera;
    
    var float Dist,
              TargetFov,
              Z,
              TargetZ,
              Offset,
              TargetOffset,
              pival;
              
    var GPPlayerController PlayerOwner;
    
    function PostBeginPlay()
    {
    
       Super.PostBeginPlay();
    
       `log("GPCamera 18: PostBeginPlay");
    }
    
    //소유하는 PlayerController에 대한 PlayerCamera 초기화
    function InitializeFor(PlayerController PC)
    {
       Super.InitializeFor(PC);
    
       PlayerOwner = GPPlayerController(PC);
    }
    
    function UpdateViewTarget(out TViewTarget OutVT, float DeltaTime)
    {
       local Vector Loc, Pos, HitLocation, HitNormal;
       local Rotator Rot;
       local Actor HitActor;
       local CameraActor CamActor;
       local TPOV        OrigPOV;
    
       OrigPOV = OutVT.POV;                  //store previous POV, in case we need it later
       OutVT.POV.FOV = DefaultFOV;           //기본 FOV
       CamActor = CameraActor(OutVT.Target); //카메라 액터를 통해 보기
    
       if(CamActor != None)
       {
         CamActor.GetCameraView(DeltaTime, OutVT.POV);
         
         //<---Grap aspect ratio from the CameraActor--->
         bConstrainAspectRatio = bConstrainAspectRatio || CamActor.bConstrainAspectRatio;
         OutVT.AspectRatio = CamActor.AspectRatio;
    
         //<---See if the CameraActor wants to override the postprocess settings used.--->
         CamOverridePostProcessAlpha = CamActor.CamOverridePostProcessAlpha;
         CamPostProcessSettings = CamActor.CamOverridePostProcess;
       }
       else
       {
         //Pawn ViewTarget에 카메라 위치를 기술할 기회 제공
         //Pawn이 카메라 뷰를 오버라이딩하지 않으면, 기본값으로 진행
         if( Pawn(OutVT.Target) == None || !Pawn(OutVT.Target).CalcCamera(DeltaTime, OutVT.POV.Location, OutVT.POV.Rotation, OutVT.POV.FOV) )
         {
    
           switch( CameraStyle )
           {
             case 'Fixed' :
                                OutVT.POV = OrigPOV;
                                break;
    
             case 'ThirdPerson' :
             case 'FreeCam' :
             case 'ShoulderCam' :
    
                                Loc = OutVT.Target.Location;
                                Rot = OutVT.Target.Rotation;
    
                                if(CameraStyle == 'ThirdPerson')
                                {
                                  Rot = PCOwner.Rotation;
                                  TargetZ = 0;
                                  TargetFov = 90;
                                  TargetOffset = 0;
                                }
    
                                if(CameraStyle == 'ShoulderCam')
                                {
                                  Rot = PCOwner.Rotation;
                                  FreeCamDistance = 64;
                                  TargetFOV = 60.0f;
                                  TargetZ = 32;
                                  TargetOffset = 32;
                                }
    
                                if(CameraStyle == 'FreeCam')
                                {
                                  Rot = PCOwner.Rotation;
                                }
    
                                Loc += FreeCamoffset >> Rot;
                                Loc.Z += Z;
    
                                if(Dist != FreeCamDistance)
                                {
                                  Dist = Lerp(Dist, FreeCamDistance, 0.15);
                                }
                                if(Z != TargetZ)
                                {
                                  Z = Lerp(Z, TargetZ, 0.1);
                                }
                                if(DefaultFOV != TargetFOV)
                                {
                                  DefaultFOV = Lerp(DefaultFOV, TargetFOV, 0.1);
                                }
                                if(Offset != TargetOffset)
                                {
                                  Offset = Lerp(Offset, TargetOffset, 0.1);
                                }
    
                                Pos = Loc - Vector(Rot) * Dist;
                                Pos.X += Offset * sin(-Rot.Yaw * pival * 2 / 65536);
                                Pos.Y += Offset * cos(Rot.Yaw * pival * 2 / 65536);
    
                                HitActor = Trace( HitLocation, HitNormal, Pos, Loc, False, vect(12,12,12) );
                                OutVT.POV.Location = (HitActor == None) ? Pos : HitLocation;
                                OutVT.POV.Rotation = Rot;
    
                                break;
    
             default :
                                OutVT.Target.GetActorEyesViewPoint(OutVT.Pov.Location, OutVT.Pov.Rotation);
                                break;
           }//switch end
         }//if end
       }// else end
    
         ApplyCameraModifiers(DeltaTime, OutVT.POV);
    
    }
    
    defaultproperties
    {
      FreeCamDistance = 192.0f
      pival = 3.14159;
    
    }


    이 카메라 클래스를 내가 컨트롤할수있게 하는 방법을 알고싶습니다.
Working...
X