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 整体