/// 摄像机控制器. 将该脚本挂载到CameraFollowAndRotate空物体身上. /// public class CameraController : MonoBehaviour public static CameraController instance; /// /// 控制摄像机的上下. /// [SerializeField] private Transform _CameraUpAndDown; /// /// 控制摄像机缩放. /// [SerializeField] private Transform _CameraZoomContainer; /// /// 摄像机容器. /// [SerializeField] private Transform _CameraContainer; void Awake() instance = this; /// /// 设置摄像机旋转. /// /// 0代表左 1代表右 public void SetCameraRotate(int type) transform.Rotate(new Vector3(0,20*Time.deltaTime*(type==1?-1:1),0)); /// /// 设置摄像机上下. /// /// 0代表上 1代表下 public void SetCameraUpAndDown(int type) _CameraUpAndDown.Rotate(20 * Time.deltaTime * (type == 0 ? -1 : 1),0,0); //限定摄像机上下. 注意事项:不要把_CameraUpAndDown这个空物体的旋转最小值设置成负数 _CameraUpAndDown.localEulerAngles = new Vector3(Mathf.Clamp(_CameraUpAndDown.localEulerAngles.x,5,70),0,0); /// /// 设置摄像机拉近拉远. /// public void SetCameraZoom(float value) _CameraContainer.Translate(Vector3.forward * value * Time.deltaTime * 1000); //限定摄像机最远和最近距离. _CameraContainer.localPosition = new Vector3(0,0,Mathf.Clamp(_CameraContainer.localPosition.z,-26,26)); /// /// 绘制摄像机运动轨迹. /// void OnDrawGizmos() Gizmos.color = Color.red; Gizmos.DrawWireSphere(transform.position,24); Gizmos.color = Color.blue; Gizmos.DrawWireSphere(transform.position, 19);

鼠标滑动拖拽事件代码:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// 拖拽事件脚本.  将该脚本挂载到Panel身上.
/// </summary>
public class DragEvent : MonoBehaviour, IDragHandler,IPointerDownHandler
    private Vector2 oldMousePos;//记录上一次鼠标点中屏幕的坐标.
    public static DragEvent instance;
    void Awake()
        instance = this;
    /// <summary>
    /// 拖拽的方向.
    /// </summary>
    public enum DragDir
        Left,
        Right,
    /// <summary>
    /// 缩放类型.
    /// </summary>
    public enum ZoomType
        In,//向内.
        Out//向外.
    /// <summary>
    /// 拖拽事件
    /// </summary>
    public Action<DragDir> onDragEvent;
    public Action<ZoomType,float> onZoomEvent;
    void Update()
        //获取鼠标滚轮键滑动的值.  >0代表拉近   <0代表拉远.
        if (Input.GetAxis("Mouse ScrollWheel")>0)
            if (onZoomEvent != null)
                onZoomEvent(ZoomType.In, Input.GetAxis("Mouse ScrollWheel"));
        }else if (Input.GetAxis("Mouse ScrollWheel")< 0)
            if (onZoomEvent != null)
                onZoomEvent(ZoomType.Out, Input.GetAxis("Mouse ScrollWheel"));
    /// <summary>
    /// 拖拽进行中.
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
        Vector2 dir = eventData.position - oldMousePos;
       //计算鼠标滑动的方向.
        if(dir.y<dir.x&& dir.y > -dir.x)
            if (onDragEvent != null)
                onDragEvent(DragDir.Right);
        }else if(dir.y>dir.x && dir.y < -dir.x)
            if (onDragEvent != null)
                onDragEvent(DragDir.Left);
        else if (dir.y > dir.x && dir.y>-dir.x)
            if (onDragEvent != null)
                onDragEvent(DragDir.Up);
            if (onDragEvent != null)
                onDragEvent(DragDir.Down);
    /// <summary>
    /// 鼠标在屏幕按下的时候.
    /// </summary>
    public void OnPointerDown(PointerEventData eventData)
        oldMousePos = eventData.position;

控制角色的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 角色控制器.  将该脚本挂载到Player游戏物体身上.
/// </summary>
public class PlayerController : MonoBehaviour {
    private Transform _Transform;
    void Start()
        _Transform = gameObject.GetComponent<Transform>();
        //订阅事件.
        DragEvent.instance.onDragEvent += OnDragEvent;
        DragEvent.instance.onZoomEvent += OnZoomEvent;
    void OnDestroy()
        //取消事件.
        DragEvent.instance.onDragEvent -= OnDragEvent;
        DragEvent.instance.onZoomEvent -= OnZoomEvent;
    /// <summary>
    /// 事件回调.
    /// </summary>
    private void OnDragEvent(DragEvent.DragDir dir)
        switch (dir)
            case DragEvent.DragDir.Left:
                CameraController.instance.SetCameraRotate(1);
                break;
            case DragEvent.DragDir.Right:
                CameraController.instance.SetCameraRotate(0);
                break;
            case DragEvent.DragDir.Up:
                CameraController.instance.SetCameraUpAndDown(0);
                break;
            case DragEvent.DragDir.Down:
                CameraController.instance.SetCameraUpAndDown(1);
                break;
    /// <summary>
    /// 摄像机缩放事件回调.
    /// </summary>
    /// <param name="zoom"></param>
    /// <param name="value"></param>
    private void OnZoomEvent(DragEvent.ZoomType zoom,float value)
        switch (zoom)
            case DragEvent.ZoomType.In:
                CameraController.instance.SetCameraZoom(value);
                break;
            case DragEvent.ZoomType.Out:
                CameraController.instance.SetCameraZoom(value);
                break;
    void Update()
        CameraAutoFollow();
    /// <summary>
    /// 摄像机自动跟随.
    /// </summary>
    private void CameraAutoFollow()
        if (CameraController.instance != null)
            CameraController.instance.transform.position = _Transform.position;
                    控制摄像机的代码如下:using System.Collections;using System.Collections.Generic;using UnityEngine;/// &amp;lt;summary&amp;gt;/// 摄像机控制器.  将该脚本挂载到CameraFollowAndRotate空物体身上./// &amp;lt;/summary&amp;gt;public class Cam...
				
Unity使用鼠标旋转平移视角,供大家参考,具体内容如下 用代码在Game界面完美实现Scene界面的操作方法。 使用方法:把脚本挂在相机上,把跟踪的target拖到脚本上。 视角跟踪的是一个空物体,当然如果你是做RPG游戏需要跟踪某一角色的视角,那就不需要中键平移功能,把空物体换成角色就行。 代码主要是分三部分功能进行实现。 1.右键拖动控制视角的旋转; 2.滚轮旋转控制视角的; 3.中键拖动控制视角的平移。 右键拖动控制旋转主要是用GetAxis获得鼠标在x方向与y方向平移的距离,相机的旋转是通过旋转相机本体坐标系的x轴与y轴实现的,重要的是在旋转相机的同时,要控制相机和targ
此处0.1为啥要写0.1f,根据C#的语法规定,直接写0.1会被认为double类型的数,而这里需要flaot类型数。 此处*Time.deltatime是确保每秒移动同样的距离。 Time.deltatime 是两帧之间的间隔,如帧率为60帧/秒,则Time.deltatime =0.0167秒,或者帧率为10帧/秒,则Time.delatatime = 0.1秒。所以Time.delatatime是一个随帧率改变而改变的数值,确保物体每秒.
public void ChangeModelPositionZ(Transform currentObj, float minValue, float maxValue, float moveSpeed = 0.1f, bool isMove = false) if (isMove) moveL = currentObj.localPosition.z + moveSpeed; if (moveL &l...
  实现了一个功能脚本,方便于摄像机围绕一个物体进行旋转,使用的方式也很简单,将脚本挂载到主摄像机中。   这里还用到了DoTween的插件和UniRx,需要自己导入一下,如果不想使用插件,可以把以下代码简单修改一下。 using UnityEngine; using DG.Tweening; using UnityEngine.EventSystems; using QFramework; using UniRx; using UniRx.Triggers; /// <summary&
public GameObject lightpoint; //上下移动的ui对象 private float starttime = 0.0f; private float downpoint = -71.0f; //实际情况来定 private float toppoint = 100.0f; //实际情况来定 private float movetime = 2.0f; voi...
也可以配合键盘一起使用: 3. 鼠标右键按住不,此时能以键盘上的wasdqe键进行移动旋转视觉位置。 4. 围绕物体旋转,按住键盘ALT,再按住鼠标左键不。也可以先定位物体(焦点),方法是双击物体或者选中物体后按F键,再ALT,鼠标左键。 我个人实践起来,觉... // 根据鼠标移动旋转物体 Vector3 mouseOffset = (Input.mousePosition - mouseOrigin) * 0.1f; transform.Rotate(mouseOffset.y, -mouseOffset.x, 0, Space.World); mouseOrigin = Input.mousePosition; if (isMoving) // 根据鼠标移动移动物体 Vector3 mouseOffset = (Input.mousePosition - mouseOrigin) * 0.01f; transform.Translate(mouseOffset.x, mouseOffset.y, 0, Space.World); mouseOrigin = Input.mousePosition; if (isScaling) // 根据鼠标滚轮的滚动来物体 float scaleAmount = 1f + scroll; transform.localScale *= scaleAmount; 将以上代码添加到一个物体上,然后在场景中将需要控制的物体作为该物体的子物体。在运行游戏时,你可以使用鼠标右键来旋转物体,使用鼠标中键来移动物体,使用鼠标滚轮来物体。