auの日記

プログラミング初心者の日記。(auはハンドルネームです)

UE4でC++をいじりたかった・・・

auです・・・。

UE4C++を使うぞ!っと思って色々と調べてみたのですが、スタートアップの段階で???状態になってしまいました。

コードの中のどこに記述すればいいんだろうから始まり、色々と調べてみて、記述してみたらエラーを吐いてしまう・・・

実行環境

コードとエラーメッセージ

// Fill out your copyright notice in the Description page of Project Settings.
#include "Kismet/GameplayStatics.h"

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "DGGameClear.generated.h"


/**
 * 
 */
UCLASS()
class DOTGOAL_API ADGGameClear : public AGameModeBase
{
	GENERATED_BODY()
	ACharacter* MyCharacter = Cast<ACharacter>(UGameplayStatics::GetPlayerPawn(this, 0));
	// if (MyCharacter)
	// {
    // 	// do anything.
	// }
};
||<<

エラーメッセージ
>||
Running Mono...

Setting up Mono
/Users/Shared/Epic Games/UE_4.20/Engine /Users/Shared/Epic Games/UE_4.20/Engine/Binaries/Mac
Compiling game modules for hot reload
Performing 3 actions (12 in parallel)
[1/3] Compile DGGameClear.cpp
[2/3] Compile DGGameClear.gen.cpp
In file included from /Users/ユーザ名/Documents/Unreal Projects/DotGoal/Intermediate/Build/Mac/UE4Editor/Inc/DotGoal/DGGameClear.gen.cpp:7:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/GeneratedCppIncludes.h:6:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/Object.h:8:
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectBaseUtility.h:493:14: error: incomplete type 'ACharacter' named in nested name specifier
                return IsA(T::StaticClass());
                           ^~~
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/Templates/Casts.h:129:22: note: in instantiation of function template specialization 'UObjectBaseUtility::IsA<ACharacter>' requested here
                return Src && Src->IsA<To>() ? (To*)Src : nullptr;
                                   ^
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/Templates/Casts.h:193:30: note: in instantiation of member function 'TCastImpl<APawn, ACharacter, ECastType::UObjectToUObject>::DoCast' requested here
        return TCastImpl<From, To>::DoCast(Src);
                                    ^
/Users/ユーザ名/Documents/Unreal Projects/DotGoal/Source/DotGoal/DGGameClear.h:18:28: note: in instantiation of function template specialization 'Cast<ACharacter, APawn>' requested here
        ACharacter* MyCharacter = Cast<ACharacter>(UGameplayStatics::GetPlayerPawn(this, 0));
                                  ^
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/Engine/Classes/GameFramework/Controller.h:12:7: note: forward declaration of 'ACharacter'
class ACharacter;
      ^
In file included from /Users/ユーザ名/Documents/Unreal Projects/DotGoal/Intermediate/Build/Mac/UE4Editor/Inc/DotGoal/DGGameClear.gen.cpp:7:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/GeneratedCppIncludes.h:6:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/Object.h:8:
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectBaseUtility.h:493:15: error: incomplete definition of type 'ACharacter'
                return IsA(T::StaticClass());
                           ~^~
In file included from /Users/ユーザ名/Documents/Unreal Projects/DotGoal/Source/DotGoal/DGGameClear.cpp:3:
In file included from /Users/ユーザ名/Documents/Unreal Projects/DotGoal/Source/DotGoal/DGGameClear.h:2:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/Engine/Classes/Kismet/GameplayStatics.h:7:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/Object.h:8:
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectBaseUtility.h:493:14: error: incomplete type 'ACharacter' named in nested name specifier
                return IsA(T::StaticClass());
                           ^~~
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/Templates/Casts.h:129:22: note: in instantiation of function template specialization 'UObjectBaseUtility::IsA<ACharacter>' requested here
                return Src && Src->IsA<To>() ? (To*)Src : nullptr;
                                   ^
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/Templates/Casts.h:193:30: note: in instantiation of member function 'TCastImpl<APawn, ACharacter, ECastType::UObjectToUObject>::DoCast' requested here
        return TCastImpl<From, To>::DoCast(Src);
                                    ^
/Users/ユーザ名/Documents/Unreal Projects/DotGoal/Source/DotGoal/DGGameClear.h:18:28: note: in instantiation of function template specialization 'Cast<ACharacter, APawn>' requested here
        ACharacter* MyCharacter = Cast<ACharacter>(UGameplayStatics::GetPlayerPawn(this, 0));
                                  ^
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/Engine/Classes/GameFramework/Controller.h:12:7: note: forward declaration of 'ACharacter'
class ACharacter;
      ^
In file included from /Users/ユーザ名/Documents/Unreal Projects/DotGoal/Source/DotGoal/DGGameClear.cpp:3:
In file included from /Users/ユーザ名/Documents/Unreal Projects/DotGoal/Source/DotGoal/DGGameClear.h:2:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/Engine/Classes/Kismet/GameplayStatics.h:7:
In file included from /Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/Object.h:8:
/Users/Shared/Epic Games/UE_4.20/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectBaseUtility.h:493:15: error: incomplete definition of type 'ACharacter'
                return IsA(T::StaticClass());
                           ~^~
2 errors generated.
2 errors generated.
ERROR: UBT ERROR: Failed to produce item: /Users/ユーザ名/Documents/Unreal Projects/DotGoal/Binaries/Mac/UE4Editor-DotGoal-629.dylib
       (see ../Programs/UnrealBuildTool/Log.txt for full exception trace)
Total build time: 10.28 seconds (Local executor: 0.00 seconds)

やったこと思ったこと

MyCharacterの情報を取り出そうと思ったけどうまくいかず、エラーメッセージが出てしまう。

VSコードで記述し、UE4コンパイルしていたが、その方法がそもそもの間違い?

正直どこに記述すればいいのか分かっていない時点で勉強不足なので、チュートリアルからやるべきだと思った

UE4でC++はいつ使うのか調べてみた

auです。

UE4で現在ゲーム制作をしているのですが、ブループリントばかり使っていて、C++はいつ使うのが適切なのかよくわからない状況になってしまっています。

C言語は勉強をしたので、その知識だけでもできる範囲でC++で何かしら機能を実装したいと考えているので、現在作っているゲームのどこで使用できるかを考えるためにも調べてみました。

参考にさせてもらった記事

historia.co.jp
unrealengine.hatenablog.com

分かったこと

どちらがいいという答えはないというのが結論でした。

ブループリントは、視覚的にとてもわかりやすく、どのアクタを参照しているという情報をすぐに取り出せるなど、コードではすぐに分からないことがすぐにわかり、エラーを吐く回数を少なくできるというのがメリットだと思いました。

これを書いてしまうと、全部ブループリントでいいんじゃね?という風にも思ったのですが、C++は、ブループリントには用意されてない機能を使う際には必要になります。

パフォーマンスの面でみると、C++の方が早く書けることには書けるのですが、メモリ管理などがとても大変なのはC言語を学ぶ際に勉強しました。そのため、メモリ管理をうまく行わないと、すぐにクラッシュしてしまうという問題があり、慣れている人でないとグレーな感じなのかもしれません。

メモリ管理という点で見ると、C++で実装する機能は限定して、ブループリントで実装できそうな場所はブループリントを利用しようと思います。それでもC++はいじってみたい!と思うので、クラッシュしにくそうな場所をやろうと思います。

UE4のビヘイビアツリーとは

auです。

ビヘイビアツリーについて調べました。

ビヘイビアツリーとは

ビヘイビアツリー(BehaviorTree)とは、AIを作る手段の一つです設定した優先順位によって行動が決まります。

例えば、敵が見える範囲であれば追いかけ、壁などで遮られたら探すという風にAIの切り替えを実装するときに使います。

つまり、キャラクターの思考・行動をツリー構造的に配置して、自分でキャラクターの動きを作り上げることができます。

AIをUE4で作れるということで結構ワクワクしました。

簡単ですが、今日はこれくらいにしようと思います。

IoTシステム技術検定について調べてみた

auです。

IoT系の技術に興味があり、試験とかないのかなーと思い調べてみたら「IoTシステム技術検定」という資格がありました

IoTシステム技術検定とは

IoTシステム技術検定は、IoTシステムの基本知識についての、技術者向けの資格です。

検定は基礎・中級・上級の3段階で存在します。

しかし、2019年1月の時点では上級の試験は行われていないようです。

こちらのサイトに出題範囲などが載っていました。
proengineer.internous.co.jp

大学で習った範囲だと、まだ初級レベルまでしか習ってないのかなーと思います。中級も部分的には解けそうな感じはしました。

過去問は存在しなくて、公式サイトにサンプル問題があるだけみたいです。個人的にはサンプル問題の数がものすごく少ないと感じました。ここにあるテキストで勉強するしかないのかなー?

公式のサンプル問題が載っているサイト
www.mcpc-jp.org

どこかの機会で力試し的な意味も込めて受けてみたいと思っています。

UE4のアンカーについて調べてみた

auです。

UE4ウィジェットを設定する際に、アンカーと呼ばれる設定があるのですが、何をするものかわからなかったので調べてみました。

アンカーとは

アンカーは、アスペクト比によってパーツの配置がおかしくならないように調節する際に使用します。

アンカーを設定した場所から配置した他のUIウィジェットの距離を計算して、画面サイズをいい感じに調整してくれます。

アンカーを設置した場所から計算して、画面の幅を超えてしまった範囲は黒く表示されます。

アスペクト比を16:9から3:4に変更したりすると、デフォルトのアンカーの位置である左上の場合、下の方が途切れてしまい、いい配置とは言えません。しかし、途切れてしまうのであれば、下にアンカーを配置すると解決するかもしれないという可能性があります。

アンカー自体はボタンや文字に細かく設定することができるので、アスペクト比を変更する場合は設定しておいて対応できるようにしましょう。

6LoWPANとは

auです。

IoT規格で使われる6LoWPANについて調べました。

6LoWPANとは

6LoWPAN(シックスロウパン)は、IPv6 over Low-Power Wireless Personal Area Networksの略語です。長い。

IPv6と、IEEE802.15.4標準との互換性のためのアダプテーションレイヤーで、OSI参照モデルでは、ネットワーク層プロトコルです。

IoT機器で使用するためには、低電力かつ省メモリでなければありません。

そこで、6LowPANを利用することで、パケットをフレーム内に収まるように小さなフレームにフラグメンテーションし、その後リアセンブリすることで小さなバッファでも通信が可能になります。

6LoWPANは、IoT機器の通信を実装する際に使うと思うので、もっと深く学びたいと思います。

MacでGIF画像の作り方

auです。

最近やっとGIF画像という、動く画像をはてなブログに貼り付けることができましたので、メモとして残したいと思います。

用意するアプリ

  • Quick Time Player

f:id:program-shoshinsya:20190206175722p:plain:h120

  • Gifted

f:id:program-shoshinsya:20190206175756p:plain:h120

やり方

1. Quick Timer Playerを開き、「新規画面撮影」を選択します
f:id:program-shoshinsya:20190206175847p:plain
2. 真ん中の赤いボタンをクリックし、撮影する範囲を選択します。
3. 収録開始を選択して撮影します。
f:id:program-shoshinsya:20190206180531p:plain
4. 終わりでいいかなーってところで「停止」を押して保存します。この際にトリミングなどが必要であるならします。
f:id:program-shoshinsya:20190206180701p:plain
5. Giftedを開き、「Drop a movie or click here to pick one」と書いてある枠に先ほど保存したファイルを選択orドロップして、スタートを押します。完成するファイル名は、「名付けた名前.mov.gif」となります(デフォルトの場合)。
f:id:program-shoshinsya:20190206181044p:plain:h240

Gifに変換が終わると勝手にフォルダが開きます。

フォルダが開かない、見つからない場合

ユーザ名/ピクチャ/Gifted

にあります。(デフォルトの場合)

あとはこのファイルをはてなブログにアップロードすることで使用することができます!