unity3d物体跟随鼠标移动

namespace script {
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

///
/// 移动
///

public class Ts : MonoBehaviour {

    public Texture2D mouseTexture; //鼠标样式纹理图
    public Vector3 mousePos;


    void Start() {

    }

    void OnMouseEnter() {
        //更换鼠标的样式
        Cursor.SetCursor(this.mouseTexture, Vector2.zero, CursorMode.Auto);

    }

    void OnMouseExit() {
        //恢复回鼠标的样式
        Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);

    }



//通过鼠标移动物体Cube
    IEnumerator OnMouseDown() {
        Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position); //三维物体坐标转屏幕坐标
        //将鼠标屏幕坐标转为三维坐标,再计算物体位置与鼠标之间的距离
        var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));
        print("down");
        while (Input.GetMouseButton(0)) {
            Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);
            var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;
            transform.position = curPosition;
            yield return new WaitForFixedUpdate();
        }
    }
}
}

 

另外的实现方式

//  拖拽

  private void OnMouseDrag() {
        
        //得到摄像机到物体的向量
        Vector3 CO_Direction = transform.position - Camera.main.transform.position;
        //得到摄像机与物体所在平面的距离
        float cPlane = Vector3.Dot(CO_Direction, Camera.main.transform.forward);
      
        transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, cPlane));
 
    }

摄影机跟随物体旋转

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


/**
 * 摄影机绕物体旋转
 */
public class ThirdPCamC : MonoBehaviour {
    public float mouseSensitivity = 2;
    public Transform targetTrans; // 跟随的物体

    public Transform thirdPCamAxle; // 轴心
    Vector3 thirdPCamEuler;

    Camera thirdPCam;
    float camForwardMaxDistance = 9;
    float camForwardDistance;
    float camBackDistance;

    void Start() {
 
        thirdPCamEuler = thirdPCamAxle.localEulerAngles;

        thirdPCam = Camera.main;
    }

    void Update() {
        //以 0.05f 的步幅增加/减少。GetAxisRaw 立即从 0 变为 1 或 -1,因此没有步幅  ,往左是-,右是+  
   //     print(Input.GetAxis("Mouse X"));  
        thirdPCamAxle.position = targetTrans.position;
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
        thirdPCamEuler.y += mouseX;
        
         float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
         thirdPCamEuler.x += mouseY;

         // if (thirdPCamEuler.x < 90 && mouseY > 0) { thirdPCamEuler.x += mouseY; }
         // if (thirdPCamEuler.x > -90 && mouseY < 0) { thirdPCamEuler.x += mouseY; }
        thirdPCamAxle.localEulerAngles = thirdPCamEuler;
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值