`
cwqcwk1
  • 浏览: 89282 次
文章分类
社区版块
存档分类
最新评论

unity3d移动摄像机,支持PC、手机

 
阅读更多

unity3d游戏开发经常会遇到移动摄像机的情况,特别是场景太大,屏幕很难完全展示。

以下代码整合了PC和移动设备移动摄像机的方法,支持两点触控缩放

using UnityEngine;
using System.Collections;

public class MoveCamera : MonoBehaviour {

    // 记录手指触屏的位置
    Vector2 m_screenpos = new Vector2();

    // Use this for initialization
    void Start () {

  // 允许多点触控
        Input.multiTouchEnabled = true;
 }
	
	// Update is called once per frame
    void Update () {

#if !UNITY_EDITOR && ( UNITY_IOS || UNITY_ANDROID )

        MobileInput(); 
#else
        DesktopInput();
#endif


    }

    // 桌面系统鼠标操作
    void DesktopInput()
    {
        // 记录鼠标左键的移动距离
        float mx = Input.GetAxis("Mouse X");
        float my = Input.GetAxis("Mouse Y");


        if (  mx!= 0 || my !=0 )
        {
            //松开鼠标左键 
            if (Input.GetMouseButton(0))
            {
                Camera.main.transform.Translate(new Vector3(mx*Time.deltaTime, my * Time.deltaTime, 0));
            }
        }
    }

    // 移动平台触屏操作
    void MobileInput()
    {

        if (Input.touchCount <= 0)
            return;

        // 1个手指触摸屏幕
        if (Input.touchCount == 1)
        {
            
            if (Input.touches[0].phase == TouchPhase.Began)
            {
                // 记录手指触屏的位置
                m_screenpos = Input.touches[0].position;
                
            }
            // 手指移动
            else if (Input.touches[0].phase == TouchPhase.Moved)
            {
                // 移动摄像机
                Camera.main.transform.Translate(new Vector3(Input.touches[0].deltaPosition.x * Time.deltaTime, Input.touches[0].deltaPosition.y * Time.deltaTime, 0));
            }

            // 手指离开屏幕 判断移动方向
            if (Input.touches[0].phase == TouchPhase.Ended && 
                Input.touches[0].phase != TouchPhase.Canceled)
            {

                Vector2 pos = Input.touches[0].position;

                // 手指水平移动
                if (Mathf.Abs(m_screenpos.x - pos.x) > Mathf.Abs(m_screenpos.y - pos.y))
                {
                    if (m_screenpos.x > pos.x){
                        //手指向左划动
                    }
                    else{

                        //手指向右划动
                    }
                }
                else   // 手指垂直移动
                {
                    if (m_screenpos.y > pos.y){
                        //手指向下划动
                    }
                    else{
                        //手指向上划动
                    }
                   
                }

            }

        }
        else if ( Input.touchCount >1 )
        {
            // 记录两个手指的位置
            Vector2 finger1 = new Vector2();
            Vector2 finger2 = new Vector2();

            // 记录两个手指的移动
            Vector2 mov1 = new Vector2();
            Vector2 mov2 = new Vector2();
      
            for (int i=0; i<2; i++ )
            {
                Touch touch = Input.touches[i];

                if (touch.phase == TouchPhase.Ended )
                    break;

                if ( touch.phase == TouchPhase.Moved )
                {
             
                    float mov = 0;
                    if (i == 0)
                    {
                        finger1 = touch.position;
                        mov1 = touch.deltaPosition;
                       
                    }
                    else
                    {
                        finger2 = touch.position;
                        mov2 = touch.deltaPosition;

                        if (finger1.x > finger2.x)
                       {
                           mov = mov1.x;
                       }
                       else
                       {
                           mov = mov2.x;
                       }

                       if (finger1.y > finger2.y)
                       {
                           mov+= mov1.y;
                       }
                       else
                       {
                           mov+= mov2.y;
                       }

                        Camera.main.transform.Translate(0, 0, mov * Time.deltaTime);
                    }
                   
                   
                }
            }
        }

 
    }
}

分享到:
评论

相关推荐

    Unity 3D自学教程.docx

    此外,教程可能还会涵盖光照、动画、物理系统、碰撞检测、粒子效果、材质与纹理、摄像机控制等方面的内容。这些知识将帮助开发者创建更丰富、更动态的游戏环境。同时,Unity 3D的强大之处还在于其丰富的社区资源和...

    Unity3D技术线.pdf

    Unity3D是一个流行的跨平台游戏开发引擎,它允许开发者创建2D和3D游戏、交互式内容等,并且可以部署到多个平台,包括PC、游戏机、移动设备以及网页端。接下来,我将详细解释Unity3D相关的各个知识点,内容将基于给定...

    Unity3d屏幕特效-摄像机特效插件-Camera Filter Pack

    在这个“Unity3d屏幕特效-摄像机特效插件-Camera Filter Pack”中,我们主要关注的是Unity3D中的摄像机特效,特别是通过Camera Filter Pack 4.0.0插件实现的各种视觉效果。 Camera Filter Pack是Unity3D的一款专业...

    Unity3D实现万圣节

    8. **摄像机控制**:为了呈现最佳的视角,可能需要编写脚本来控制摄像机的移动、旋转和缩放,或者使用Unity的内置摄像机过渡工具。 9. **UI设计**:虽然这可能是一个短视频,但用户界面(UI)设计也很重要,如播放/...

    基于Unity3D的虚拟校园漫游系统

    Unity3D支持跨平台打包和发布,这意味着虚拟校园漫游系统可以部署到多种不同的设备上,例如PC、移动设备或游戏机等。 综上所述,基于Unity3D的虚拟校园漫游系统不仅能够提供三维视觉效果,而且能够支持复杂的交互...

    自主写的unity3d 的fps

    Unity3D是一款强大的跨平台游戏开发工具,支持2D和3D游戏制作,广泛应用于PC、移动设备以及各种游戏平台。在这款小型FPS游戏中,开发者可能已经实现了一些基本的游戏机制,如角色移动、射击、视角控制等。 描述中...

    使用unity3d进行游戏开发_从入门到精通_01.pdf

    开始游戏开发前,需要下载并安装Unity3D编辑器,设置合适的开发环境,包括安装必要的SDK(软件开发工具包),如Android SDK、iOS SDK等,以及配置Unity3D支持的开发平台。 3. Unity3D项目结构和资源管理: Unity3D...

    Unity3D游戏开发之恐怖医院-PC版.zip

    Unity3D是目前世界上最受欢迎的游戏开发工具之一,它支持跨平台开发,允许开发者以C#编程语言创建2D、3D游戏,广泛应用于手机、桌面以及主机游戏开发。 在这个项目中,开发者将学习到Unity3D的基础知识,包括但不...

    unity 3d shaderforge 移动PC扫描线经过后描边图像

    U3D 移动PC端 AR扫描线描边,打开摄像机,扫描线经过后描边图像, 可调整扫描线颜色 扫描拖尾长短 描边颜色 描边粗细 使用方法 将shader 拖放到材质球 然后将材质球赋予摄像机 这样摄像机捕捉的2d 3d内容都将会描边 ...

    从3D_Studio_Max中导入模型到Unity3D

    3. **移动FBX文件**:将导出的FBX文件复制到Unity3D项目的资源文件夹中。这通常是项目根目录下的"Assets"文件夹。 4. **自动导入**:当返回Unity3D时,系统会自动检测并导入FBX文件。Unity3D支持导入以下内容: - ...

    Unity3D游戏引擎-雨松MOMO原创

    首先,构建游戏框架是游戏开发的基础,包括场景设计、角色和物体的创建与摆放、摄像机的设置等。Unity3D提供了强大的场景编辑器,允许开发者以直观的方式构建游戏世界的每一个细节。开发者可以通过拖放3D模型、使用...

    Unity3D射击游戏

    Unity3D是一款跨平台的游戏开发工具,支持Windows、Mac、Linux等多种操作系统,并能发布到包括PC、移动设备、网页、虚拟现实等多个平台。它采用了C#作为主要编程语言,拥有强大的可视化编辑器和丰富的资源库,使得...

    Unity3D中文教程

    2. **制作一个第一人称射击游戏**:通过这个项目了解如何设置摄像机视角、射击逻辑、碰撞检测等内容。 3. **构建一个基于物理的解谜游戏**:通过设计不同的物理障碍,让玩家通过解决谜题来完成关卡。 通过这些实例...

    unity3d-案例开发源码资源

    Unity3D是当前主流的游戏开发引擎之一,拥有跨平台开发特性,能够支持PC、移动设备、游戏机以及网页等多种平台的游戏开发。其案例开发源码资源是指使用Unity3D进行游戏开发或项目实践时所制作的一系列示例项目的源...

    unity3d播放视频操作.doc

    Unity3D 是一个功能强大的游戏引擎,支持多种平台,包括 Windows、Mac、移动设备等。在游戏开发中,视频播放是一个非常重要的组件,能够吸引玩家的注意,提高游戏的整体体验。本文将介绍如何在 Unity3D 中播放视频,...

    使用unity3d进行游戏开发_从入门到精通

    由于其支持多种操作系统平台,如Windows、Mac OS X以及Linux,并且能够编译成多个平台的游戏,比如PC、游戏控制台、移动设备等,使得Unity3D成为游戏开发者极为青睐的工具。 在开始学习Unity3D游戏开发之前,首先...

    Unity3D游戏开发基础视频全教程(含基础入门,知识体系,3D特效入门等)

    第6课:基本组件之摄像机.mp4 第7课:基本组件之灯光.mp4 第8课:组件与脚本.mp4 第9课:鼠标键盘输入.mp4 第10课:使用变换组件移动游戏物体.mp4 第11课:物理组件之刚体.mp4 第12课:物理组件之碰撞体.mp4 第13课...

    unity3d技术资料

    6. **相机与渲染**:讲解Unity的摄像机设置,包括视角控制、多相机应用以及后期处理效果。 7. **光照与阴影**:介绍Unity中的光源类型、阴影效果以及光照烘焙。 8. **物理系统**:包括刚体、关节、碰撞检测等内容...

    unity使用webcam调用移动端摄像头适配安卓和ios 源码和安卓apk

    Unity是一款强大的跨平台游戏开发引擎,它支持在多个操作系统上创建3D和2D应用程序,包括Android和iOS。本项目的核心是使用Unity的WebCam API来调用移动设备的摄像头功能,实现跨平台的视频捕获和显示。下面将详细...

    Unity3D十五分钟教程

    最后,Unity3D支持多平台发布,包括PC、移动设备、网页和各种游戏主机。教程可能会教你如何配置和打包项目,以便在不同的平台上运行。 总的来说,“Unity3D十五分钟教程”是一个全面且基础的引导,尽管时间有限,但...

Global site tag (gtag.js) - Google Analytics