Unity屏幕晃动解决方法

编程入门 行业动态 更新时间:2024-10-10 20:19:16

Unity屏幕晃动<a href=https://www.elefans.com/category/jswz/34/1770089.html style=解决方法"/>

Unity屏幕晃动解决方法

在寒假实习中做消除游戏时需要实现一个效果:多行消除时有一个屏幕晃动的特效,其实这个没什么难的,看了一篇别人的博客,他就完全通过改变摄像机的范围来模拟场景中所有物体的移动,但是我发现并不适用于我这里,因为我是全部使用UGUI做的这个游戏,哈哈哈,那就很尴尬,不过他的思路给了我灵感,所以自己写了个UGUI进行晃动的代码:

如果要晃动屏幕就需要新建一个Panel把所有UI放置到其下,再把脚本挂给他,需要屏幕晃动的时候就调用Shake方法即可,如果仅仅是某个UGUI元素那么加给它即可

public class ShakePoint : MonoBehaviour
{//这里的目标点就是移动的目标位置:因为策划明确指出了数值public Transform[] targetPos;//最后要回到起始位置所以记录一下private Vector3 origionPos;//当前目标点索引private int currentIndex;//是否开启晃动public static bool isshake = false;//到目标点多远算到public float arriveDistance;[Range(0,1)]public float speed;void Start(){origionPos = transform.position;}// Update is called once per framevoid Update(){if (isshake){if (currentIndex >= targetPos.Length){isshake = false;currentIndex = 0;transform.position = origionPos;}else {Vector3 target = targetPos[currentIndex].position;transform.position = Vector3.Lerp(transform.position, target, speed);if (Vector3.Distance(target, transform.position) <= arriveDistance) {currentIndex++;}}}}public static void Shake(){isshake = true;}
}

当然只是指定目标位置的方式,只是出于要求才这么做,其实应该是随机的晃动,所以我们先看看上面说的别人做的就知道怎么随机才是最好的:

public class ShakeCamera : MonoBehaviour
{private float shakeTime;//晃动时间private float fps;//晃动频率private float frameTime;private float shakeDelta;//晃动幅度public Camera cam;public static bool isshakeCamera = false;void Start(){shakeTime = 1.0f;fps = 30.0f;shakeDelta = 0.005f;}// Update is called once per framevoid Update(){if (isshakeCamera){if (shakeTime > 0){shakeTime -= Time.deltaTime;if (shakeTime <= 0){cam.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);isshakeCamera = false;shakeTime = 1.0f;fps = 20.0f;shakeDelta = 0.005f;}else{frameTime += Time.deltaTime;if (frameTime > 1.0 / fps){frameTime = 0;cam.rect = new Rect(shakeDelta * (-1.0f + 2.0f * Random.value), shakeDelta * (-1.0f + 2.0f * Random.value), 1.0f, 1.0f);}}}}}public static void shakeCamera(){isshakeCamera = true;}}

所以我们再为UGUI的晃动写一个随机的方式:

public class ShakeUI : MonoBehaviour
{public float shakeTime = 1.0f;//晃动时长public float fps = 30.0f;//晃动频率public float shakeValue = 10.0f;//振幅private float frameTime = 0f;private Vector3 origionPos;public static bool isshake = false;void Start(){origionPos = transform.position;}// Update is called once per framevoid Update(){if (isshake){if (shakeTime > 0){shakeTime -= Time.deltaTime;if (shakeTime <= 0){isshake = false;transform.position = origionPos;shakeTime = 1.0f;fps = 20.0f;frameTime = 0;}else{frameTime += Time.deltaTime;if (frameTime > 1.0 / fps){frameTime = 0;Vector3 target = new Vector3(Random.Range(-shakeValue, shakeValue), Random.Range(-shakeValue, shakeValue), 0) + transform.position;transform.position = Vector3.Lerp(transform.position, target, 0.5f);}}}}}public static void shakeCamera(){isshake = true;}
}

更多推荐

Unity屏幕晃动解决方法

本文发布于:2024-02-07 08:44:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755767.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:解决方法   屏幕   Unity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!