我对编码完全陌生,所以任何帮助都是很有价值的。
当对撞机进入立方体的盒子对撞机时,我试图得到一个立方体(这是一个进口的FBX和材料)旋转。我一直在遵循两个教程,以使我走。第一个是旋转立方体,这是我成功完成的,第二个是添加声音/音乐到游戏时,一个‘触发区’被输入,再次,这是没有问题的。
现在,当进入触发器区域时,我希望立方体旋转,所以我想我可以组合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);
}
}
}
任何帮助都将不胜感激。
谢谢
接下来,我尝试创建一个脚本(基于来自其他问题和答案的大量信息),该脚本要求在TriggerEnter和TriggerExit上运行2个Spin脚本,但是由于我仍然在尝试并理解我在做什么,它似乎不起作用。
旋转纸片不附加到游戏对象,而只是在资产文件夹中。
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>();
}
}
}
这可能是一堆胡说八道,但我希望我在正确的轨道上。
谢谢
发布于 2017-09-07 21:08:03
当对象进入触发器时,将只调用一次OnTriggerEnter
。
当对象退出触发器时,将只调用一次OnTriggerExit
。
如果您希望对象继续旋转,您可能需要尝试另一种策略。
OnTriggerStay
是另一个事件,对于当前处于触发器中的每个对象,每帧大约调用一次。这将允许您在每个帧上调用transform.Rotate
一次,以便在每个帧上保持旋转一点。这是一个简单而脆弱的解决方案。
统一是一种“基于组件”的体系结构--每个脚本都是一个组件,将多个组件结合在一起通常是有利的。您可以创建一个脚本来管理每个帧只调用一次的Update
事件中的旋转行为,然后创建另一个基于触发器输入/退出启用和禁用旋转脚本的组件。
发布于 2017-09-08 19:36:17
这是我的解决方案。
代码(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;
}
}
}
https://stackoverflow.com/questions/46104901
复制相似问题