Unity - 在鼠标点击的位置放置对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity - 在鼠标点击的位置放置对象相关的知识,希望对你有一定的参考价值。

参考技术A

你最终会得到下面的效果:

你可以使用函数实例化多个给定的游戏对象或预制对象。
Instantiate (Object Target, object’s position, object’s rotation) 或者 Instantiate (Object Target) 。

如果你想在屏幕上某个点击的位置实例化一个游戏对象,那么首先你就需要找到世界点。

你可以使用下面两种方式来完成这件事:

我们将会使用鼠标的位置把对象放置到世界坐标的位置。可以使用下面的函数来获得鼠标的位置: Input.mousePosition ,这个函数返回了以像素的为单位的位置。所以我们需要把它转换成世界坐标的位置。为了转换鼠标的位置为世界坐标的位置,我们将使用下面的函数: Camera.main.ScreenToWorldPoint ,这个函数会把屏幕的坐标转换成世界坐标。

现在我们可以使用这个位置把对象放置在鼠标点击的地方。现在通过使用这个函数,我们会创建一个简短的演示程序。

打开 unity 然后依次点击 *File >> New Project *

命名为 InstantiateObjectAtSpace 然后从下拉菜单中选择 2D 之后点击创建按钮。创建一个场景,包括主摄像机和一个游戏对象,把这个游戏对象作为一个克隆的目标对象。

你也可以创建一个画布和一个面板组件然后设置任意的图像作为背景。(可选)

当然,图像也可以用作目标对象。为此,我们需要转换图片为 2D 精灵,然后在场景中我们可以使用该图像作为一个游戏对象。

现在,把下面的 C# 脚本应用到摄像机上,来引用我们想要实例化的目标对象。

InstantiateAtMousePosition.cs

使用鼠标左键来放置对象。

在把对象放置在空间上时,保持按住鼠标左键按下移动对象的位置。

Unity让物体跟随鼠标移动

前言

最近在学习Unity,记录下学习的成果吧。本文最终结果是要实现一个小飞机跟随鼠标移动的效果。看下图片。

向量

在Unity中,每个对象都有自己的位置属性,组件叫做Transform,通过Transform可以获取对象的位置属性。在上面的实例中,我们需要获取到鼠标的8实时位置和小飞机的实时位置,接着计算出小飞机到鼠标位置的向量。

那么什么是向量,简单来说,向量就是有大小和方向的量,一般用箭头表示,箭头的方向就是表示向量的方向,箭头的长度就是表示向量的大小。

向量的运算

这里就简单介绍下向量的加法和减法。非常简单,直接拿对应的坐标相减/加即可。
比如有一个坐标a(3,2),坐标b(0,2),求a+b = (3,4),表示到图上就是。

向量的减法也同理,直接相应的坐标相减即可。

向量夹角计算

比如有两个坐标,a(2,2) b(-2,2),如下图所实施。如何计算这两个向量的夹角呢。

在Unity中我们可以用SignedAngle方法来计算两个向量的夹角。

 //计算向量夹角
 var angle = Vector3.SignedAngle(face, direction,Vector3.forward);

物体旋转

在2D的项目中,我们要控制物体的旋转,一般是直接调用Rotate方法来控制Z轴的数值就好。

  this.transform.Rotate(0, 0, angle);

其中angle就是旋转角度。angle为正表示逆时针旋转,为负表示顺时针旋转。

物体移动

在2D图形中,想让物体往前移动,我们可以调用Translate方法,修改其Y轴坐标即可。然后坐标表示已自己为中心。

transform.Translate(0, 0.02f, 0, Space.Self);

完整代码

结合上面的一些实例,我们差不多可以做出这样的效果了,当然还需要获取鼠标的坐标。

//表示鼠标的屏幕坐标
var mousePosition = Input.mousePosition
//转成世界坐标
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

完整代码如下

  	void Start()
    
        Application.targetFrameRate = 50;
    
    void Update()
    
        var face = this.transform.up;
        //获取鼠标位置
        Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mousePosition.z=0;
        //获取小飞机位置
        Vector3 screenPosition = transform.position;
        //计算向量
        var direction = mousePosition - screenPosition;
        //计算向量夹角
        var angle = Vector3.SignedAngle(face, direction, Vector3.forward);
        this.transform.Rotate(0, 0, angle);
        //小飞机移动
        transform.Translate(0, 0.02f, 0, Space.Self);
    

best wishes from Dragon Boat Festival

以上是关于Unity - 在鼠标点击的位置放置对象的主要内容,如果未能解决你的问题,请参考以下文章

unity中鼠标点击触发物体运动

unity中为啥鼠标点击后就看不见鼠标了

Unity UGUI获取鼠标在屏幕的准确点击位置

unity3D 鼠标点击拖动画线

unity3d 2D平面游戏实现鼠标拖拽物体移动

unity中让物体移动到鼠标点击位置(单击移动和双击暂停移动)