(如何)我可以为变量引用制作字典吗?

(How) Can I make a Dictionary for variable references?

我有很多功能基本上以相同的方式工作,只是使用不同的变量。简短示例:

[SyncVar] private Vector3 syncedPlayerPosition;
[SyncVar] private Vector3 syncedHandPosition;

private Transform playerTransform;
private Transform handTransform;

private float lerpPlayerPositionRate;
private float lerpHandPositionRate;

void SetPlayerPosition(){

    if(playerTransform.position != syncedPlayerPosition){
        playerTransform.position = Vector3.Lerp(playerTransform.position, syncedPlayerPosition, Time.deltaTime * lerpPlayerPositionRate);
    }
}

void SetHandPosition(){

    if(handTransform.position != syncedHandPosition){
        handTransform.position = Vector3.Lerp(handTransform.position, syncedHandPosition, Time.deltaTime * lerpHandPositionRate);
    }
}

如您所见,这两个函数基本上做同样的事情,只是使用了不同的变量。

现在我正在寻找这样的东西(假设 Dictionarys 会那样工作)

[SyncVar] private Vector3 syncedPlayerPosition;
[SyncVar] private Vector3 syncedHandPosition;

private Transform playerTransform;
private Transform handTransform;

private float lerpPlayerPositionRate;
private float lerpHandPositionRate;

/* Add Dictionaries to reference those variables */
private Dictionary<Transform,Vector3> positionDict = new Dictionary<Transform,Vector3>();
private Dictionary<Transform,float> lerpRateDict = new Dictionary<Transform,float>();

private void Start(){
    /* Fill the Dictionaries with Links between the Transforms
     * to the achording variable reference */

    /* Until now not the references are linked but rather values written */
    positionDict.Add(playerTransform, syncedPlayerPosition);
    positionDict.Add(handTransform, syncedHandPosition);

    lerpRateDict.Add(playerTransform, lerpPlayerPositionRate);
    lerpRateDict.Add(handTransform, lerpHandPositionRate);
}

/* Than I could use (and change) only one common function for both e.g like */
void SetPosition(Transform transform){

    if(transform.position != positionDict[transform]){
        transform.position = Vector3.Lerp(transform.position, positionDict[transform], Time.deltaTime * lerpRateDict[transform]);
    }

    /* Add this only as example that also this has to be posible */
    lerpRateDict[transform] += 1;
    positionDict[transform] = Vector3.zero(); 
}

我实际上以这种方式尝试过,但意识到 Dictionary 中的值没有得到更新,而是保留在调用 Start() 时的任何位置。所以在我看来,它们不是由 Reference 添加到 Dictionary 中的,而是由 Value.

添加的

是否有可能以某种方式设置它,以便在字典中实际存储的不是值而是对现有变量的引用?我怎样才能实现这样的目标?

我真的有很多这样的功能,每一个小的改变都必须一个一个地应用到它们上。像我正在寻找的设置将允许我只对所有这些更改进行一次。

编辑
我忘了提到:在这些函数中,有时 Vector3float 值可能会改变,而不仅仅是 Transforms.

为什么不创建一个可以为所有转换调用的方法:

void SyncPositions(Transform thisTransform, Vector3 targetPosion, float rate)
{
    if (thisTransform.position != targetPosion)
    {
        thisTransform.position = Vector3.Lerp(thisTransform.position, targetPosion, Time.deltaTime * rate);
    }
}

你可以调用它来进行玩家变换或手部变换。

SyncPosition(playerTransform,syncedPlayerPosition,lerpPlayerPositionRate);
SyncPosition(handTransform,syncedHandPosition,lerpHandPositionRate);

希望这对您有所帮助