Unity3D实现旋钮控制灯光效果

作者:蓝染s 时间:2021-09-05 21:16:58 

本文实例为大家分享了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

标签:Unity3D,旋钮,灯光
0
投稿

猜你喜欢

  • spring boot 2整合swagger-ui过程解析

    2021-08-08 22:57:35
  • jvm细节探索之synchronized及实现问题分析

    2023-08-24 02:13:29
  • c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析

    2023-04-07 03:43:25
  • Mybatis一对多查询的两种姿势(值得收藏)

    2023-07-01 00:20:08
  • C#多线程之线程通讯(AutoResetEvent)

    2021-12-26 01:48:55
  • ViewPager顶部导航栏联动效果(标题栏条目多)

    2022-11-03 13:19:38
  • 一篇文章带你入门Java修饰符

    2021-12-25 12:46:01
  • Java 实现常见的非对称加密算法

    2023-11-27 18:51:03
  • Java实现synchronized锁同步机制

    2022-07-16 20:19:04
  • java synchronized的用法及原理详解

    2023-07-17 04:42:54
  • Java Lambda List转Map代码实例

    2022-05-24 20:15:42
  • Java实现特定范围的完数输出算法示例

    2023-11-29 00:43:45
  • C#实现字符串进制转换方法汇总

    2022-01-03 09:30:37
  • C# 获取 PC 序列号的方法示例

    2022-11-19 01:40:57
  • Android实现拍照或者选取本地图片

    2022-06-16 03:58:31
  • c# 断点续传的实现

    2023-07-01 22:41:02
  • 完美解决idea moudle没有蓝色的小方块的问题

    2021-05-28 16:09:03
  • C#如何操作Excel数据透视表

    2021-09-01 20:18:42
  • java组件commons-fileupload文件上传示例

    2022-08-16 02:42:56
  • 如何用Java注解和反射实现依赖注入

    2022-11-04 11:34:10
  • asp之家 软件编程 m.aspxhome.com