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
0
投稿
猜你喜欢
- 一:hibernate-validator 基础1. 简介:通过使用注解Annotations 给类或者类的属性加上约束(constrain
- 本文实例讲述了winform导出dataviewgrid数据为excel的方法。分享给大家供大家参考。具体实现方法如下:#region 导出
- 最近刚完成一个简单的网络爬虫,开始的时候很迷茫,不知道如何入手,后来发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找。所以我
- Java基础面试题及答案集锦(基础题122道,代码题19道),具体详情如下所示:1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中
- 1.使用usb口输入的扫描枪,这里实现使用了winform首先创建一个CS文件using System;using System.Colle
- 一、前言最近做的项目由于引入第三方库导致在运行mvn clean package 打jar时,编译出来的 Jar 包很大(服务器多达500M
- 对于 * ,学过AOP的应该都不会陌生,因为代理是实现AOP功能的核心和关键技术。那么今天我们将开始 * 的学习:一、引出 * 生活中
- 填充背景色,一般可以选择多种不同样式来填充背景,包括填充为纯色背景、渐变背景、图片背景或者纹理背景等。下面的内容将分别介绍通过C#来设置Ex
- 避免多线程同时读写共享数据在实际开发中,难免会遇到多线程读写共享数据的需求。比如在某个业务处理时,先获取共享数据(比如是一个计数),再利用共
- JVM 的主要作用是什么?JVM 就是 Java Virtual Machine(Java虚拟机)的缩写,JVM 屏蔽了与具体操作系统平台相
- 一、tomcat内存设置问题 收藏 在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,weblogic)
- 一、@Configuration注解1、基本使用自定义配置类/** * 1、@Configuration 告诉SpringBoot这是一个配
- C#如何安全、高效地玩转任何种类的内存之Span的本质一、what - 痛点是什么?回答这个问题前,先总结一下如何用C#操作任何类型的内存:
- 程序的结构分类:顺序结构:按照写代码的顺序 一次执行选择结构:根据条件的不同有选择的执行不同的代码循环结构:在一定条件下 反复执行某一片代码
- 在上篇文章给大家介绍了WebService教程详解(一)使用工具的原因:1、 使用工具可以更好的了解WebService请求的过程 2、 使
- 在Java解析XML文件的过程中,有时需要获取符合某些特定条件的节点,以下是实现代码。import javax.xml.xpath.XPat
- spring在启动时会自己把bean(java组件)注册到ioc容器里,实现控制反转,在开发人员使用spring开发应用程序时,你是看不到n
- 关于java中遍历map具体哪四种方式,请看下文详解吧。方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 M
- java的构造函数是一个非常重要的作用,首先java里的构造函数是可以重载的,而且因为也是可以继承在父类的构造函数,所以在子类里,首先必然是
- 1.问题描述汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚