Unity——射线检测(鼠标点击开关门效果)
Unity射线检测——实现简单的开关门效果
简要:通过鼠标点击来发射一条射线,来获得射线所碰到的物体名称,再通过改变门的Rotation值来实现开关门的效果。
一、代码实现
1.1 简易的场景搭建
注:这里的门是unity资源商店下载的一个预制体。
1.2 给门添加碰撞体
选中要开的门页
添加Box Collider碰撞体(由于导入的资源包不带有碰撞体)
1.3 给门添加代码
新建C-sharp文件命名为DoorRay,编写代码文件;
测试,鼠标点击门页实现开关门效果。
代码:(相关解释代码中)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DoorRay : MonoBehaviour
{
//碰撞信息
RaycastHit hit; //判断门的开关,关为false,开为true
private bool isOpen = false; // Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonUp(0))//这里的GetMouseButtonUp是指鼠标点击回弹时触发; //GetMouseButtonDown是鼠标点击下去触发;0代表鼠标左键,1代表鼠标右键,2代表鼠标中键 {
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);//发射射线
if (Physics.Raycast(ray, out hit))//如果射到物体
{
Debug.Log(hit.collider.gameObject.name);//控制台输出检测到物体的名称 //判断门的开合,以及检测到的名称是否与门的名称相同(这里我的门的名称为doorWing)
if (isOpen.Equals(false) && hit.collider.gameObject.name.Equals("doorWing"))
{
//改变门页的Rotation中的y轴值(按照自己实际情况(x,y,z))
transform.rotation = Quaternion.Euler(0.0f, 90f, 0.0f);
isOpen = true;
}
else if (hit.collider.gameObject.name.Equals("doorWing") && isOpen.Equals(true))
{
transform.rotation = Quaternion.Euler(0.0f, 180f, 0.0f);
isOpen = false;
}
}
}
}
}
1.4 整体
Unity——射线检测(鼠标点击开关门效果)的更多相关文章
- Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...
- 超强的纯 CSS 鼠标点击拖拽效果
背景 鼠标拖拽元素移动,算是一个稍微有点点复杂的交互. 而在本文,我们就将打破常规,向大家介绍一种超强的仅仅使用纯 CSS 就能够实现的鼠标点击拖拽效果. 在之前的这篇文章中 -- 不可思议的纯 CS ...
- unity射线检测
unity中射线检测时非常实用也经常实用的一种手段.下面讲解一下射线检测问题. 1)Ray 根据射线端点和射线的方向定义一条射线 Ray ray= new Ray(transform.position ...
- Unity 如何检测鼠标双击事件
代码如下: void OnGUI(){ Event e=Event.current; )) Debug.Log("用户双击了鼠标"); }
- unity射线碰撞检测+LayerMask的使用
射线在unity中是个很方便的东西,对对象查找.多用于碰撞检测(如:子弹飞行是否击中目标).角色移动等提供了很大的帮助,在此做个总结与大家分享下 ,若有不足欢迎吐槽 好了,话补多说啦,直接进入主题: ...
- WPF基于3D对象捕获鼠标点击事件
ModelUIElment3DUIElment3D是.NET3.5新增的类,替代了ModelVisual3D.ModelVisual3D有2个派生类ModelUIElment3D和ContainerU ...
- Unity3D_(API)射线检测Raycast()
Unity射线检测官方文档: 传送门 一.检测前方是否有游戏物体(射线无限长度) 二.检测前方是否有游戏物体(射线长度为1m) 三.检测前方游戏物体碰撞信息(射线无限长度): 四.指定检测碰撞Tag层 ...
- JQuery和html+css实现鼠标点击放烟花
<!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content= ...
- 如何在CSS中映射的鼠标位置,并实现通过鼠标移动控制页面元素效果
映射鼠标位置或实现拖拽效果,我们可以在 JavaScript 中做到这一点.但实际上,在CSS中有更加简洁的方法,我们可以在不使用JavaScript 的情况下,仍然可以实现相同的功能! 只使用CSS ...
随机推荐
- Luogu4408 [NOI2003]逃学的小孩 (树的直径)
一边一定是直径,另一边从两端点走取最小值的最大值 #include <iostream> #include <cstdio> #include <cstring> ...
- CSS 子节点继承父节点(祖先节点)的样式
CSS 有些属性可以让子节点从父节点或祖先节点继承,文本.字体.列表属性等样式都可以被子节点继承.子节点没有自身的样式,子节点将继承父节点或祖先节点的样式. <ul class="co ...
- 在 Linux 系统中安装 Node.js 的流程
下载资源包 在 NodeJS 官网下载压缩包: 将压缩包中的 node-v14.17.0-linux-x64.tar 拖出来,只需要里面的 tar 压缩包. 解压到 Linux 目录中 解压压缩包到当 ...
- java方法---可变参数
可变参数 在方法的声明中,在指定参数类型后面加一个...(省略号) 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在它之前声明:
- 【java】学习路线1-类型转换、隐式转换、强制转换
/**文档注释,这里是一段文章一般放在类的外面*/public class HelloWorld{ //这个是注释的文本 public static void main(String[] ...
- Hive 组件安装配置
下载和解压安装文件 基础环境和安装准备 Hive组件的部署规划和软件包路径如下: (1)当前环境中已安装 Hadoop全分布系统 (2)本地安装 MySQL数据库(账号 root,密码 Passwor ...
- VS Code 之KoroFileHeader插件
设置 在vscode左下角点击设置按钮,选择"设置",然后输入"fileheader", 文件头部注释:Fileheader:custom Made 函数注释: ...
- 开发个RTMP播放器居然这么难?RTMP播放器对标和考察指标
好多开发者提到,RTMP播放器,不知道有哪些对标和考察指标,以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTMP的播放都面向直播场景,如果延迟过大,严重影响体验 ...
- KingbaseES OUT 类型参数过程与函数的调用方法
对于含有 out 类型参数的过程或者函数,只能通过块方式调用,这是因为,ksql 还不支持类似 Oracle 那样通过 var 定义变量. 一.带OUT的procedure 调用 创建过程: crea ...
- mysql8.0及以上修改Root密码
ALTER user 'root'@'localhost' IDENTIFIED BY 'Cliu123#' //1.不需要flush privileges来刷新权限. //2.密码要包含大写字母,小 ...