如何在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;
}
}
}
我正在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;
}
}
}