主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2017年4月13日木曜日

UE4プログラミング学習編(その3)

■プレイヤー制御のカメラ(参考

  • EAutoReceiveInputでは最大8人までのプレーヤーの入力を検出できる模様
  • 「プロジェクト設定」で入力の名称をチュートリアルと違うものにしつつも、スクリプト側の入力名称を変えていなかったため動作せず無駄に嵌った
  • FVector2DクラスにはIsZeroという関数がある
  • 移動はSetActorLocationにFVectorを渡す形で行われている。この関数はActorで定義されている。

①MyPawnの場合

if (!CurrentVelocity.IsZero())
  {
   FVector NewLocation = GetActorLocation() + (CurrentVelocity * DeltaTime);
   SetActorLocation(NewLocation);
  }
 
→現在座標にそのままベクトルを足しているので、ワールド空間での移動となる

②PawnWithCameraの場合

if (!MovementInput.IsZero())
  {
   //Scale our movement input axis values by 100 units per second (移動入力軸の値を 1 秒あたり 100 単位でスケーリング)
   MovementInput = MovementInput.SafeNormal() * 100.0f;
   FVector NewLocation = GetActorLocation();
   NewLocation += GetActorForwardVector() * MovementInput.X * DeltaTime;
   NewLocation += GetActorRightVector() * MovementInput.Y * DeltaTime;
   SetActorLocation(NewLocation);
  }
 
→現在座標に現在向いている向きに掛け算したベクトルを足しているので、ローカル空間での移動となる

  • 「CollidingPawnMovementComponent.h」ファイルのクラス定義で TickComponent をオーバーライドする(CollidingPawn.hと間違えて色々嵌った)
  • 重要】リストの最後の #include は、generated.hにしないとコンパイルエラーとなる。詳細不明
  • 重要】クラス名の付け間違いを発端にコンパイルエラー地獄となった
    • UE4エディター上ではC++ファイルの削除やリネームが容易でない
    • ファイル名とクラス名を修正して何とか解決した
    • 尚、クラス名を付け間違えたのは日本語チュートリアルには「CollidingPawnMovementコンポーネント」と記載されており、無意識のうちに英字部分だけコピペしていたため
  • 今回のスクリプトで作られた親子関係は次のようになった

    • CreateDefaultSubobjectで型と名前を決め、SetupAttachmentで親子関係を作る
    • 「RootComponent」と名付けたUSphereComponentがUnityでいうShpereColliderに当たる模様(参考1参考2
    • 「VisualRepresentation」はUStaticMeshComponentで、外観担当。指定パス先のメッシュをセットしている。半径50で生成されるらしく、親の半径に合わせるためにスケールと中心点を調整している。
    • 「MovementParticles」はUParticleSystemComponentで、炎のパーティクルアセットをセットしている
      • このON/OFFについては後述
    • 「CameraAttachmentArm」はUE4で度々出てくるUSpringArmComponent。
    • 「ActualCamera」は普通のカメラ。これまで同様にCameraAttachmentArmにアタッチするが、第二引数が何なのか不明。チュートリアル曰く「Spring Arm には、ベース以外に親子付けが出来る特別な内蔵ソケットがあります」とのこと(参考)。

    パーティクルシステムのON/OFF

    //入力イベントの登録
    void ACollidingPawn::SetupPlayerInputComponent(class UInputComponent* InputComponent)
    {
     Super::SetupPlayerInputComponent(InputComponent);
    
     InputComponent->BindAction("ParticleToggle", IE_Pressed, this, &ACollidingPawn::ParticleToggle);
    
     ...
    }
    
    //実行部
    void ACollidingPawn::ParticleToggle()
    {
     if (OurParticleSystem && OurParticleSystem->Template)
     {
      OurParticleSystem->ToggleActive();
     }
    } 
    
    • 条件分は調査中
    • ToggleActiveはアクティブの切り替え(参考

    0 件のコメント:

    コメントを投稿