贴代码:

摄像机的拉近视角代码:

public Transform target;

    public float minFov = 15f;

    public float maxFov = 70f;

    public float sensitivity = 10f;

    void Start()

    {

        transform.LookAt(target);

    }

    void Update()

    {

        if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))

        {

            float fov = Camera.main.fieldOfView;

            fov -= Input.GetAxis("Mouse ScrollWheel") * sensitivity;

            fov = Mathf.Clamp(fov, minFov, maxFov);

            Camera.main.fieldOfView = fov;

        }

    }

主要是通过控制摄像机的fieldOfView属性,可以自己在场景视图中调节看一下。

通过判断选中物体是否是目标物体,如果是就旋转

代码:

public Transform target;//目标物体

    public float HorizontalSpeed = 10f;

    public float VerticalSpeed = 10f;

    string RotateDirection = null;//判断当前旋转方向,用于固定当前旋转方向,不让用户在横向旋转时纵向旋转,反之同理。

    bool isTarget = false;//判断当前射线碰撞到的物体是否为目标物体

    int RotateState = 0;//当前旋转状态0不旋转,1匀速旋转

  

    //GameObject PanelToolTips;

 

 void Start () {

       if(!target)

{

target=gameObject.transform;//如果target不存在,就设置脚本附加的物体为target

}

 }

 

 

 void Update () {

        if (Input.GetMouseButton(0))

        {

if (isTarget)//判断当前是否选中目标物体

            {

RotateState = 1;

                    RotateTarget(target);                       

            }

        }

      

        if (Input.GetMouseButtonUp(0))

        {

            RotateDirection = null;

            isTarget = false;//当鼠标抬起时,设置当前物体不是目标物体

            RotateState = 0;

        }

        if (Input.GetMouseButtonDown(0))//每次按下鼠标左键都用射线检测碰撞的物体是什么

        {

            Ray();

        }

      

 }

    /// <summary>

    /// 旋转匀速物体方法//

/// </summary>

    /// /// <param name="transformObj">要旋转的目标物体</param>

    void RotateTarget(Transform transformObj)

    {

        float h = Input.GetAxis("Mouse X");//右正左负

        float v = Input.GetAxis("Mouse Y");//上正下负

if ((Mathf.Abs(h) > Mathf.Abs(v)) && (RotateDirection != "down" && RotateDirection != "up"))//此处设置当物体横向旋转时不能纵向旋转,纵向旋转时不能横向旋转,如果不需要,可把&&后面删除,RotateDirection变量也可删除



        {

            if (h < 0)

            {

                transformObj.Rotate(Vector3.up, HorizontalSpeed);

                RotateDirection = "left";

            }

            else if (h > 0)

            {

                transformObj.Rotate(-Vector3.up, HorizontalSpeed);

                RotateDirection = "right";//当前旋转方向为右向

            }

            RotateState = 1;//匀速旋转

        }

        else if ((Mathf.Abs(h) < Mathf.Abs(v)) && (RotateDirection != "left" && RotateDirection != "right"))//同上

        {

            if (v < 0)

            {

                transformObj.RotateAround(target.transform.position, Vector3.left, VerticalSpeed);

                RotateDirection = "down";//当前旋转方向为下向

            }

            else if (v > 0)

            {

                transformObj.RotateAround(target.transform.position, Vector3.right, VerticalSpeed);

                RotateDirection = "up";//当前旋转方向为上向

            }

           

            RotateState = 1;

        }

        //print(RotateDirection);

    }

/// <summary>

    /// 从主相机发送射线,判断当前点击的物体是否是要旋转的物体

    /// </summary>

    void Ray()

    {

        Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);

        RaycastHit hit;

        GameObject hitObj=null;

        if (Physics.Raycast(ray, out hit, 100f))

        {

            hitObj = hit.collider.gameObject;

            print(hitObj.name);

            if ((hitObj.transform.name=target.name )//如果当前碰撞的物体是目标物体

            {

                target = hitObj.transform;

                isTarget = true;

            }

        }

    }

unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角的更多相关文章

  1. Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体

    最终效果如下: 实现ScrollView主要是NGUI的三个脚本"UIDraggable Panel","UIGrid","UIDrag Panel ...

  2. C++五子棋(三)——判断鼠标有效点击

    分析 在鼠标左键点击时,我们不能让新棋子在已有棋子的位置落下,同时我们还要让棋子在规定位置落下--棋盘线的交点处. 功能实现 创建数据类型 创建头文件chessData.h和源文件chessData. ...

  3. (转载)【Unity3D学习】获取鼠标点击所对应的GameObject

    刚开始学习Unity 3D,新手遇到的坑都是泪对自由的抗争.直入主题~ 首先,为GameObject需要添加组件“Box Collider”. 然后,在脚本中的Update方法中添加如下代码. if( ...

  4. Unity3D基础学习 加载场景时隐藏物体,点击显示时显示物体

    隐藏物体有两种方法,一是设置Meshrender为False,即不渲染物体. 二是设置物体为False,禁用物体,我使用的第二种. 当场景中需要隐藏的物体很多时,我们可以添加一个层来表示需要隐藏的物体 ...

  5. Unity3D基础学习之AssetBundle 资源包创建与加载

    前几天做了AssentBundle的例子,遇到了问题,在论坛上问了三天都没人解答,最后在一个朋友的帮助下解决了.下面介绍AssentBundle. AssetBundles让你通过WWW类流式加载额外 ...

  6. GDI画图,判断鼠标点击点在某一画好的多边形、矩形、图形里

    Region.IsVisible方法 简单方便准确 private bool CheckPntInPoly(Point[] points, Point pnt) { || pnt == Point.E ...

  7. Unity3D基础学习 NGUI自带Tooltip制作提示文字

    简介 NGUI自带的的例子Character中含有一个Tooltip,可以鼠标悬浮到某对象时显示提示文字.非常方便. 创建UITooltip 首先你需要在场景NGUi相机下建立一个空物体我把它命名为T ...

  8. js 如何判断鼠标点击事件还是js代码调用

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. Unity3D基础学习 利用NGUI的Texture播放视频

    利用NGUI播放视频,首先你得导入你的视频 你的电脑中必须安装QuickTime软件,没有,去下一个,如果是Windows系统,安装完之后重启. 接下来转换你的视频格式,如果你的视频在QuickTim ...

随机推荐

  1. Linq101-CustomSequence

    using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class CustomS ...

  2. IDEA中Maven管理下添加mysql依赖

    在做Java Web项目的时候,不可避免的就要使用到数据库,下面就是在IDEA中添加mysql依赖的方法. 如果你看到这里,就表示你弄懂了IDEA,maven和Tomcat等,所以... 只需要在po ...

  3. 你好,C++(9)坐216路公交车去买3.5元一斤的西红柿——C++中如何表达各种数值数据 3.3 数值数据类型

    3.3  数值数据类型 从每天早上睁开眼睛的那一刻开始,我们几乎每时每刻都在与数字打交道:从闹钟上的6点30分,到上班坐的216路公共汽车:从新闻中说的房价跌到了100元每平米到回家买菜时的西红柿3. ...

  4. C++ 性能剖析 (三):Heap Object对比 Stack (auto) Object

    通常认为,性能的改进是90 ~ 10 规则, 即10%的代码要对90%的性能问题负责.做过大型软件工程的程序员一般都知道这个概念. 然而对于软件工程师来说,有些性能问题是不可原谅的,无论它们属于10% ...

  5. 服务器之间socket传输单链接和多连接测试结果

    今天做了一下测试,目的是看看局域网内服务器a,通过一个连接往服务器b传输数据,和通过多个连接传输的不同. 结果发现和多少个连接没关系,一个进程一个连接就能跑满网卡,只要write的时候够快,read的 ...

  6. Windows Phone获得IsolatedStorage中指定目录下的所有文件

    在Windows Phone 中对隔离存储空间中的文件操作需要通过System.Io.IsolatedStorage下的类进行操作 获得指定文件夹下的所有文件: 参数:是指定文件夹的路径加上通配符,格 ...

  7. ubuntu 更新 php5.5.9 到 php 5.6

    add-apt-repository ppa:ondrej/php5-5.6 apt-get update apt-get install php5 为了使用 add-apt-repsitory 需要 ...

  8. jQuery 图片轮播

    HTML <div class="carousel">    <ul class="car-img">        <li> ...

  9. 初涉JavaScript模式 (4) : 构造函数

    什么是构造函数? 构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不 ...

  10. 线程间操作无效: 从不是创建控件“textBox2”的线程访问它

    如何:对 Windows 窗体控件进行线程安全调用 线程间操作无效: 从不是创建控件的线程访问它的三种方法 如果使用多线程处理来提高 Windows 窗体应用程序的性能,则你必须确保以线程安全的方式调 ...