2018-05-24 21:06:52 yanzhanyi 阅读数 8336

这个问题还可以是:

如何让某个物体跟随鼠标移动?

如何让游戏里的物体与鼠标移动绑定起来?

如何用鼠标控制游戏里的物体?

如何获取鼠标在屏幕上的移动和位置?

如何获取鼠标的移动方向?

如何获取真实鼠标的移动,不管光标有没有被屏幕限制住?

如何获取鼠标的移动方向和距离,而不是对应屏幕上的坐标?

如何能让鼠标控制一个物体连续的移动,不会被屏幕边框挡住?

====================================================

问题描述的有点模糊,具体就是你想要的到底是

鼠标光标(那个白色箭头)在屏幕平面上的(x,y)坐标?

还是

你手里握着的真实鼠标在桌面上的移动距离和方向?

====================================================

这样说就清楚多了,查了好久,下面分别介绍下:

1、获取鼠标光标(那个白色箭头)在屏幕平面上的(x,y)坐标

这个主要用的是

Input.mousePosition
这个方法,这个方法获取了鼠标光标在屏幕上的位置,不太好的或者说是需要注意的是,他的坐标轴设置的有些奇怪,包括原点的位置什么的,用log看一下输出就明白了。


public class Mouse : MonoBehaviour {
    private Vector2 MousePositionLast;//用于计算移动方向的起始位置
    private Vector2 MousePositionNew;//用于计算移动方向的结尾位置
    private Vector2 MouseMoveDirection;//用于表示移动方向
    private Vector3 MouseWorldMoveDirection;//用于在世界坐标系里移动某物体的方向向量
    public Transform MouseObject;//想要在世界坐标系里移动的物体
    public float MouseSensitivity;//鼠标光标移动速度映射到物体移动速度时的比例或灵敏度


    // Update is called once per frame
    void Update () {

        MousePositionLast = MousePositionNew;
        MousePositionNew = Input.mousePosition;
        MouseMoveDirection = MousePositionNew - MousePositionLast; //用两个坐标相减,得出鼠标的移动方向向量

        MouseWorldMoveDirection = new Vector3(-MouseMoveDirection.x, 0, -MouseMoveDirection.y) * MouseSensitivity;//这个我把二维的方向向量映射到三维的世界坐标系上,这个根据自己需要自己改就好了
        MouseObject.Translate(MouseWorldMoveDirection);//跟着鼠标移动物体

    }
}

这样就可以让物体随着鼠标的移动而移动,然而这时物体只能在一定范围内移动,映射于光标在屏幕范围内的移动。

具体映射方式可以自己写一个函数就好。

(记得去Inspector里设置MouseObject和MouseSensitivity)


2、握着的真实鼠标在桌面上的移动距离和方向

这个其实用的是

Input.GetAxis("Mouse X")
Input.GetAxis("Mouse Y")

这两个方法得到了鼠标在桌面上的移动方向向量

public class Mouse : MonoBehaviour {

    private Vector2 MouseMoveDirection;//用于表示移动方向
    private Vector3 MouseWorldMoveDirection;//用于在世界坐标系里移动某物体的方向向量
    public Transform MouseObject;//想要在世界坐标系里移动的物体
    public float MouseSensitivity;//鼠标光标移动速度映射到物体移动速度时的比例或灵敏度


    // Update is called once per frame
    void Update () {

        MouseMoveDirection = new Vector2( Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));

        MouseWorldMoveDirection = new Vector3(-MouseMoveDirection.x, 0, -MouseMoveDirection.y) * MouseSensitivity;//这个我把二维的方向向量映射到三维的世界坐标系上,这个根据自己需要自己改就好了
        MouseObject.Translate(MouseWorldMoveDirection);//跟着鼠标移动物体

    }
}
这个时候你就可以一直拖着物体朝着某个方向移动,即使是屏幕上的鼠标已经移动到了屏幕的角落里被挡住,物体仍然可以被鼠标带着走。

(记得去Inspector里设置MouseObject和MouseSensitivity)


3、这个里面还有各种触发事件比如鼠标在不在游戏程序的显示界面内之类的,大家可以自己探索下。


谢谢

2016-05-10 18:53:40 Gary_888 阅读数 1370

Unity3D射线检测控制转向,使用Ray射线检测鼠标的位置信息,角色transform方向转向该位置。

//控制转向
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hitInfo;//碰撞信息,用来获取从raycast函数中得到的信息反馈的结构
        if (Physics.Raycast(ray, out hitInfo, 200, groundLayerIndex))//检测射线,控制转向
        {
            Vector3 target = hitInfo.point;
            target.y = transform.position.y;
            transform.LookAt(target);
        }

2018-11-13 15:11:48 luoyikun 阅读数 1074

1.某个localPosition

Vector3 homePosIn = new Vector3(float.Parse(lookIn[0]), float.Parse(lookIn[1]), float.Parse(lookIn[2]));

2.得到相对父物体的世界坐标

Vector3 homePosInWorld = m_curHome.transform.TransformPoint(homePosIn);

3.转换为相对B的localPosition

Vector3 homePosInHomeMgrLocal = m_homeAllPar.transform.InverseTransformPoint(homePosInWorld);
2017-12-20 20:20:33 qq_36834959 阅读数 3635

之前有记录过3D场景下物体的移动,是利用Input.GetAxis方法进行获取键盘的输入,然后在移动方向上施加一个力向量rigidbody rd=AddForce(new Vector3(x,0,y)*speed);进行前后左右的移动,今天在2D的学习中,发现了与3D游戏中物体运动不同的一个方法。


首先还是需要利用Input.GetAxis获取键盘输入的信息

public float speed;  //移动速度

public float angularSpeed;    //物体旋转速度

private Rigidbody rigidbody;

void Update(){
  float v= input.GetAxis("Vertical");  //竖直方向的移动
  rigidbody.Velocity=transform.foward*speed*v;
  float h=input.GetAxis("Horizontal");
  rigidbody.angularVelocity=transform.up*angularSpeed*h;
}
首先利用方法获取键盘输入信息,然后利用rigidbody组件中的velocity属性和angularVelocity属性进行物体的前后移动和选装,这个方法适合车的移动,是否可以用于其他的场景,现在还没有过多的研究,总之,对于一个动作的实现方法,我们会的越多,就越好~

unity 获取物体尺寸

阅读数 6594

没有更多推荐了,返回首页