c# - 当相机移动时,场景中除了玩家之外的所有东西看起来都很模糊 | Unity2D

标签 c# android unity-game-engine unity3d-2dtools

我使用一个简单的相机跟随脚本开始我的游戏,该脚本仅在 x 轴上跟随我的玩家并带有偏移和一些限制

我在我的机器人上录制了一段视频来展示我的意思。在录音中,这个问题有点夸张(由于录音),只有尖峰进入视野后才能看到。不录制时,播放器动画非常流畅。 Here's the video

using UnityEngine;

 public class MainCamera : MonoBehaviour {

     public Transform target;
     public float xOffset, xPosRestrictionMin, xPosRestrictionMax;

     private float yPos, zPos;

     void Start ()
     {
         yPos = transform.position.y;
         zPos = transform.position.z;
     }

     void LateUpdate ()
     {
         transform.position = new Vector3(Mathf.Clamp(target.position.x + xOffset, xPosRestrictionMin, xPosRestrictionMax), yPos, zPos);
     }
 }

然而,当第一次运行游戏时,一切看起来都很“紧张”。尽管我所有的玩家物理都在固定更新内,输入在更新内,相机更新在 lateupdate 内。我尝试设置插值以推断玩家 rigidbody2d。现在播放器的外观和动画效果会很流畅,但当摄像机移动时,其他一切看起来都很模糊。我认为可能是我的脚本或设置有问题,所以我尝试关闭垂直同步,将目标帧速率设置为 60,当没有任何效果时,我下载了 Cinemachine。即使使用 Cinemachine 而不是我自己的脚本,它仍然看起来很模糊,我不明白为什么。这是我的控件的简化版本。

 private void Update()
 {
     //Handle touch input
     if (Input.touchCount > 0)
     {

         foreach (Touch touch in Input.touches)
         {
             switch (touch.phase)
             {
                 // Touchdown
                 case TouchPhase.Began:
                     if (onGround || !doubleJumped)
                     {
                         jump = true;
                         touchReleased = false;

                         if (onGround)
                             anim.SetBool("jump", true);
                     }
                     break;

                 //Touch up
                 case TouchPhase.Ended:
                     allowGlide = false;
                     anim.SetBool("glide", false);
                     if (rb.velocity.y > 0)
                         touchReleased = true;
                     break;
             }

         }
     }
 }


 void FixedUpdate()
 {
     rb.velocity = new Vector2(newMoveSpeed, rb.velocity.y);

     onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);
     if (onGround && !jump)
     {
         gliding = false;
         allowGlide = false;
         anim.SetBool("glide", false);
         anim.SetBool("jump", false);
         doubleJumped = false;
     }

     //Slowly Accelerate if not at top speed and touching the ground
     if (newMoveSpeed < moveSpeed && onGround)
         newMoveSpeed += 0.0165f;
     anim.speed = Mathf.Clamp(newMoveSpeed, 13, 18);

     //Jumping 
     if (jump && onGround)
     {
         jump = false;
         rb.velocity = new Vector2(rb.velocity.x, jumpHeight);
     }
     else if (jump && !doubleJumped && !onGround)
     {
         jump = false;
         doubleJumped = true;
         allowGlide = true;
         rb.velocity = new Vector2(rb.velocity.x, jumpHeight);
     }

     //Add multiplier if falling down
     if (rb.velocity.y < 0 && allowGlide)
     {
         anim.SetBool("glide", true);
         if (!gliding)
         {
             rb.velocity -= Vector2.up * Physics2D.gravity.y;
             gliding = true;
         }
         else
         {
             rb.velocity += Vector2.up * Physics2D.gravity.y * (glideMultiplier - 1) * Time.deltaTime;
         }
     }
     else if (rb.velocity.y < 0)
     {
         rb.velocity += Vector2.up * Physics2D.gravity.y * (fallMultiplier - 1) * Time.deltaTime;
     }

     //Increase fall multiplier if touch is released mid jump
     else if (rb.velocity.y > 0 && touchReleased)
     {
         rb.velocity += Vector2.up * Physics2D.gravity.y * (lowJumpMultiplier - 1) * Time.deltaTime;
     }
     else if (rb.velocity.y == 0)
     {
         return;
     }
 }

谢谢,如有任何帮助或反馈,我们将不胜感激!

最佳答案

您是否检查过您的游戏在设备上运行的帧率?我有电影/动画背景(但对 Unity 是新手),在我看来你遇到了帧率问题。虽然,如果录制软件完全改变了图形,我不确定我看到的是不是和你一样。为什么你的录音软件会那样做?您是否尝试过使用 Rec?它对我很有用。

很抱歉没有将此作为评论发布 - 我当前的代表不允许我这样做。

关于c# - 当相机移动时,场景中除了玩家之外的所有东西看起来都很模糊 | Unity2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48086490/

相关文章:

unity-game-engine - SceneManager.LoadScene(string) 无法识别场景名称

unity-game-engine - 在预制件中实例化后无法更改点光源的颜色

c# - 具有非特定属性值的 mvcSiteMapNode

c# - 如何使用当前 Windows 登录用户对 UWP 应用程序进行身份验证

android - 如何确定为什么我的库中的文本大小如此之大?

android - 无法访问 TextView

php - 登录导致 Android 应用程序崩溃

c# - 如何在 Azure 中存储文件

c# - 在 Ajax 请求的 Asp.Net MVC 操作中处理未处理的异常(错误 500 响应)的最佳策略是什么?

c# - 确定游戏是否已被反编译/更改