Unity 获得相机在某一平面上可视范围的四个角的世界坐标

射线方法(纯计算,无物理)

var leftButtom = new Vector3(0, 0, 12);
var leftTop = new Vector3(0, Screen.height, 12);
var rightTop = new Vector3(Screen.width, Screen.height, 12);
var rightButtom = new Vector3(Screen.width, 0, 12);

var plane = new Plane(PlaneGameObject.transform.up, PlaneGameObject.transform.position);

var ray_leftButtom = m_camera.ScreenPointToRay(leftButtom);
var ray_leftTop = m_camera.ScreenPointToRay(leftTop);
var ray_rightTop = m_camera.ScreenPointToRay(rightTop);
var ray_rightButtom = m_camera.ScreenPointToRay(rightButtom);

Debug.DrawRay(ray_leftButtom.origin, ray_leftButtom.direction, Color.white, 1f);
Debug.DrawRay(ray_leftTop.origin, ray_leftTop.direction, Color.white, 1f);
Debug.DrawRay(ray_rightTop.origin, ray_rightTop.direction, Color.white, 1f);
Debug.DrawRay(ray_rightButtom.origin, ray_rightButtom.direction, Color.white, 1f);

float enter = 0;

if (plane.Raycast(ray_leftButtom, out enter))
{
    Cubes[0].transform.position = ray_leftButtom.GetPoint(enter);
}

if (plane.Raycast(ray_leftTop, out enter))
{
    Cubes[1].transform.position = ray_leftTop.GetPoint(enter);
}

if (plane.Raycast(ray_rightTop, out enter))
{
    Cubes[2].transform.position = ray_rightTop.GetPoint(enter);
}

if (plane.Raycast(ray_rightButtom, out enter))
{
    Cubes[3].transform.position = ray_rightButtom.GetPoint(enter);
}

Unity 2D中,如果你想要让相机始终保持在一个特定的视野范围或锁定在玩家附近,你可以使用`CameraFollow`组件或者自定义脚本来实现这种效果。以下是基本步骤: 1. **添加CameraFollow组件**: - 导航到项目视图,在场景中选择你的相机游戏对象(通常命名为Main Camera)。 - 在Inspector窗口中找到并添加`CameraFollow`组件。这将自动创建一个跟随玩家或指定目标的位置和旋转的系统。 2. **配置CameraFollow组件**: - 在`CameraFollow`组件中,可以设置: - `Target object`:选择你要锁定的目标,通常是玩家色。 - `Smooth follow speed`:调整跟随速度的平滑度。 - `Lock rotation to target`:如果勾选,相机将不会绕过目标旋转。 3. **自定义脚本**: - 如果需要更复杂的控制,你可以编写一个C#脚本,通过`Transform.position`属性手动设置相机位置,并限制其在特定区域内的移动。 例如,你可以设定一个边界范围变量`(Vector2 minRange, Vector2 maxRange)`,然后在更新循环里检查相机位置是否超出范围,若超出则强制拉回。 ```csharp void LateUpdate() { float minY = transform.position.y + minRange.y; float maxY = transform.position.y + maxRange.y; if (transform.position.y < minY) { transform.position = new Vector3(transform.position.x, minY, transform.position.z); } else if (transform.position.y > maxY) { transform.position = new Vector3(transform.position.x, maxY, transform.position.z); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值