精华内容
下载资源
问答
  • //鼠标在x轴和y轴方向移动的速度 float x; float y; //鼠标在x和y轴方向移动的速度 float xSpeed = 250.0f; float ySpeed = 120.0f; void Start() { if (gameObject.GetComponent<Rigidbo

    //把下面的代码挂在摄像机中
    //摄像机跟随的主角物体
    public Transform target;
    //摄像机距离模型的默认距离
    public float distance = 20.0f;
    //鼠标在x轴和y轴方向移动的速度
    float x;
    float y;

    //鼠标在x和y轴方向移动的速度
    float xSpeed = 250.0f;
    float ySpeed = 120.0f;
    
    void Start()
    {
    	
    
    	if (gameObject.GetComponent<Rigidbody>() != null)
    	{
    		gameObject.GetComponent<Rigidbody>().freezeRotation = true;
    	}
    	
    
    }
    void LateUpdate()
    {
    	if (target)
    	{
    		//我的分析:1.根据垂直方向的增减量修改摄像机距离参照物的距离
    		distance += Input.GetAxis("Vertical");
    		//根据鼠标移动修改摄像机的角度
    		x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
    		y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
    		
    		Quaternion rotation = Quaternion.Euler(y, x, 0);
    		
    		Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;
    		
    		//设置摄像机的位置与旋转
    		transform.rotation = rotation;
    		transform.position = position;
    	}
    }
    
    
    
    void Update()
    {
    
    }
    

    }

    展开全文
  • 主要为大家详细介绍了Unity3D使用鼠标旋转缩放平移视角,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动。代码如下:C#脚本(在Unity 5.5.1 下能运行):using System.Collections;using System.Collections.Generic;using UnityEngine;public class...

    前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动。

    代码如下:

    C#脚本(在Unity 5.5.1 下能运行):

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    public class MouseView : MonoBehaviour {

    public enum RotationAxes

    {

    MouseXAndY = 0,

    MouseX = 1,

    MouseY = 2

    }

    public RotationAxes m_axes = RotationAxes.MouseXAndY;

    public float m_sensitivityX = 10f;

    public float m_sensitivityY = 10f;

    // 水平方向的 镜头转向

    public float m_minimumX = -360f;

    public float m_maximumX = 360f;

    // 垂直方向的 镜头转向 (这里给个限度 最大仰角为45°)

    public float m_minimumY = -45f;

    public float m_maximumY = 45f;

    float m_rotationY = 0f;

    // Use this for initialization

    void Start () {

    // 防止 刚体影响 镜头旋转

    if (GetComponent()) {

    GetComponent ().freezeRotation = true;

    }

    }

    // Update is called once per frame

    void Update () {

    if (m_axes == RotationAxes.MouseXAndY) {

    float m_rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * m_sensitivityX;

    m_rotationY += Input.GetAxis ("Mouse Y") * m_sensitivityY;

    m_rotationY = Mathf.Clamp (m_rotationY, m_minimumY, m_maximumY);

    transform.localEulerAngles = new Vector3 (-m_rotationY, m_rotationX, 0);

    } else if (m_axes == RotationAxes.MouseX) {

    transform.Rotate (0, Input.GetAxis ("Mouse X") * m_sensitivityX, 0);

    } else {

    m_rotationY += Input.GetAxis ("Mouse Y") * m_sensitivityY;

    m_rotationY = Mathf.Clamp (m_rotationY, m_minimumY, m_maximumY);

    transform.localEulerAngles = new Vector3 (-m_rotationY, transform.localEulerAngles.y, 0);

    }

    }

    }

    调用时,只需把该脚本绑定给物体即可。这里是绑定摄像机,以摄像机为第一人称视角转动。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    时间: 2019-02-24

    展开全文
  • 前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动。代码如下:C#脚本(在Unity 5.5.1 下能运行):using System.Collections; using System.Collections.Generic; using UnityEngine; public ...

    前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动。

    代码如下:

    C#脚本(在Unity 5.5.1 下能运行):

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseView : MonoBehaviour { public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } public RotationAxes m_axes = RotationAxes.MouseXAndY; public float m_sensitivityX = 10f; public float m_sensitivityY = 10f; // 水平方向的 镜头转向 public float m_minimumX = -360f; public float m_maximumX = 360f; // 垂直方向的 镜头转向 (这里给个限度 最大仰角为45°) public float m_minimumY = -45f; public float m_maximumY = 45f; float m_rotationY = 0f; // Use this for initialization void Start () { // 防止 刚体影响 镜头旋转 if (GetComponent()) { GetComponent ().freezeRotation = true; } } // Update is called once per frame void Update () { if (m_axes == RotationAxes.MouseXAndY) { float m_rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * m_sensitivityX; m_rotationY += Input.GetAxis ("Mouse Y") * m_sensitivityY; m_rotationY = Mathf.Clamp (m_rotationY, m_minimumY, m_maximumY); transform.localEulerAngles = new Vector3 (-m_rotationY, m_rotationX, 0); } else if (m_axes == RotationAxes.MouseX) { transform.Rotate (0, Input.GetAxis ("Mouse X") * m_sensitivityX, 0); } else { m_rotationY += Input.GetAxis ("Mouse Y") * m_sensitivityY; m_rotationY = Mathf.Clamp (m_rotationY, m_minimumY, m_maximumY); transform.localEulerAngles = new Vector3 (-m_rotationY, transform.localEulerAngles.y, 0); } } }

    调用时,只需把该脚本绑定给物体即可。这里是绑定摄像机,以摄像机为第一人称视角转动。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

    展开全文
  • Unity使用鼠标旋转缩放平移视角,供大家参考,具体内容如下用代码在Game界面完美实现Scene界面的操作方法。使用方法:把脚本挂在相机上,把跟踪的target拖到脚本上。视角跟踪的是一个空物体,当然如果你是做RPG游戏...

    Unity使用鼠标旋转缩放平移视角,供大家参考,具体内容如下

    用代码在Game界面完美实现Scene界面的操作方法。

    使用方法:把脚本挂在相机上,把跟踪的target拖到脚本上。

    视角跟踪的是一个空物体,当然如果你是做RPG游戏需要跟踪某一角色的视角,那就不需要中键平移功能,把空物体换成角色就行。

    代码主要是分三部分功能进行实现。

    1.右键拖动控制视角的旋转;

    2.滚轮旋转控制视角的缩放;

    3.中键拖动控制视角的平移。

    右键拖动控制旋转主要是用GetAxis获得鼠标在x方向与y方向平移的距离,相机的旋转是通过旋转相机本体坐标系的x轴与y轴实现的,重要的是在旋转相机的同时,要控制相机和target物体的相对距离,即同时控制相机绕target物体的旋转。这个网上多数实现都相同,不赘述

    中键滚轮控制视角的缩放,定义Distance变量控制相机与target的距离(相机z轴方向的距离),用GetAxis获得滚轮旋转的程度,控制Distance的变动。这里和网上已有的方法也没什么区别。

    中键拖动控制视角的平移,之前在网上查找相关的实现,结果实际效果都比较差,所以自己实现了一下。视角的平移是通过获取中键在屏幕坐标系下的平移的方向向量,然后转换为世界坐标系下的target坐标的平移,然后调整相机的位置进行相应的平移以保证旋转和缩放不受影响。

    屏幕坐标系的平移转换到世界坐标系下的平移,本质上就是世界坐标系下沿着相机的本体坐标系的x与y轴进行相应的平移。所以只需要求出屏幕坐标系x与y方向的平移,分别乘以相机x与y轴的方向向量,然后与target原来的坐标相加,就可以获得target平移后的位置,再将相机的位置平移过去即实现了视角的平移,这种平移保证了相机平面和target之间的相对距离保持不变。具体代码如下:

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    public class MouseLookTest : MonoBehaviour {

    //相机跟随的目标物体,一般是一个空物体

    public Transform target;

    private int MouseWheelSensitivity = 1; //滚轮灵敏度设置

    private int MouseZoomMin = 1; //相机距离最小值

    private int MouseZoomMax = 20; //相机距离最大值

    private float moveSpeed = 10; //相机跟随速度(中键平移时),采用平滑模式时起作用,越大则运动越平滑

    private float xSpeed = 250.0f; //旋转视角时相机x轴转速

    private float ySpeed = 120.0f; //旋转视角时相机y轴转速

    private int yMinLimit = -360;

    private int yMaxLimit = 360;

    private float x = 0.0f; //存储相机的euler角

    private float y = 0.0f; //存储相机的euler角

    private float Distance = 5; //相机和target之间的距离,因为相机的Z轴总是指向target,也就是相机z轴方向上的距离

    private Vector3 targetOnScreenPosition; //目标的屏幕坐标,第三个值为z轴距离

    private Quaternion storeRotation; //存储相机的姿态四元数

    private Vector3 CameraTargetPosition; //target的位置

    private Vector3 initPosition; //平移时用于存储平移的起点位置

    private Vector3 cameraX; //相机的x轴方向向量

    private Vector3 cameraY; //相机的y轴方向向量

    private Vector3 cameraZ; //相机的z轴方向向量

    private Vector3 initScreenPos; //中键刚按下时鼠标的屏幕坐标(第三个值其实没什么用)

    private Vector3 curScreenPos; //当前鼠标的屏幕坐标(第三个值其实没什么用)

    void Start () {

    //这里就是设置一下初始的相机视角以及一些其他变量,这里的x和y。。。是和下面getAxis的mouse x与mouse y对应

    var angles = transform.eulerAngles;

    x = angles.y;

    y = angles.x;

    CameraTargetPosition = target.position;

    storeRotation = Quaternion.Euler (y + 60, x, 0);

    transform.rotation = storeRotation; //设置相机姿态

    Vector3 position = storeRotation * new Vector3 (0.0F, 0.0F, -Distance) + CameraTargetPosition; //四元数表示一个旋转,四元数乘以向量相当于把向量旋转对应角度,然后加上目标物体的位置就是相机位置了

    transform.position = storeRotation * new Vector3 (0, 0, -Distance) + CameraTargetPosition; //设置相机位置

    // Debug.Log("Camera x: "+transform.right);

    // Debug.Log("Camera y: "+transform.up);

    // Debug.Log("Camera z: "+transform.forward);

    // //-------------TEST-----------------

    // testScreenToWorldPoint();

    }

    void Update () {

    //鼠标右键旋转功能

    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);

    storeRotation = Quaternion.Euler (y + 60, x, 0);

    var position = storeRotation * new Vector3 (0.0f, 0.0f, -Distance) + CameraTargetPosition;

    transform.rotation = storeRotation;

    transform.position = position;

    } else if (Input.GetAxis ("Mouse ScrollWheel") != 0) //鼠标滚轮缩放功能

    {

    if (Distance >= MouseZoomMin && Distance <= MouseZoomMax) {

    Distance -= Input.GetAxis ("Mouse ScrollWheel") * MouseWheelSensitivity;

    }

    if (Distance < MouseZoomMin) {

    Distance = MouseZoomMin;

    }

    if (Distance > MouseZoomMax) {

    Distance = MouseZoomMax;

    }

    var rotation = transform.rotation;

    transform.position = storeRotation * new Vector3 (0.0F, 0.0F, -Distance) + CameraTargetPosition;

    }

    //鼠标中键平移

    if (Input.GetMouseButtonDown (2)) {

    cameraX = transform.right;

    cameraY = transform.up;

    cameraZ = transform.forward;

    initScreenPos = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, targetOnScreenPosition.z);

    Debug.Log ("downOnce");

    //targetOnScreenPosition.z为目标物体到相机xmidbuttonDownPositiony平面的法线距离

    targetOnScreenPosition = Camera.main.WorldToScreenPoint (CameraTargetPosition);

    initPosition = CameraTargetPosition;

    }

    if (Input.GetMouseButton (2)) {

    curScreenPos = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, targetOnScreenPosition.z);

    //0.01这个系数是控制平移的速度,要根据相机和目标物体的distance来灵活选择

    target.position = initPosition - 0.01f * ((curScreenPos.x - initScreenPos.x) * cameraX + (curScreenPos.y - initScreenPos.y) * cameraY);

    //重新计算位置

    Vector3 mPosition = storeRotation * new Vector3 (0.0F, 0.0F, -Distance) + target.position;

    transform.position = mPosition;

    // //用这个会让相机的平移变得更平滑,但是可能在你buttonup时未使相机移动到应到的位置,导致再进行旋转与缩放操作时出现短暂抖动

    //transform.position=Vector3.Lerp(transform.position,mPosition,Time.deltaTime*moveSpeed);

    }

    if (Input.GetMouseButtonUp (2)) {

    Debug.Log ("upOnce");

    //平移结束把cameraTargetPosition的位置更新一下,不然会影响缩放与旋转功能

    CameraTargetPosition = target.position;

    }

    }

    //将angle限制在min~max之间

    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);

    }

    void testScreenToWorldPoint () {

    //第三个坐标指的是在相机z轴指向方向上的距离

    Vector3 screenPoint = Camera.main.WorldToScreenPoint (CameraTargetPosition);

    Debug.Log ("ScreenPoint: " + screenPoint);

    // var worldPosition = Camera.main.ScreenToWorldPoint(new Vector3(1,1,10));

    // Debug.Log("worldPosition: "+worldPosition);

    }

    }

    实现的效果如下图:

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • unity3D中经常需要通过鼠标操作视角的平移,旋转,缩放。这些操作都可以通过操作主摄像头来实现 二、实现 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; ...
  • 本文采用的方法依然是在[Unity3D]Unity3D游戏开发之自由视角下的角色控制这篇文章中所采用的方法,所以如果大家对于这部分内容不太了解的话,最好先去看看这篇文章。好了,下面我们将以一个具体的实例来讲解今天的...
  • Unity3D】键盘鼠标控制视角的移动

    万次阅读 2017-05-02 16:38:03
    下面举一个简单的例子说明在Unity3D如何用键盘鼠标控制视角的移动的。如下图所示: 就像大部分游戏一样,可以用鼠标滚轮控制视角的远近,键盘的wasd和上下左右控制镜头的位置,而按着鼠标右键则可以控制镜头的旋转...
  • MainCamera添加First Person Controller组件后,鼠标只能控制镜头上下动,不能左右转动。稍微修改一下MouseLook实现上下左右都能动。代码如下:using System;using UnityEngine;using UnityStandardAssets....
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼小弟是美工,刚接触编脚本没几天,今天试着修改了一下unity3d 自带的视角控制脚本MouseLook.cs其中第45行是小弟添加的,实现了绕角色旋转的功能,但是碰到一个问题,就是...
  • 鼠标显示隐藏 角色位移旋转(视野限制)距离缩放 第三人称相机防遮挡(将遮挡物体透明化) 前期准备 创建地形(示例使用长宽为100的Terrain) 创建主角(示例使用Sphere) 在主角物体下创建两个相机分别命名为FPS和TPS表示...
  • 该脚本可以用于即时战略类游戏的视角,提供了缩进,拉伸,旋转。同时按住鼠标右键不放,移动鼠标可以实现第一人称视角的效果。 1 using UnityEngine; 2 using System.Collections; 3 4 public class ...
  • 摄像机的拉近视角代码:  public Transform target;  public float minFov = 15f;  public float maxFov = 70f;  public float sensitivity = 10f;  void Start()  {  transform.LookAt(tar
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼小弟是美工,刚接触编脚本没几天,今天试着修改了一下unity3d 自带的视角控制脚本MouseLook.cs其中第45行是小弟添加的,实现了绕角色旋转的功能,但是碰到一个问题,就是...
  • unity3d控制camera移动旋转

    万次阅读 2016-04-19 14:05:11
    第一次写博客,刚开始学习unity。把近期所学记录下来~  最近做的demo是控制一个摄像头在一个室内的场景中自由移动,类似于第一人称视角。  1.用鼠标和键盘控制 using UnityEngine;usingSystem.Collections; ...
  •  今天呢,我们继续来探讨Unity3D角色控制的内容,自由视角是指玩家可以按照自身坐标系向着四个不同的方向移动,当玩家按下鼠标右键时,可以绕Y轴按照一定的角度旋转摄像机,在旋转的过程中,角色将旋转相应的角度。...
  • 初识Unity3D

    2019-06-09 11:55:12
    鼠标右键:旋转视角 鼠标滚轮:按下拖动视角 = hand tool 向上翻滚视角向前靠近,物体在视野中变大 向下翻滚视角向后远离,物体在视野中缩小 ALT+左键拖动:旋转,效果与右键有差异 ALT+右键拖动:控制视角向前...
  • 我们来探讨Unity3D角色控制的内容,如图是我非常喜欢的《古剑奇谭》游戏截图,在这款游戏中就使用了今天要讲解的自由视角,所谓自由视角是指玩家可以按照自身坐标系向着四个不同的方向移动,当玩家按下鼠标右键时,...
  • Unity3d_镜头跟随鼠标移动

    千次阅读 2017-12-11 18:38:35
    需要将摄像头放在另个GameObject里 ...这样使得整个视角都处于正对面,而不会出现倾斜等现象using System.Collections; using System.Collections.Generic; using UnityEngine;public class CameraCon
  • Unity3d快捷键

    2020-06-03 11:22:50
    鼠标中键拖动场景 鼠标滚轮缩放场景 选择物体,F键居中 ALT+鼠标左键:围绕选中物体旋转 ALT+鼠标右键:缩放选中的物体 Ctrl+1 切换到scene视图 ... unity3d场景视图切换:单击坐标轴  ...
  • unity3D古风武侠游戏源码 unity3D古风武侠游戏源码(45度视角),一款东方武侠风格游戏demo,3D场景与人物,45度固定视角,360度全方位旋转鼠标点击移动,c#脚本,中国古典风格游戏源码比较少,这个比较珍贵的。
  • 在漫游游戏中常用的功能就是人物在场景中行走,必要的功能就是鼠标点击地面人物就朝着那个方向行走,键盘方向键前后左右也能控制人物的行走和跳跃,在官方自带的第三人称视角中做了一点修改,官方自带的ThirdPerson...
  • 2018-11-25修改:加入防止UI穿透,如果相机有PhysicsRaycaster组件,考虑检测到UI是否向下传递给3D物体 ...2018-11-23修改:加入相机2D视角3D视角控制 using System.Collections; using System.Coll

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
热门标签
关键字:

unity3d鼠标旋转视角