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

目录: 1.基本信息 2.示例工程 3.脚本

目标 这篇博客的主要目标是告诉你使用鼠标点击的位置拾取或放置对象的做法。

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

效果图

第一步 基本信息

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

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

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

  1. 如果你正在做一个射击类游戏,为了找到对象被击中的位置,可以调用 hit.point
  2. 你可以使用鼠标的位置很容易转换成世界坐标的位置。

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

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

第二步 示例工程

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

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

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

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

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

InstantiateAtMousePosition.cs

using UnityEngine;
using System.Collections;
 
public class InstantiateAtMousePosition : MonoBehaviour {
 
    Vector3 mousePosition,targetPosition;
 
    //To Instantiate TargetObject at mouse position
    public Transform targetObject;
 
    float distance=10f;
 
    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
 
        //To get the current mouse position
        mousePosition=Input.mousePosition;
 
        //Convert the mousePosition according to World position
        targetPosition=Camera.main.ScreenToWorldPoint(new Vector3(mousePosition.x,mousePosition.y,distance));
 
        //Set the position of targetObject
        targetObject.position=targetPosition;
 
        //Debug.Log(mousePosition+"   "+targetPosition);
 
 
        //If Left Button is clicked
        if(Input.GetMouseButtonUp(0))
        {
            //create the instance of targetObject and place it at given position.
            Instantiate(targetObject,targetObject.transform.position,targetObject.transform.rotation);    
        }
    }
}

第三步 脚本

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

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

原文作者:Charmi Popat

原文链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

iOS 滚动视图的复用问题解决方案

LazyScroll是什么 LazyScrollView 继承自ScrollView,目标是解决异构(与TableView的同构对比)滚动视图的复用回收问题。它...

1856
来自专栏偏前端工程师的驿站

CSS魔法堂:"那不是bug,是你不懂我!" by inline-block

前言  每当来个需要既要水平排版又要设置固定高宽时,我就会想起display:inline-block,还有为了支持IE5.5/6/7的hack*display...

2138
来自专栏hightopo

HT for Web基于HTML5的图像操作(一)

1542
来自专栏AhDung

【C#】无损转换Image为Icon

此法的问题是,如果图像是透明背景,那么得到的Icon的边缘就是毛糙的,像是先垫了一层背景色然后再去色的效果,很不如人意,用过的朋友都知道。尚未研究是bmp.Ge...

1153
来自专栏我的博客

Jquery学习第一天

1、jQuery优点 轻量级,强大的选择器,出色的DOM操作,可靠的事件处理,完善的Ajax,不污染的顶级变量,出色的浏览器兼容,链式操作,隐式迭代,行为层和结...

3668
来自专栏一个会写诗的程序员的博客

MySQL 直接存储图片并在 html 页面中展示,点击下载

1612
来自专栏数据科学学习手札

(数据科学学习手札42)folium进阶内容介绍

  在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就...

2864
来自专栏程序员的诗和远方

20180818_ARTS_week08

这道题是要把字符串中的数字变成 int,通常的做法是遍历字符串,然后判断是不是在 0~9 中,如果把 0~9 放数组里每次循环检查感觉不是太好,时间复杂度是个 ...

641
来自专栏章鱼的慢慢技术路

Go指南练习_切片

1483
来自专栏HT

HT for Web基于HTML5的图像操作(一)

HT for Web独创的矢量图片设计架构,使其具有强大丰富的动态图形呈现能力,但从最近热议的“Adobe Photoshop 是否已经过时?”的话题,大家能体...

2679

扫码关注云+社区