我正在编写一个简单的游戏,其中玩家必须收集一些物品。我想要做的是,在收集一个物体后,场景逐渐消失几秒钟,然后玩家位置发生变化。
我知道如何改变位置,我不知道如何制作淡出效果。我尝试过使用图像效果(例如Vortex和Blur),但是我无法慢慢增加它们的变量(例如Vortex的角度值和模糊的模糊迭代),这样就给人一种动画的印象。
有人可以指导我完成这个吗?
答案 0 :(得分:2)
将ScreenOverlay图像效果添加到相机,将BlendMode设置为ScreenBlend,将Intensity设置为0,然后添加以下脚本:
INCREMENT
要增加持续时间,只需缩小$(document).ready(function () {
$('#tableresult').on('click', '#del', (function () {
var row = $(this).attr('id');
$.ajax({
type: "GET",
url: 'http://yoursite_url/delete.php',
data: {id: row },
success: function (result) {
$('#'+row).remove();
}
});
});
});
即可。
它对我来说很完美。
答案 1 :(得分:1)
您可以在场景中添加带纹理的新对象,这样就像全局蒙版。如果你想让淡入淡出效果下的场景变成黑色,那么填充黑色的小方块纹理就足够了,你可以正确缩放它以适应相机。 此材质上的着色器应支持透明度,以便纹理的alpha图层可以管理。 然后,您可以使用renderer.sharedMaterial.SetFloat()方法从代码中操作alpha值。
这样的事情:
IEnumerator SetTransparencyLevel(bool fullyTransparent)
{
for (var i = renderer.material.GetFloat("Alpha"); fullyTransparent && i > 0 || !fullyTransparent && i < 1; i+=0.05f)
{
renderer.material.SetFloat("Alpha", i);
yield return new WaitForEndOfFrame();
}
}
我没有测试这段代码,但它显示了方法。
答案 2 :(得分:0)
我最近一直在为实验性2D游戏做类似的事情。我发现最好的方法是使用一个非常简洁的免费库 - LeanTween。您可以在普通游戏对象和Unity UI元素上使用它。这就是淡出的样子。
LeanTween.alpha (gameObject, 0.0f, 1.0f);
第一个参数应该是你要淡出的游戏对象,第二个参数是你想要的alpha值(0.0f会完全淡出对象),最后一个是动画的持续时间。
答案 3 :(得分:0)
您还可以使用 CanvasGroup 并使用协程更改 alfa。我认为这是一个简单的方法。
这就是我在游戏中所做的:
public class Fader : MonoBehaviour {
private CanvasGroup _canvasGroup;
private Coroutine _currentActiveFade;
private void Awake() {
_canvasGroup = GetComponent<CanvasGroup>();
}
public void FadeOutImmediately() => _canvasGroup.alpha = 1;
public Coroutine FadeOut(float time) => Fade(1, time);
public Coroutine FadeIn(float time) => Fade(0, time);
private Coroutine Fade(float target, float time) {
if (_currentActiveFade != null) StopCoroutine(_currentActiveFade);
_currentActiveFade = StartCoroutine(FadeRoutine(target, time));
return _currentActiveFade;
}
private IEnumerator FadeRoutine(float target, float time) {
while (!Mathf.Approximately(_canvasGroup.alpha, target)) {
_canvasGroup.alpha = Mathf.MoveTowards(_canvasGroup.alpha, target, Time.deltaTime / time);
yield return null;
}
}
}