Unity2D Raycasting

时间:2015-11-03 12:02:04

标签: c# unity3d

我正在尝试编写一个脚本,当玩家被敌人击中时会重新加载该等级。我是gamedev和c#的新手,所以我对我的代码没有百分之百的信心。

我收到一些让我失望的错误,我无法在网上找到任何可以指向正确方向的错误。

using UnityEngine;
using System.Collections;

public class RobotAttack : MonoBehaviour 
{

void Update()
{

    RaycastHit2D hit;
    Vector2 attackPosition = transform.position + new Vector2(0f, 1f);

    if (Physics2D.Raycast(attackPosition, transform.forward, hit, 1f) && (hit.transform.tag == "Player"))        
    {
        Application.LoadLevel(Application.loadedLevel);
    }       
}
}

我得到的错误如下。

Assets/Scripts/RobotAttack.cs(14,44): error CS0121: The call is ambiguous between the following methods or properties: `UnityEngine.Vector2.operator +(UnityEngine.Vector2, UnityEngine.Vector2)' and `UnityEngine.Vector3.operator +(UnityEngine.Vector3, UnityEngine.Vector3)'

Assets/Scripts/RobotAttack.cs(17,66): error CS0165: Use of unassigned local variable `hit'

Assets/Scripts/RobotAttack.cs(17,23): error CS1502: The best overloaded method match for `UnityEngine.Physics2D.Raycast(UnityEngine.Vector2, UnityEngine.Vector2, float, int)' has some invalid arguments

Assets/Scripts/RobotAttack.cs(17,23): error CS1503: Argument `#3' cannot convert `UnityEngine.RaycastHit2D' expression to type `float'

道歉,如果格式可怕,这是我在本网站的第一篇文章:^) 感谢。

1 个答案:

答案 0 :(得分:0)

  

Assets / Scripts / Robotack.cs(14,44):错误CS0121:呼叫不明确   以下方法或属性之间:   UnityEngine.Vector2.operator +(UnityEngine.Vector2, UnityEngine.Vector2)' and UnityEngine.Vector3.operator   +(UnityEngine.Vector3,UnityEngine.Vector3)'

这意味着还有另一个具有相同名称的方法,因此编译器不知道您打算使用哪个方法。即:Vector2.operatorVector3.operator更改名称将解决此问题或指定前缀库。

  

Assets / Scripts / RobotAttack.cs(17,66):错误CS0165:使用未分配   局部变量`hit'

这很明确,你没有将hit定义为任何东西,只是它的类型。 你可以尝试: RaycastHit2D hit = new RaycastHit2D();

但我不确定它的构造函数。

编辑:审核构造函数后:

Raycast Documentation

  

Assets / Scripts / RobotAttack.cs(17,23):错误CS1502:最好的   重载方法匹配   `UnityEngine.Physics2D.Raycast(UnityEngine.Vector2,   UnityEngine.Vector2,float,int)'有一些无效的参数

     

Assets / Scripts / RobotAttack.cs(17,23):错误CS1503:参数#3' cannot convert UnityEngine.RaycastHit2D'表达式以键入`float'

这只是意味着您尝试传入的参数类型错误。值得注意的是,第三个参数不是float,因为它看起来像是在传递RaycastHit2D类型的对象。你可以尝试将它转换为浮动,如果你有信心它会投射,虽然这是非常不可能的。或者,您需要建立要使用的正确输入变量。

希望这会有所帮助!