Unity中ViewportToWorldPoint的使用

 

public class Player : MonoBehaviour
{
    private float leftBorder;
    private float rightBorder;
    private void Start()
    {
        leftBorder = Camera.main.ViewportToWorldPoint(new Vector3(0, 0)).x;
        rightBorder = Camera.main.ViewportToWorldPoint(new Vector3(1, 0)).x;
    }
    private void Update()
    {
        Vector3 acc = Vector3.zero;
        Vector3 diff;
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.localScale = new Vector3(-1, 1, 1);
            acc.x = -0.1f;
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.localScale = new Vector3(1, 1, 1);
            acc.x = 0.1f;
        }
        diff = Vector3.MoveTowards(transform.localPosition, transform.localPosition + acc, 0.5f * Time.time);

        if(diff .x <leftBorder)
        {
            diff.x = rightBorder;
        }
        if(diff .x >rightBorder)
        {
            diff.x = leftBorder;
        }

        transform.localPosition = diff;
    }
}

 

 

Unity中绘制3D线条通常需要利用Graphics.DrawRay()函数或者LineRenderer组件。以下是两种方法: 1. **使用Graphics.DrawRay()**: - 创建一个`RaycastHit`结构体数组来存储碰撞结果。 - 使用`Camera.main.ScreenPointToRay(Screen.mousePosition)`获取鼠标位置对应的射线方向。 - 在循环中,调用`Physics.Raycast(rayStart, rayDirection, hits, distance)`,检查是否在指定距离内撞到了物体。 - 然后在hitPoints上绘制线条,例如`Graphics.DrawLine(startPos, hitPosition)`,startPos是你希望线条开始的位置。 ```csharp RaycastHit[] hits; Vector3 startPos = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 0)); float distance = 100f; // 设置线条的最大长度 for (int i = 0; i < Screen.height; i++) { Ray ray = Camera.main.ScreenPointToRay(new Vector3(0, i, 0)); Physics.Raycast(ray, out hits, distance); if (hits.Length > 0) { Graphics.DrawLine(startPos, hits[0].point); startPos = hits[0].point; } } ``` 2. **使用LineRenderer**: - 在场景中创建一个LineRenderer组件,并给它添加两个或更多的顶点。 - 设置LineRenderer的材质,比如设置线条的颜色和宽度。 - 在Update或OnDrawGizmosLate中动态调整顶点位置,模拟出3D线条的效果。 ```csharp public class LineDrawer : MonoBehaviour { public LineRenderer lineRenderer; private void Update() { // 生成新的线条点 Vector3 start = transform.position; Vector3 end = transform.position + new Vector3(xChange, yChange, zChange); // xChange, yChange, zChange是你想要移动的方向 lineRenderer.SetPositions(new[] { start, end }); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值