Unity 之 代码实现物体跟随鼠标移动

Unity 之 代码实现物体跟随鼠标移动
 
相关函数
  • Vector3.Lerp 线性插值
    C# => static Vector3 Lerp(Vector3 from, Vector3 to, float t);
  • Vector3.MoveTpwards 移向
    C# => static function MoveTowards(current: Vector3, target: Vector3, maxDistanceDelta: float): Vector3;
  • Vector3.SmoothDamp 平滑阻尼
    C# =>static Vector3 SmoothDamp(Vector3 current, Vector3 target, Vector3 currentVelocity, float smoothTime, float maxSpeed = Mathf.Infinity, float deltaTime = Time.deltaTime);

 

着时间的推移,逐渐改变一个向量朝向预期的方向移动

向量由一些像弹簧阻尼器函数平滑,这将用远不会超过,最常见的用途是跟随相机

实现跟随鼠标运动

public class Demo : MonoBehaviour {

    void Start () {
    }

    void Update () {
        // 此时的摄像机必须转换 2D摄像机 来实现效果(即:摄像机属性Projection --> Orthographic)
        Vector3 dis = Camera.main.ScreenToWorldPoint(Input.mousePosition); //获取鼠标位置并转换成世界坐标
        dis.z = this.transform.position.z; //固定z轴
        this.transform.position = dis; //使物体跟随鼠标移动
        Debug.Log(dis); //输出变化的位置
        //使用Lerp方法实现 这里的Time.deltaTime是指移动速度可以自己添加变量方便控制
        this.transform.position= Vector3.Lerp(this.transform.position,dis,Time.deltaTime);
        //使用MoveTowards方法实现,这个方法是匀速运动
        this.transform.position = Vector3.MoveTowards(this.transform.position, dis, Time.deltaTime);
        //使用SmoothDamp方式实现,给定时间可以获取到速度
        Vector3 speed = Vector3.zero;
        this.transform.position = Vector3.SmoothDamp(this.transform.position, dis,ref speed, 0.1f);
        Debug.Log(speed);
    }
}

根据鼠标点下位置移动物体:

public class Move : MonoBehaviour
{
    void Start()
    {
        
    }

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            //获取需要移动物体的世界转屏幕坐标
            Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);
            //获取鼠标位置
            Vector3 mousePos = Input.mousePosition;
            //因为鼠标只有X,Y轴,所以要赋予给鼠标Z轴
            mousePos.z = screenPos.z;
            //把鼠标的屏幕坐标转换成世界坐标
            Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);
            //控制物体移动
            transform.position = worldPos;
            //刚体的方式
            //transform.GetComponent<Rigidbody>().MovePosition(worldPos);
        }
    }
}

 

 

 

### 回答1: 以下是在 Unity 中让物体跟随鼠标移动代码示例(C#): ```csharp using UnityEngine; public class FollowMouse : MonoBehaviour { void Update() { // 获取鼠标在屏幕上的位置 Vector3 mousePosition = Input.mousePosition; // 将鼠标位置转换为世界坐标系中的位置 mousePosition = Camera.main.ScreenToWorldPoint(mousePosition); // 将物体的位置设置为鼠标位置 transform.position = new Vector3(mousePosition.x, mousePosition.y, transform.position.z); } } ``` 上述代码会在每一帧更新物体的位置,使其跟随鼠标移动。具体而言,它首先获取鼠标在屏幕上的位置,然后将其转换为世界坐标系中的位置。最后,将物体的位置设置为鼠标位置,但保持它原来的 z 坐标值不变。 ### 回答2: 在Unity实现物体跟随鼠标移动代码可以通过以下步骤来实现: 1. 首先,在脚本中创建一个公共的变量用于存储物体的速度。 ```c# public float speed = 10.0f; ``` 2. 在Update函数中获取鼠标的当前位置。 ```c# Vector3 mousePos = Input.mousePosition; ``` 3. 将鼠标的屏幕坐标转换为世界坐标,确保物体能够跟随鼠标在场景中移动。 ```c# Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, transform.position.z - Camera.main.transform.position.z)); ``` 4. 计算鼠标位置与物体当前位置的方向向量。 ```c# Vector3 direction = mouseWorldPos - transform.position; ``` 5. 根据物体的速度和方向向量,将物体进行移动。 ```c# transform.Translate(direction.normalized * speed * Time.deltaTime); ``` 完整的代码如下: ```c# using UnityEngine; public class ObjectFollow : MonoBehaviour { public float speed = 10.0f; void Update() { Vector3 mousePos = Input.mousePosition; Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, transform.position.z - Camera.main.transform.position.z)); Vector3 direction = mouseWorldPos - transform.position; transform.Translate(direction.normalized * speed * Time.deltaTime); } } ``` 将该脚本挂载到要跟随鼠标移动物体上,该物体就可以根据鼠标的位置实现跟随移动了。 ### 回答3: 在Unity中,可以通过以下代码实现物体跟随鼠标移动: 首先,在需要跟随鼠标移动物体上添加以下脚本: ```csharp using UnityEngine; public class MouseFollow : MonoBehaviour { void Update() { // 获取鼠标在屏幕上的位置 Vector3 mousePosition = Input.mousePosition; // 将屏幕上的坐标转换为世界坐标 Vector3 newPosition = Camera.main.ScreenToWorldPoint(new Vector3(mousePosition.x, mousePosition.y, 10f)); // 将物体位置设置为鼠标位置 transform.position = newPosition; } } ``` 解释代码: - 在Update()函数中,获取鼠标在屏幕上的位置,使用Input.mousePosition来获取鼠标的屏幕坐标。 - 使用Camera.main.ScreenToWorldPoint将鼠标屏幕坐标转换为世界坐标。注意我们将Z轴设置为10f,确保物体在摄像机视野中。 - 最后,将物体的位置设置为鼠标的世界坐标,使其跟随鼠标移动。 将该脚本添加到需要跟随鼠标移动物体上后,当运行游戏时,该物体跟随鼠标移动,并始终在鼠标位置。 以上就是使用Unity代码实现物体跟随鼠标移动的方法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈言必行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值