如何在Unity中给相机的边缘碰撞

How to give the camera's edge collision in Unity

我正在Unity中制作一个2D游戏,在这个游戏中,摄像机不需要移动。因此,我想限制玩家在摄像机边界内的移动,最好是通过碰撞而不是仅仅基于玩家的变换。老实说,我不知道从哪里开始做这样的事情,但我认为它会涉及一些脚本。在这一点上,我对编写脚本非常满意,但是如果您的回答包括编写脚本,那么如果它包含对正在发生的一切的详尽解释,我将不胜感激。顺便说一下,我正在使用 C#。

如果相机处于正交模式,您可以使用 EdgeCollider2D 执行此操作,使用 ScreenToWorldPoint 找到屏幕角的世界位置,然后确定 EdgeCollider2D.

Unity Community UnityLibrary Github has an example(复制如下):

// adds EdgeCollider2D colliders to screen edges
// only works with orthographic camera

using UnityEngine;
using System.Collections;

namespace UnityLibrary
{
  public class ScreenEdgeColliders : MonoBehaviour 
  {
    void Awake () 
    {
      AddCollider();
    }

    void AddCollider () 
    {
      if (Camera.main==null) {Debug.LogError("Camera.main not found, failed to create edge colliders"); return;}

      var cam = Camera.main;
      if (!cam.orthographic) {Debug.LogError("Camera.main is not Orthographic, failed to create edge colliders"); return;}

      var bottomLeft = (Vector2)cam.ScreenToWorldPoint(new Vector3(0, 0, cam.nearClipPlane));
      var topLeft = (Vector2)cam.ScreenToWorldPoint(new Vector3(0, cam.pixelHeight, cam.nearClipPlane));
      var topRight = (Vector2)cam.ScreenToWorldPoint(new Vector3(cam.pixelWidth, cam.pixelHeight, cam.nearClipPlane));
      var bottomRight = (Vector2)cam.ScreenToWorldPoint(new Vector3(cam.pixelWidth, 0, cam.nearClipPlane));

      // add or use existing EdgeCollider2D
      var edge = GetComponent<EdgeCollider2D>()==null?gameObject.AddComponent<EdgeCollider2D>():GetComponent<EdgeCollider2D>();

      var edgePoints = new [] {bottomLeft,topLeft,topRight,bottomRight, bottomLeft};
      edge.points = edgePoints;
    }
  }
}