unity摄像机脚本

直接挂载在摄像机上面即可

1.摄像机自由平移

using UnityEngine;
using System.Collections;

/// <summary>
/// 摄像机视角自由移动
/// </summary>
public class CameraFreeMove : MonoBehaviour
{
    public float moveSpeed = 10; // 设置相机移动速度
    void Update()
    {
        // 当按住鼠标右键的时候
        if (Input.GetMouseButton(0))
        {
            // 获取鼠标的x和y的值,乘以速度和Time.deltaTime是因为这个可以是运动起来更平滑
            float h = Input.GetAxis("Mouse X") * moveSpeed * Time.deltaTime;
            float v = Input.GetAxis("Mouse Y") * moveSpeed * Time.deltaTime;
            // 设置当前摄像机移动,y轴并不改变
            // 需要摄像机按照世界坐标移动,而不是按照它自身的坐标移动,所以加上Spance.World
            this.transform.Translate(v, 0, -h, Space.World);
        }
    }
}

2.使用鼠标滚轮和双指触摸进行缩放

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraZoom : MonoBehaviour {

    public float maxDistance;//最大距离
    public float minDistance;//最小距离
    public float scaleSpeed;//缩放速度
    public float mouseSpeed;//缩放速度
    private Touch oldTouch1;  //上次触摸点1(手指1)
    private Touch oldTouch2;  //上次触摸点2(手指2)  

    // Use this for initialization
    void Start () {
        //FairyGUI.GObject a;
        //a.visible = false;
    }

    // Update is called once per frame
    void Update () {
        ZoomCamera();
        MouseZoomCamera();
    }

    /// <summary>
    /// 手势屏幕缩放
    /// </summary>
    private void ZoomCamera()
    {
        //至少得要2个触摸点
        if (Input.touchCount < 2)
        {
            return;
        }

        //多点触摸, 放大缩小
        Touch newTouch1 = Input.GetTouch(0);
        Touch newTouch2 = Input.GetTouch(1);

        //第2点刚开始接触屏幕, 只记录,不做处理
        if (newTouch2.phase == TouchPhase.Began)
        {
            oldTouch2 = newTouch2;
            oldTouch1 = newTouch1;
            return;
        }

        //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
        float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
        float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);

        //两个距离之差,为正表示放大手势, 为负表示缩小手势
        float offset = newDistance - oldDistance;

        Vector3 originalPos = transform.position;
        Quaternion originalRotation = transform.rotation;
        transform.position += offset * transform.forward * scaleSpeed * Time.deltaTime;

        //临时判断值
        float cameraY = transform.position.y;
        if (cameraY < minDistance || cameraY > maxDistance)
        {
            transform.position = originalPos;
            transform.rotation = originalRotation;
        }

        //重新计算
        cameraY = transform.position.y;

        //记住最新的触摸点,下次使用
        oldTouch1 = newTouch1;
        oldTouch2 = newTouch2;
    }

    /// <summary>
    /// 鼠标滚轮缩放
    /// </summary>
    private void MouseZoomCamera()
    {
        //获取滚轮的值
        float mouseScroll = Input.GetAxis("Mouse ScrollWheel");
        if (Mathf.Abs(mouseScroll) > 0)
        {
            //print("hua");
            Vector3 originalPos = transform.position;
            Quaternion originalRotation = transform.rotation;

            transform.position += mouseScroll * transform.forward * mouseSpeed * Time.deltaTime;
            //临时判断值
            float cameraY = transform.position.y;
            if (cameraY < minDistance || cameraY > maxDistance)
            {
                transform.position = originalPos;
                transform.rotation = originalRotation;
            }

            //cameraY = transform.position.y;
            //print(distance.magnitude);
        }
    }
}
时间: 2024-11-08 19:06:00

unity摄像机脚本的相关文章

Unity摄像机

把相机做为人物的子对象,就可以制作: 1.第1人称摄像机:把摄像机摆在眼睛前面 2.第3人称摄像机:把摄像机摆在人后上面 Clear Flags: http://www.haogongju.net/art/1941512 Unity摄像机,布布扣,bubuko.com

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除.在unity中,Transform面板一共有3个属性: Position  (位置) Rotation(旋转) Scale(缩放) 这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数. Position  (位置) 任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标.一旦Vector33容器中的坐标发生变化,那么Sce

Unity3D技术之Android 脚本高级 Unity 手机脚本

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 高级 Unity 手机脚本 设备属性 您可以访问一系列特定设备的属性:     SystemInfo.deviceUniqueIdentifier 唯一的设备标识. SystemInfo.deviceName 用户指定的设备名称. SystemInfo.deviceModel 设备型号. Sys

【Unity 3D】学习笔记二十七:unity游戏脚本(七)

使用C#编写游戏脚本 在前面提到,unity支持三种语言编写脚本:js,C#,boo.入门的时候建议只用js,因为js比较简单易懂,语法也不是很严格.但后来晋级的时候推荐使用C#,因为它比较符合unity的编程思想,执行效率更高.下面总结下怎么使用C#编写脚本. 继承MonoBehaviour类 在unity中,任何一个脚本,包括上述三种语言都需要去继承MonoBehaviour这个类.为什么我们之前写JS代码的时候没有继承咧?因为在创建JS代码的时候,系统会将其类名与继承关系隐藏起来. 在pr

unity3d旋转摄像机脚本

void Update () { if(Input.GetMouseButton(1)) { if (axes == RotationAxes.MouseXAndY) { // Read the mouse input axis rotationX += Input.GetAxis("Mouse X") * sensitivityX; rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationX =

Unity Mono脚本 加密

加密环境 引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android.IOS(暂定) 加密对象:C#源代码(dll文件) 解密方法:libmono.so (重点:加入解密算法并重编译此文件) 加密的目地 .NET Reflector等反编译工具 无法通过对dll反编译得到源码 注意事项 dll的加密算法和libmono.so解密算法一致 思路分析 重点:我们需要对libmono.so重编译,加入我们

unity的摄像机脚本

using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class MainCamera : MonoBehaviour { public Transform target; public float targetHeight = 1.2f; public float distance = 8.0f; public float offsetFromWall = 0.1f; public

Unity 摄像机组件

今天看一下unity3d里面的摄像机是怎么调用和操作的. 打开unity3d新建一个工程.在我们打开工程的时候unity3d会主动添加一个Main Camera,在Hierartchy视图中.点击Main Camera在Inspector中出现Main Camera的组件信息.如图 在camera组件中可以对是相机的一些属性进行调节. Clera Flags:清除标记.下拉菜单一共有4个选项. Skybox:天空盒,背景显示天空盒.如果该相机没有添加天空和则显示背景颜色.Solid Color:

unity摄像机控制篇

关于unity中摄像机控制,我总结了一些,希望自己在今后的学习中不会忘记,耶!!! unity中第一,三人称控制器上绑定的都有一个叫Mouse Look的脚本,我把它写下来了: [AddComponentMenu("Camera-Control/Mouse Look")] public enum RotationAxes{MouseXAndY=0,Mouse1,MouseY=2} public RotationAxes axes=RotationAxes.MouseXAndY; pub