Raycast帮助(使用C#)

时间:2018-07-26 20:05:27

标签: raycasting

我有一个从物体向上的射线投射,当玩家与射线接触时,该物体会改变颜色。那行得通,但是我想这样做,所以当您第二次触摸射线时,物体被破坏了,我不知道该怎么做。我正在使用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);


    }`

可能遗忘了一个或两个括号,当我测试它时它确实起作用

1 个答案:

答案 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

干杯。