【问题标题】:Unity2D RaycastingUnity2D 光线投射
【发布时间】:2015-11-03 20:18:24
【问题描述】:

我正在尝试编写一个脚本,当玩家被敌人击中时会重新加载关卡。我是 gamedev 和 c# 的新手,所以我对我的代码不是 100% 有信心。

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

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'

抱歉,如果这格式很糟糕,这是我在这个网站上的第一篇文章 :^) 谢谢。

【问题讨论】:

  • 格式非常好!感谢您的努力!

标签: c# unity3d


【解决方案1】:

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

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

Assets/Scripts/RobotAttack.cs(17,66):错误 CS0165:使用未分配 局部变量“命中”

这很明确,您没有将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): error CS1503: Argument #3' cannot convertUnityEngine.RaycastHit2D' expression to type `float'

这仅仅意味着您尝试传入的参数类型错误。值得注意的是,第三个参数不是float 实际上它看起来像您正在传递一个RaycastHit2D 类型的对象。如果您确信它会投射,您可以尝试将其投射到浮点数,尽管这不太可能。或者,您将需要建立要使用的正确输入变量。

希望这会有所帮助!

【讨论】:

  • 感谢您抽出宝贵时间帮助我!关于第一个错误,我使用 Vector2 的唯一方法是 Vector2 attackPosition = transform.position + new Vector2(0f, 1f);所以我不确定要重命名什么,如果有意义的话:)
  • @Ety 尝试使用UnityEngine.Vector2 attackPosition = transform.position + new UnityEngine.Vector2(0f, 1f); 指定您所指的库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2022-10-15
相关资源
最近更新 更多