我有一个从物体向上的射线投射,当玩家与射线接触时,该物体会改变颜色。那行得通,但是我想这样做,所以当您第二次触摸射线时,物体被破坏了,我不知道该怎么做。我正在使用Unity 2d。
代码:`using System.Collections; 使用System.Collections.Generic; 使用UnityEngine;
公共类DestroyEnemy:MonoBehaviour //敌人3 {
[SerializeField] Transform Enemy3WayPoint;
private Renderer rend;
private Color colorToTurnTo = Color.blue;
void Start()
{
rend = GetComponent<Renderer>();
rend.enabled = true;
Physics2D.queriesStartInColliders = false;
}
私有无效Update() {
RaycastHit2D hitInfo = Physics2D.Raycast(transform.position, Vector3.up, 5);
if (hitInfo.collider.gameObject.tag == "Player")
{
rend.material.color = colorToTurnTo;
Debug.DrawLine(transform.position, hitInfo.point, Color.white);
}`
可能遗忘了一个或两个括号,当我测试它时它确实起作用
答案 0 :(得分:0)
我认为最简单的解决方案是使用变量来跟踪玩家被射线击中的次数。
关于消灭敌人,您可以使用摧毁功能。 所以,像这样:
int hitCount = 0; //add a class variable
void Update(){
RaycastHit2D hitInfo = Physics2D.Raycast(transform.position, Vector3.up, 5);
if (hitInfo.collider.gameObject.tag == "Player")
{
hitCount++;
}
if(hitCount == 1)
{
rend.material.color = colorToTurnTo;
Debug.DrawLine(transform.position, hitInfo.point, Color.white);
}
else if(hitCount >= 2)
{
Destroy(gameObject); //this will destroy the gameObject that the component is attached to
}
}
编辑:看来,OP的主要问题是给事件增加了延迟。这是一些解决该问题的更新代码:
bool waitingForFirstHit = true;
bool waitingForSecondHit = false;
float timeDelay = 1.5f;
void Update(){
RaycastHit2D hitInfo = Physics2D.Raycast(transform.position, Vector3.up, 5);
if (hitInfo.collider.gameObject.tag == "Player" )
{
if (waitingForFirstHit) {
ChangeColor();
waitingForFirstHit = false;
waitingForSecondHit = true;
}
else if(waitingForSecondHit && timeDelay < 0)
{
DestroyEnemy ();
}
}
if(waitingForSecondHit)
{
timeDelay -= Time.deltaTime;
}
}
void ChangeColor()
{
rend.material.color = colorToTurnTo;
Debug.DrawLine(transform.position, hitInfo.point, Color.white);
}
void DestroyEnemy()
{
Destroy(gameObject);
}
这里是使用销毁功能的教程: https://unity3d.com/learn/tutorials/topics/scripting/destroy
这是文档的链接: https://docs.unity3d.com/ScriptReference/Object.Destroy.html
干杯。