Unity3D实现旋钮控制灯光效果
作者:蓝染s 发布时间:2021-09-05 21:16:58
标签:Unity3D,旋钮,灯光
本文实例为大家分享了Unity3D实现旋钮控制灯光效果的具体代码,供大家参考,具体内容如下
前言
实际上使用的是非常简单的方式,通过开启以及关闭带有灯光效果物体的渲染以模拟出的灯光切换效果。
正确方式应当为物体切换不同的Material实现效果。
所用函数
public void RotateAround(Vector3 point, Vector3 axis, float angle);
//通过给定一个世界坐标、轴向以及一个角度,使物体以该角度旋转绕世界坐标点的轴向的变换
public T GetComponent<T>();
//获取对象的组件
public bool enabled { get; set; }
//设置激活状态
实现代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateControl : MonoBehaviour {
public GameObject RedLight;//红灯
public GameObject GreenLight;//绿灯
public GameObject Center;//旋转中心,若为自身则指定自身
private bool isOn = false;//正在开启
private bool isOff = false;//正在关闭
[Range(0,180)]
public float onLine = 80;//旋钮最大角度
[Range(0,180)]
private float offLine = 0;//旋钮最小角度
[Range(0,3)]
public float speed = 1;//旋转速度
[Range(0, 20)]
public float LightingRange = 10;//亮灯角度与旋钮最大角度的角度差
// Use this for initialization
void Start () {
isOn = false;
isOff = false;
offLine = Center.transform.rotation.z;//设定起始位置即为最小角度
RedLight.GetComponent<Renderer>().enabled = false;//关闭红灯渲染
GreenLight.GetComponent<Renderer>().enabled = false;//关闭绿灯渲染
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.R))//关闭
{
isOn = false;
isOff = true;
}
if (Input.GetKeyDown(KeyCode.G))//开启
{
isOn = true;
isOff = false;
}
if (isOn == true)
{
if (this.transform.eulerAngles.z < onLine)//旋钮旋转至最大角度
{
this.transform.RotateAround(this.transform.position, this.transform.forward, speed);
}
else
{
isOn = false;
}
}
if (isOff == true)
{
if (this.transform.eulerAngles.z > offLine + 1)//旋转至最小角度+1°的角度,当物体旋转到0时继续旋转则变为360度
{
this.transform.RotateAround(this.transform.position, this.transform.forward, -speed);
}
else
{
isOff = false;
}
}
//检测旋转角度控制灯光
if (this.transform.eulerAngles.z >= onLine - LightingRange)//当旋钮旋转角度大于阈值则渲染绿灯,关闭红灯
{
RedLight.GetComponent<Renderer>().enabled = false;
GreenLight.GetComponent<Renderer>().enabled = true;
}
else
{
RedLight.GetComponent<Renderer>().enabled = true;
GreenLight.GetComponent<Renderer>().enabled = false;
}
}
}
关于物体的旋转
由于很少情况会在物体刚好旋转到我们所期望的角度时进行一次判定,所以物体旋转角度一般会超过你所期望的角度。
当物体由一个正向的角度向0°方向旋转时,物体角度低于0°时物体角度会变为360°
来源:https://blog.csdn.net/qq_36658648/article/details/81135937


猜你喜欢
- 本文以实例形式讲述了C#通过反射创建自定义泛型的实现方法,分享给大家供大家参考。具体如下:比如有这样一个泛型:Demo.GenericsSi
- 本文实例讲述了C#编程获取IP地址的方法。分享给大家供大家参考,具体如下:1、获取客户端IP/// <summary>/// 获
- 实体类package com.whty.entity;public class User {private int id;private S
- 本文实例讲述了Java实现的不同图片居中剪裁生成同一尺寸缩略图功能。分享给大家供大家参考,具体如下:因为业务需要,写了这样一个简单类,希望能
- 1.导入 EasyExcel Maven包<!--easyexcel 导出excel依赖--><dependency>
- 案例介绍按照斗地主的规则,完成洗牌发牌的动作。 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作
- 首先,确保 IDEA 软件正确安装完成,Java 开发工具包 JDK 安装完成。IDEA 的 Java 项目 (Project) 则相当于
- 第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口。它代表着有序的队列。AbstractList
- 本文实例为大家分享了无限级联下拉列表框的的实现方法,具体内容如下可能有一个树型结构的表,它可能有ID,Name,ParentID,Level
- 1.小程序推送信息列如我们去餐厅等位有预约提醒,剩余桌数首先申请一个小程序,微信开放平台:小程序2.申请小程序信息,申请信息模板appid&
- 本文实现的功能有:1、 初始化游戏窗口2、初始化游戏的界面3、初始化游戏的说明面板4、随机生成下落方块5、方块下落速度变化6、判断方块是否可
- 这些天忙着刷题,又怕遗忘了spring boot, 所以抽出一点时间折腾折腾,加深点印象。 spring boot 的文件上传与 sprin
- 在我们使用mybatis plus 时, mybatis plus 可以帮我们自动封装我们的实体类用来查询添加,当我们遇见我们的尸体类名与我
- 需求:用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩),并遍历该集合;要按照总分从高到低进行排序分析:1.创建学生类 成员变
- 项目场景:适用于接口数据敏感信息,比如 明文传输姓名、居住地址、手机号等信息,如果存在明文传输敏感数据问题、及数据泄漏风险,则可使用此方法加
- 实现步骤step1:添加乐观锁 * MP的其他 * 功能可以参考官网@Beanpublic MybatisPlusInterceptor m
- 在Eclipse中创建Android项目,利用之前学过的WebView控件和中国天气网提供的天气数据接口,实现获取指定城市的天气预报。布局文
- 题目描述在进行网络编程时,有时需要对局域网的所有主机进行遍历,为此需要获得内网的所以IP地址题目实现:获得内网的所有IP地址的小应用。解题思
- 使用Postman传递arraylist数据给springboot起因:需要做一个批量删除的功能,后台接收一个ArrayList ids 。
- 先引用using System.Runtime.InteropServices; 的命名空间, 然后在合适的位置加上如下代码就OK。。注意: