我对编码完全陌生,所以任何帮助都会很有价值。
我试图让一个立方体(这是一个带材料的导入FBX)在对撞机进入立方体的盒子对撞机时旋转。我一直在关注2个教程让我走了。第一个是旋转立方体,我成功完成,第二个是在“触发区域”时为游戏添加声音/音乐。进入,再次,这没问题。
我现在想要在触发区域进入时旋转立方体,所以我想我能够将2结合起来并使其工作,但过了一段时间我就走到了死胡同。由于我缺乏理解,我不知道为什么我写的内容在脚本添加到多维数据集时不起作用。
我遵循的多维数据集教程 - https://unity3d.com/learn/tutorials/topics/scripting/spinning-cube
我遵循的音乐教程 - https://unity3d.com/learn/tutorials/topics/audio/adding-music-your-game
我在基于上述结合的旋转立方体的尝试失败 -
using UnityEngine;
using System.Collections;
public class TriggerSpinControl : MonoBehaviour
{
public float speed1 = 25f;
public float speed2 = 100f;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
transform.Rotate(Vector3.forward, speed1 * Time.deltaTime);
}
}
void OnTriggerExit(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
transform.Rotate(Vector3.forward, speed2 * Time.deltaTime);
}
}
}
任何帮助都将不胜感激。
由于
根据Rutter的回答,我尝试创建一个脚本(基于来自其他问题和答案的各种信息),要求在TriggerEnter和TriggerExit上运行2个Spin脚本,但由于我还在努力弄清楚并理解我在做什么,所以它似乎并没有起作用。
旋转划线不附加到游戏对象,但只是在Assets文件夹中。
using UnityEngine;
using System.Collections;
public class TriggerSpinControl : MonoBehaviour
{
private SpinFast spinfast;
private SpinSlow spinslow;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
spinfast = GetComponent<SpinFast>();
}
}
void OnTriggerExit(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
spinslow = GetComponent<SpinSlow>();
}
}
}
这可能只是一堆废话,但我希望我能走上正轨。
由于
答案 0 :(得分:3)
OnTriggerEnter
将被调用一次。
OnTriggerExit
将被调用一次。
如果您希望对象继续旋转,您可能想尝试不同的策略。
OnTriggerStay
是另一个事件,对于当前在触发器内的每个对象,每帧大致会被调用一次。这样您就可以每帧调用transform.Rotate
一次,以便在每帧上保持一点点旋转。这是一个简单而脆弱的解决方案。
Unity是一种“基于组件”的体系结构 - 您的每个脚本都是一个组件,将多个组件协同工作通常是有利的。您可以创建一个脚本来管理Update
事件中的旋转行为,每个帧调用一次,然后创建另一个组件,根据触发器进入/退出启用和禁用旋转脚本。
答案 1 :(得分:0)
这是我的解决方案。
代码(C#):
using UnityEngine;
using System.Collections;
public class TriggerSpinControl : MonoBehaviour
{
public float speed1 = 25f;
public float speed2 = 100f;
private void Update()
{
transform.Rotate(Vector3.forward, speed2 * Time.deltaTime);
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "MainCamera")
{
enabled = false;
}
}
void OnTriggerStay(Collider other)
{
if (other.tag == "MainCamera")
{
transform.Rotate(Vector3.forward, speed1 * Time.deltaTime);
}
}
private void OnTriggerExit(Collider other)
{
if (other.tag == "MainCamera")
{
enabled = true;
}
}
}