目录:
1.基本信息
2.示例工程
3.脚本
目标
这篇博客的主要目标是告诉你使用鼠标点击的位置拾取或放置对象的做法。
你最终会得到下面的效果:
效果图第一步 基本信息
你可以使用函数实例化多个给定的游戏对象或预制对象。
Instantiate (Object Target, object’s position, object’s rotation)
或者Instantiate (Object Target)
。
如果你想在屏幕上某个点击的位置实例化一个游戏对象,那么首先你就需要找到世界点。
你可以使用下面两种方式来完成这件事:
- 如果你正在做一个射击类游戏,为了找到对象被击中的位置,可以调用 hit.point
- 你可以使用鼠标的位置很容易转换成世界坐标的位置。
我们将会使用鼠标的位置把对象放置到世界坐标的位置。可以使用下面的函数来获得鼠标的位置: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);
}
}
}
第三步 脚本
使用鼠标左键来放置对象。
在把对象放置在空间上时,保持按住鼠标左键按下移动对象的位置。
网友评论