C# 什么';在tween系统中使用指针的最佳方式是什么?
我使用Unity,我需要创建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#中应该使用什么样的指针来完成这项任务
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#脚本的地方,有一个功能齐全的免费版本。