Unity通过射线检测生成新物体
编写脚本名为 Touch
,该脚本功能可扩展,如添加与鼠标点击物体有关的相关事件:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 射线检测生成新物体
/// </summary>
public class Touch : MonoBehaviour
{
public GameObject prefab;
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
//常用方法:利用摄像机和屏幕上的点,可以确定一条从手指到场景内的射线
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//常用方法:用物理引擎发射这条射线,如果碰到物体返回true
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
//如果成功碰到物体,则碰撞信息保存在 hit 中
//hit.point 代表碰撞点的位置
Instantiate(prefab, hit.point, Quaternion.identity);//在碰撞点生成预制件
//Debug.Log(hit.name);
/**
* 扩展:此处可以写与hit有关的方法,hit就代表碰撞到的平面 Plane
* 若场景中有多个带有碰撞体的对象,就可以多不同的hit写对应的方法。
* 此处写的是打印hit的名字
*/
}
}
}
}
将改脚本挂载到主相机上,并为主相机添加Physics Racaster
组件:
将要生成的预制件拖入Touch
脚本的Prefab
中,此处我拖入的为一个 Cube
:
发出的射线碰到带有碰撞体的物体才会反射,故场景中需要有带有碰撞体组件的物体。
在Hierarchy
面板中新建一个平面 Plane
(默认带有碰撞体),然后运行,点击平面一处位置,在鼠标点击处,就会生成新物体(预制件):
结束!