我使用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类自动设置其值。我应该在这里使用什么?
答案 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)
正如您所看到的,即使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;