UE4 よく使うUPROPERTYメモ


# 詳細ウインドウ周り
## アクセス権系の属性

* 属性毎のアクセス出来る範囲  

|                   |レベルエディター：閲覧|レベルエディター:編集|ブループリントエディター等:閲覧|ブループリントエディター等:編集|
|:-----------------:|:------------------:|:-----------------:|:--------------------------:|:---------------------------:|
|    EditAnywhere   |         ○          |         ○         |             ○              |             ○               |
|  EditDefaultsOnly |         ×          |         ×         |             ○              |             ○               |
| EditInstanceOnly  |         ○          |         ○         |             ×              |             ×               |
|  VisibleAnywhere  |         ○          |         ×         |             ○              |             ×               |
|VisibleDefaultsOnly|         ×          |         ×         |             ○              |             ×               |
|VisibleInstanceOnly|         ○          |         ×         |             ×              |             ×               |


* 実行結果  


```cpp:PropertyActor.h

// 見づらいので他のカテゴリは非表示
UCLASS(HideCategories = (Actor, Input, Rendering, Replication, ActorTick, Transform))
class TESTCPP_API APropertyActor : public AActor
{
	GENERATED_BODY()
public: // Edit系
	UPROPERTY(EditAnywhere, Category = "Edit")
	int32 EditAnywhere;
	UPROPERTY(EditDefaultsOnly, Category = "Edit")
	int32 EditDefaultsOnly;
	UPROPERTY(EditInstanceOnly, Category = "Edit")
	int32 EditInstanceOnly;

public: // Visible系
	UPROPERTY(VisibleAnywhere, Category = "Visible")
	int32 VisibleAnywhere;
	UPROPERTY(VisibleDefaultsOnly, Category = "Visible")
	int32 VisibleDefaultsOnly;
	UPROPERTY(VisibleInstanceOnly, Category = "Visible")
	int32 VisibleInstanceOnly;
	
	// (以下省略

```

レベルエディターの詳細パネル/ブループリントの詳細パネル
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/cea55b44-6ed9-9433-4728-d12f49a49cba.png)![image](https://qiita-image-store.s3.amazonaws.com/0/66029/fd6b19c2-97fe-f6b5-78f0-7ed40e2b5ce1.png)


## その他

### AdvancedDisplay  
カテゴリの下に詳細設定として隠す事が出来ます

```cpp
UPROPERTY(EditAnywhere, AdvancedDisplay, Category = "AdvancedDisplay")
int32 AdvancedDisplay;
```

![image](https://qiita-image-store.s3.amazonaws.com/0/66029/46ac1507-697c-bf2c-0de5-b746293a2c0b.png)

### EditFixedSize  
配列の要素数を変更を禁止します。

```cpp
UPROPERTY(EditAnywhere, EditFixedSize, Category = "EditFixedSize")
TArray<FName> EditFixedSize;
UPROPERTY(EditAnywhere, Category = "EditFixedSize")
TArray<FName> NoEditFixedSize;
```

![image](https://qiita-image-store.s3.amazonaws.com/0/66029/21094c25-b9e3-d879-01a7-245fa4aa31bc.png)

### Instanced(EditInlineは非推奨です)  
インスタンス＋変数値を入れる事が出来ます。
対象のクラスにはUCLASS(EditInlineNew)をつけるようにしてください。  

```cpp:SampleObject.h
UCLASS(EditInlineNew)
class モジュール名_API USampleObject : public UObject
{
	GENERATED_BODY()
public:
	UPROPERTY(EditAnywhere, Category="Variable")
	int32 Variable;	
};
```
```cpp
UPROPERTY(EditAnywhere, Instanced, Category = "Instanced")
USampleObject* Instanced;
```

![image](https://qiita-image-store.s3.amazonaws.com/0/66029/1cf2bfa1-00a6-5c91-8551-eb6357c00aa1.png)

### 条件付

「meta = (EditCondition = 変数名)」で条件付きの変数を作る事が出来ます

```cpp
UPROPERTY(EditAnywhere, Category = "Condition", meta = (EditCondition = bEditCondition))
int32 EditConditionVariable;
UPROPERTY()
bool bEditCondition;
```

![image](https://qiita-image-store.s3.amazonaws.com/0/66029/a643dfc3-f086-e28c-7caf-e5a4ca059651.png)

# ブループリント関連

## ブループリントアクセス権限

```cpp
UPROPERTY(BlueprintReadOnly, Category = "Variable|Blueprint")
int32 BlueprintReadOnly; // Getのみ公開
UPROPERTY(BlueprintReadWrite, Category = "Variable|Blueprint")
int32 BlueprintReadWrite; // Get・Set両方公開
```

![image](https://qiita-image-store.s3.amazonaws.com/0/66029/207443f0-5ff0-9d37-3cb4-e6d69ebd686b.png)

## スポーン時に公開

```cpp
UPROPERTY(BlueprintReadWrite, Category = "Variable", Meta = (ExposeOnSpawn = true))
FVector Location;
```
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/5ba41b2b-678e-94a4-4441-c91a97ed8c6f.png)

# その他

## Show 3D Widget
Meta = (MakeEditWidget = true)を有効にすることで「3Dウィジェットを表示する」が有効になります

```cpp
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Variable", Meta = (MakeEditWidget = true))
FVector Location;
```
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/8461e71f-c59c-3c08-dd19-d499a5d8dae1.png)