我不知道正确的术语,但我有一个简单的C#代码片段,它补充了一些像这样的对象:
camera.gameObject.transform.DOMove(target,3.0f)
.SetEase(Ease.InOutQuad)
.OnComplete(animation.FadeIn);
但我需要做的是根据这样的特定条件向该链添加另一种方法:
camera.gameObject.transform.DOMove(target,3.0f)
.SetEase(Ease.InOutQuad)
//the general idea
if(visible == true){
.OnStart(animation.FadeOut);
}
.OnComplete(animation.FadeIn);
显然这是一个语法错误,但我不知道正确的方法来处理这样的语法。
我应该怎样接近它?
答案 0 :(得分:1)
您需要将整个块放在if
- else
语句中,不能将其分解:
if(visible == true){
camera.gameObject.transform.DOMove(target,3.0f)
.SetEase(Ease.InOutQuad) .OnStart(animation.FadeOut).OnComplete(animation.FadeIn);
}
else {
camera.gameObject.transform.DOMove(target,3.0f)
.SetEase(Ease.InOutQuad).OnComplete(animation.FadeIn);
}
Alertnatively:
var intermediateObject = camera.gameObject.transform.DOMove(target,3.0f)
.SetEase(Ease.InOutQuad);
if (visible) {
intermediateObject.OnStart(animation.FadeOut).OnComplete(animation.FadeIn);;
}
else {
intermediateObject.OnComplete(animation.FadeIn);;
}
var
关键字意味着您不需要自己担心对象的类型,但是再一次,它的使用确实会妨碍可读性(在我看来)。
答案 1 :(得分:1)
如果您想将所有内容保存在一个链中,可以尝试使用If
扩展名:
internal static T If<T> (this T source, bool isTrue, Action<T> thenAction) {
if (isTrue) {
thenAction(source);
}
return source;
}
如果OnStart
返回相同的camera
对象,此扩展程序将有效。否则,应更改If
扩展名。
然后你的代码看起来像这样:
camera.gameObject.transform.DOMove(target,3.0f).
SetEase(Ease.InOutQuad)
If(visible == true, value => value.OnStart(animation.FadeOut)).
OnComplete(animation.FadeIn)
如果OnStart
实际上返回了不同的object
:
internal static T If<T> (this T source, bool isTrue, Func<T, T> thenFunction) =>
isTrue ? thenFunction(source) : source;