zoukankan      html  css  js  c++  java
  • 实现鼠标拖动代码


    本脚本是根据momo研究院的一个脚本修改的,将此代码挂在照相机上,注意照相机必须是主相机,如何自己创建相机的话,要修改Tag,Tag必须是Main Cmarea,不然会报错,因为代码中设定的是main。主要功能是鼠标右键是旋转视角,有上下和左右,鼠标左键是拖动物体。唯一不足之处是鼠标左键只要按下就会拖动物体,再加个选中以后再拖动是比较好的。可以与鼠标拾取代码相结合一下就可以了。本代码以经过测试可以编译成功

    using UnityEngine;

    using System.Collections;


    public class mousedrag: MonoBehaviour 
    {


    public Transform target;//获得照相机焦点坐标

    private float normalDistance = 3;



    private float xSpeed = 250.0f;
    private float ySpeed = 120.0f;


    private int yMinLimit = -20;
    private int yMaxLimit = 80;


    private float x = 0.0f;
    private float y = 0.0f;

    private Vector3 screenPoint;
    private Vector3 offset;

    private Quaternion rotation = Quaternion.Euler(new Vector3(30f,0f,0f));
    private Vector3 CameraTarget;
    void Start () 
    {

    CameraTarget = target.position;

    float z = target.transform.position.z - normalDistance;
    transform.position = rotation * new Vector3(transform.position.x,transform.position.y,z);


    transform.LookAt(target);

    var angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;
    }

    void Update ()

    {

    //1代表鼠标右键按下,0代表鼠标左键按下

    if(Input.GetMouseButton(1))
    {
       x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
            y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
     
      y = ClampAngle(y, yMinLimit, yMaxLimit);
            
            var rotation = Quaternion.Euler(y, x, 0);
            var position = rotation * new Vector3(0.0f, 0.0f, -normalDistance) + CameraTarget;
            
            transform.rotation = rotation;
            transform.position = position;

    }else if(Input.GetMouseButtonDown(0))
    {
        screenPoint = Camera.main.WorldToScreenPoint(target.transform.position);
        offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
    }

    if(Input.GetMouseButton(0))
    {
      Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
     
    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
    target.transform.position = curPosition;
    }
    transform.LookAt(CameraTarget);

    }

    static float ClampAngle (float angle , float min ,float  max) 
    {
    if (angle < -360)
    angle += 360;
    if (angle > 360)
    angle -= 360;
    return Mathf.Clamp (angle, min, max);
    }
    }

  • 相关阅读:
    程序员与HR博弈之:有城府的表达你的兴趣爱好
    也谈创业企业CEO该拿多少工资
    今日互联网关注(写在清明节后):每天都有值得关注的大变化
    另眼看纸媒电商的发展
    今日互联网关注(20140331):善待和你裸婚的员工
    看着烧了十几亿的打车软件,我们能跟着模仿点什么?
    一款云端开发环境平台,思考互联网产品模式
    2018年的医保控费思路
    新形势下国家医疗保障局信息化建设注意点(五)强化监管信息化
    新形势下国家医疗保障局信息化建设注意点(四)推进电子医保卡
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3468910.html
Copyright © 2011-2022 走看看