# 用户属性上报

> 来源：https://help.gravity-engine.com/docs/client-sdk/unity/user-properties
> 说明如何使用 Gravity Engine Unity SDK 设置、追加、累加和删除用户属性，并提供参数要求与调用示例。



本文档详细介绍了 SDK 提供的用户属性上报功能，帮助开发者高效地收集、更新和维护用户画像数据。

通过本功能，您可以：

* **全面记录用户特征**：存储用户基础信息（如昵称、性别）、行为偏好等关键数据
* **灵活更新用户画像**：支持覆盖、追加、数值计算等多种更新方式
* **构建精准用户模型**：通过属性组合分析，实现用户分群和个性化服务

> **如需上报自定义的用户属性，您必须先在[元数据](https://web.gravity-engine.com/#/manage/metadata/userProperty)中添加对应的用户属性，否则会上报失败！**

## 1. 设置用户属性 [#1-设置用户属性]

对于一般的用户属性，您可以调用 `UserSet` 来进行设置，使用该接口上传的属性将会覆盖原有的属性值。

```csharp
GravityEngineAPI.UserSet(new Dictionary<string, object>()
{
    {"USER_PROP_NUM", 0},
    {"USER_PROP_STRING", "A3"}
});
```

## 2. 初始化用户属性 [#2-初始化用户属性]

如果您要上传的用户属性只要设置一次，则可以调用 `UserSetOnce` 来进行设置，当该属性之前已经有值的时候，将会忽略这条信息：

```csharp
GravityEngineAPI.UserSetOnce(new Dictionary<string, object>()
{
    {"USER_PROP_NUM", -50},
    {"USER_PROP_STRING", "A3"}
});
```

## 3. 累加用户属性 [#3-累加用户属性]

当您要上传数值型的属性时，您可以调用 `UserAdd` 来对该属性进行累加操作，可传入负值，等同于相减操作。

```csharp
GravityEngineAPI.UserAdd(new Dictionary<string, object>()
{
    {"USER_PROP_NUM", -100.9},
    {"USER_PROP_NUM2", 10.0}
});
```

> 设置的属性 key 为字符串，Value 只允许为数值。

## 4. 重置用户属性 [#4-重置用户属性]

如果您需要重置用户的某个属性，可以调用 `UserUnset` 将该用户指定用户属性的值重置，此接口支持传入字符串、列表、布尔类型的参数。

```csharp
// 删除单个用户属性
GravityEngineAPI.UserUnset("userPropertyName");

// 删除多个用户属性
GravityEngineAPI.UserUnset(new List<string>() {"age", "$name", "$first_visit_time", "movies"});
```

> `UserUnset` 的传入值为被重置属性的 Key 值。

## 5. 清空用户属性 [#5-清空用户属性]

如果您要删除某个用户，可以调用 `UserDelete` 将这名用户删除，您将无法再查询该名用户的用户属性，但该用户产生的事件仍然可以被查询到。

```csharp
GravityEngineAPI.UserDelete();
```

## 6. 用户属性追加（Array） [#6-用户属性追加array]

可以调用 `UserAppend` 为 List 类型的用户属性追加元素。

```csharp
List<string> propList = new List<string>();
propList.Add("Interstellar");
propList.Add("The Negro Motorist Green Book");

// 为属性名为 movies 的用户属性追加 2 个元素
GravityEngineAPI.UserAppend(new Dictionary<string, object>()
{
    {"movies", propList}
});
```

## 7. 用户属性去重追加（Array） [#7-用户属性去重追加array]

可以调用 `UserUniqAppend` 为 List 类型的用户属性进行去重追加元素。

```csharp
List<string> propList = new List<string>();
propList.Add("Interstellar");
propList.Add("The Shawshank Redemption");

// 为属性名为 movies 的用户属性去重追加 2 个元素
GravityEngineAPI.UserUniqAppend(new Dictionary<string, object>()
{
    {"movies", propList}
});
```

## 8. 用户属性取最大值 [#8-用户属性取最大值]

对于数值型的用户属性，可以使用 `UserNumberMax` 用来比较数值大小，保存较大的。

```csharp
GravityEngineAPI.UserNumberMax("age", 10);
```

## 9. 用户属性取最小值 [#9-用户属性取最小值]

对于数值型的用户属性，可以使用 `UserNumberMin` 用来比较数值大小，保存较小的。

```csharp
GravityEngineAPI.UserNumberMin("age", 10);
```
