1
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class ScreenBorderToWorld : MonoBehaviour
|
||||
{
|
||||
[Header("四个空对象(顺序:上、下、左、右)")]
|
||||
public Transform topPoint;
|
||||
public Transform bottomPoint;
|
||||
public Transform leftPoint;
|
||||
public Transform rightPoint;
|
||||
|
||||
[Header("四个特效(顺序:上、下、左、右)")]
|
||||
public GameObject topFX;
|
||||
public GameObject bottomFX;
|
||||
public GameObject leftFX;
|
||||
public GameObject rightFX;
|
||||
|
||||
[Header("目标相机(不填默认主相机)")]
|
||||
public Camera cam;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (cam == null) cam = Camera.main;
|
||||
|
||||
// 上
|
||||
SetPos(topPoint, topFX, new Vector2(0.5f, 1f));
|
||||
|
||||
// 下
|
||||
SetPos(bottomPoint, bottomFX, new Vector2(0.5f, 0f));
|
||||
|
||||
// 左
|
||||
SetPos(leftPoint, leftFX, new Vector2(0f, 0.5f));
|
||||
|
||||
// 右
|
||||
SetPos(rightPoint, rightFX, new Vector2(1f, 0.5f));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 归一化屏幕坐标 → 世界坐标 → 设置空对象与特效
|
||||
/// </summary>
|
||||
private void SetPos(Transform point, GameObject fx, Vector2 normalizedPos)
|
||||
{
|
||||
// 1. 归一化坐标 → 屏幕像素坐标
|
||||
float px = normalizedPos.x * Screen.width;
|
||||
float py = normalizedPos.y * Screen.height;
|
||||
|
||||
Vector3 screenPos = new Vector3(px, py, 0);
|
||||
|
||||
// 2. 使用你已有的转换类
|
||||
Vector3 worldPos = CoordinateTransformation.ScreenToWord(screenPos);
|
||||
|
||||
// 3. 设置空对象位置
|
||||
if (point != null)
|
||||
point.position = worldPos;
|
||||
|
||||
// 4. 设置特效位置
|
||||
if (fx != null)
|
||||
fx.transform.position = worldPos;
|
||||
Vector3 v3 = fx.transform.transform.position;
|
||||
v3.z = 0;
|
||||
fx.transform.position = v3;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user