什么是在补间系统中使用指针的最佳方法?

时间:2017-06-22 15:21:26

标签: c# pointers unity3d

我使用Unity,我需要创建补间系统,我将传递参数,它将自己控制它。例如:

Tween tween = new Tween( "tween_move_x", 0.0f, 10.0f, 1.5f, someGameObject.transform.position.x );

该代码将自动设置值传递给param:someGameObject.transform.position.x从0.0f到10.0f 1.5秒。

我是初学者,我不明白我应该在c#中使用什么样的指针来执行此任务。我试着用这样的东西:

float *controlledParamValue;

但它说我需要使用不安全和固定的块。我认为在这个问题上使用它并不是最好的主意。我只想将managedParamValue链接到someGameObject.transform.position.x,以便从Tween类自动设置其值。我应该在这里使用什么?

1 个答案:

答案 0 :(得分:1)

您不需要使用C#指针,只需使用ref关键字。

例如:

补间课

using UnityEngine;

public class Tween {

    public Tween (ref float tweenFloat, ref Vector3 tweenVector) {
        tweenFloat = 0.7f;
        tweenVector = new Vector3(0.6f, 1, 12.3f);
    }
}

TweenTest类

using UnityEngine;

public class TweenTest : MonoBehaviour {

    float myFloat = 0;
    Vector3 myVector = Vector3.zero;
    Tween myTween;

    void Start () {
        myTween = new Tween(ref myFloat, ref myVector);     
        Debug.Log(myFloat);
        Debug.Log(myVector);
    }
}

如果您将TweenTest附加到游戏对象并运行场景,则输出将为:

0.7
UnityEngine.Debug:Log(Object)

(0.6, 1.0, 12.3)
UnityEngine.Debug:Log(Object)

正如您所看到的,即使floatVector3是值类型,使用ref关键字也会传递对这些变量的引用而不是值(这是默认值将值类型作为参数传递给方法/构造函数时的行为。

这是第一步。

第二步是要记住transform.position.x(以及yz)只有get的适当性,因此您无法直接更改其值,但您可以整体更改position结构。 因此,如果您只需要补间结构的x组件,并且Tween类接受float类型:

Vector3 positionVector = transform.position;
myTween = new Tween(*your other parameters*, ref positionVector.x);
transform.position = positionVector;