关于相机实现在scene场景中的效果,包括移动,旋转,拉近,方便在游戏运行时查看场景

我们都知道在scene场景内利用鼠标可以随意查看场景,拉近拉远,移动,那么在游戏运行时是无法做到的,这就需要我们利用代码来控制相机。

首先我们需要以下字段等,保存相机组件是为了可以使代码灵活。,不必挂载相机上。有两种模式,一种计算基于屏幕中心,即你的操作中心点在屏幕中心,还有一种是基于上一帧点击位置。

    public  Camera cam;//相机组件
    //计算中心点选取
    public enum MouseCenter
    {
        ScreeenCenter,//屏幕中心
        LastPosition,//点击点
    }
    public MouseCenter mouseCenter= MouseCenter.LastPosition ;//

    public float RotateSpeed = 1;//旋转速度
    public float MoveSpeed = 10;//移动速度
    public float ZoomSpeed=1;//缩放速度
    private  Vector3 MoveDir;//方向
    private Vector3 RotateDir;//
    public int Sensitivity = 1;//灵敏度
    private Vector2 mouseDownPos;//记录按下时鼠标位置

 在这里我对灵敏度进行强行限制,阻止负值。.

 void Start()
    {
        if (Sensitivity < 0)
            Sensitivity = 0;
    }

下边为计算,在update中调用:

 //计算
    private void Calculate()
    {
        Vector2 newpos = Vector2.zero;
        switch (mouseCenter)
        {
            case MouseCenter.ScreeenCenter:
                newpos = new Vector2(Input.mousePosition.x - Screen.width / 2, Input.mousePosition.y - Screen.height / 2);//获取鼠标点相对屏幕中心向量差
                break;
            case MouseCenter.LastPosition:
                newpos = new Vector2(Input.mousePosition.x - mouseDownPos.x, Input.mousePosition.y - mouseDownPos.y);//获取基于按下瞬间的向量差值
                mouseDownPos = Input.mousePosition;
                break;
            default:
                return;
        }
        Space spacetype = Space.Self;
        if (Mathf.Abs(newpos.x) > Sensitivity || Mathf.Abs(newpos.y) > Sensitivity)//拖动距离太短,不计算
        {
            //计算
            if (Mathf.Abs(newpos.x) > Mathf.Abs(newpos.y))
            {
                if (newpos.x < 0)
                {
                    MoveDir = cam.transform.right;
                    RotateDir = Vector3.down;
                }
                else
                {
                    MoveDir = -cam.transform.right;
                    RotateDir = Vector3.up;
                }
            }
            else
            {
                if (newpos.y < 0)
                {
                    MoveDir = Vector3.left;
                    RotateDir = Vector3.right;
                }
                else
                {
                    MoveDir = Vector3.right;
                    RotateDir = Vector3.left;
                }
            }
            if (Input.GetMouseButton(1))
            {
                if (Mathf.Abs(newpos.x) > 10 && Mathf.Abs(newpos.y) > 10)
                    spacetype = Space.World;
                cam.transform.Rotate(RotateDir*RotateSpeed * Time.deltaTime * 50, spacetype);
            }
            if (Input.GetMouseButton(2))
            {
                //transform.Translate(MoveDir * MoveSpeed * Time.deltaTime * 10);
                cam.transform.position += MoveDir * MoveSpeed * Time.deltaTime * 10;
                return;
            }

        }
        else
        {
            float h = Input.GetAxis("Mouse ScrollWheel");
            if (h == 0)
                return;
            int dir = h > 0 ? 1 : -1;
            cam.transform.position += transform.forward * dir * ZoomSpeed * Time.deltaTime * 20;
        }
    }

运行即可实现相机的移动缩放,旋转。

  想要源代码的可以去这里下载,只要1积分

https://download.csdn.net/download/nt_xs_j/10754690

这里是集成了触屏和键鼠的操作方式的sdk。是对上边的再次扩展。,支持移动平台和触控平台

https://download.csdn.net/download/nt_xs_j/10933499

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值