服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity实现物体跟随鼠标移动

Unity实现物体跟随鼠标移动

2022-12-16 13:52陈言必行 C#

这篇文章主要为大家详细介绍了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);

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

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

实现跟随鼠标运动

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
    }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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);
        }
    }
}

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

原文链接:https://czhenya.blog.csdn.net/article/details/76615325

延伸 · 阅读

精彩推荐
  • C#C#调用dos窗口获取相关信息的方法

    C#调用dos窗口获取相关信息的方法

    这篇文章主要介绍了C#调用dos窗口获取相关信息的方法,涉及C#调用dos窗口及进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧10612021-10-22
  • C#C#中的DateTime是值类型还是引用类型

    C#中的DateTime是值类型还是引用类型

    近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容,大家有需要的朋友可以参考下...

    zhixin90018372021-12-31
  • C#C#中ZipHelper 压缩和解压帮助类

    C#中ZipHelper 压缩和解压帮助类

    本文介绍C#实现压缩与解压缩帮助类ZipHelper,主要是通过ICSharpCode.SharpZipLib 类库实现的。...

    杨恒连5282021-11-21
  • C#利用TaskManager爬取2万条代理IP实现自动投票功能

    利用TaskManager爬取2万条代理IP实现自动投票功能

    话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票。可是这种事做多了就会考虑能...

    C#教程网6022021-10-26
  • C#C# 利用Selenium实现浏览器自动化操作的示例代码

    C# 利用Selenium实现浏览器自动化操作的示例代码

    这篇文章主要介绍了C# 利用Selenium实现浏览器自动化操作,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...

    Alan.hsiang12052022-10-09
  • C#C#实现猜数字小游戏

    C#实现猜数字小游戏

    这篇文章主要为大家详细介绍了C#实现猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    fanxingyue9622022-08-29
  • C#WPF自动隐藏的消息框的实例代码

    WPF自动隐藏的消息框的实例代码

    本文给大家介绍WPF自动隐藏的消息框实例代码,当鼠标放上去将一直显示,移开动画继续,提供normal和error两种边框。非常不错,具有参考借鉴价值,感兴...

    逆天の萌娃4572021-12-01
  • C#C# 对象映射的高性能方案

    C# 对象映射的高性能方案

    这篇文章主要介绍了C# 对象映射的高性能方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,有需要的朋友可以...

    乌龟会哲_Program4992022-10-24