Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';在tween系统中使用指针的最佳方式是什么?_C#_Pointers_Unity3d - Fatal编程技术网

C# 什么';在tween系统中使用指针的最佳方式是什么?

C# 什么';在tween系统中使用指针的最佳方式是什么?,c#,pointers,unity3d,C#,Pointers,Unity3d,我使用Unity,我需要创建tween系统,我将把参数传递给它,它将自己控制它。例如: 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#中应该使用什么样的指针来完成这项任务

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

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;

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

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

例如:

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

using UnityEngine;

public class Tween {

    public Tween (ref float tweenFloat, ref Vector3 tweenVector) {
        tweenFloat = 0.7f;
        tweenVector = new Vector3(0.6f, 1, 12.3f);
    }
}
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);
    }
}
第二十类

using UnityEngine;

public class Tween {

    public Tween (ref float tweenFloat, ref Vector3 tweenVector) {
        tweenFloat = 0.7f;
        tweenVector = new Vector3(0.6f, 1, 12.3f);
    }
}
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)
如您所见,尽管
float
Vector3
是值类型,但通过使用
ref
关键字,您将引用传递给了这些变量,而不是值(这是将值类型作为参数传递给方法/构造函数时的默认行为)

这是第一步

第二步是记住
transform.position.x
(和
y
z
)只有
get
属性,因此不能直接更改其值,但可以整体更改
position
结构。 因此,如果您只需要在结构的x组件之间切换,并且您的
tween
类接受
float
类型:

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

所以这个问题基本上是不适定的。无法维护对Vector3的x整数占用的内存值的引用。您最好保留对变换的引用,并使用另一个(或两个)参数来指示您只希望在其位置的x值之间进行tween。另外,如果您正在寻找快速tween系统,我强烈建议使用DOTween。在涉及C#脚本的地方,有一个功能齐全的免费版本。