C#(Unity 4.3)无法隐式转换类型'ShotScript[]';至` ShotScript';

C#(Unity 4.3)无法隐式转换类型'ShotScript[]';至` ShotScript';,c#,unity3d,C#,Unity3d,谢谢大家!问题是我使用的是GetComponents而不是GetComponent,谢谢 我对编程相当陌生,我正在尝试在Unity中制作2D游戏。我在网上找到了一个非常好的教程,直到某一点(图坦卡蒙可以在这里找到)。我遇到了一个错误,不知道为什么。当我尝试在当前脚本中使用另一个脚本时(如果对任何人都有意义的话),就会发生错误。这两个脚本的名称分别为ShotScript和HealthScript,如下所示 快照脚本: using UnityEngine; using System.Collecti

谢谢大家!问题是我使用的是GetComponents而不是GetComponent,谢谢

我对编程相当陌生,我正在尝试在Unity中制作2D游戏。我在网上找到了一个非常好的教程,直到某一点(图坦卡蒙可以在这里找到)。我遇到了一个错误,不知道为什么。当我尝试在当前脚本中使用另一个脚本时(如果对任何人都有意义的话),就会发生错误。这两个脚本的名称分别为ShotScript和HealthScript,如下所示

快照脚本:

using UnityEngine;
using System.Collections;

public class ShotScript : MonoBehaviour {


public int damage = 1;

public bool isEnemyShot = false;

void Start () {

    Destroy (gameObject, 20);
}



}
健康脚本:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {


public int hp = 2;

public bool isEnemy = true;

void OnTriggerEnter2D(Collider2D Collider) {

        ShotScript shot = collider.gameObject.GetComponents<ShotScript>();
            if (shot != null) {
                    if (shot.isEnemyShot != isEnemy) {
                            hp -= shot.damage;
                            Destroy (shot.gameObject);

                            if (hp <= 0) {
                                    Destroy(gameObject);
                            }
                    }
            }
    }


}
使用UnityEngine;
使用系统集合;
公共类NewBehaviourScript:MonoBehavior{
公共int hp=2;
公共利益=真;
void OnTriggerEnter2D(碰撞的R2D碰撞器){
ShotScript shot=collider.gameObject.GetComponents();
如果(快照!=null){
如果(shot.isEnemyShot!=isEnemy){
hp-=射击伤害;
摧毁(射击,游戏对象);

如果(hp错误消息显示第13行出错:

ShotScript shot = collider.gameObject.GetComponents<ShotScript>();

错误消息表示第13行出错:

ShotScript shot = collider.gameObject.GetComponents<ShotScript>();

这就是问题所在:

ShotScript shot = collider.gameObject.GetComponents<ShotScript>();

(我已将其重新格式化为更为传统的C#,但您当然可以使用您想要的任何缩进。)

这就是问题所在:

ShotScript shot = collider.gameObject.GetComponents<ShotScript>();
(我已将其重新格式化为更为传统的C#,但您当然可以使用任何缩进。)

您正在调用(注意复数形式),它返回一个数组(即
ShotScript[]
),其中包含特定
游戏对象上类型的所有匹配组件

因此,这是试图将
ShotScript[]
数组分配到单个
ShotScript
实例中,这是不可能的

如果您只想检索一个
ShotScript
(因为您希望对象上只有1个),请使用(注意单数)方法,该方法将只返回一个实例,如果没有指定实例,则返回
null

因此,将这一行更改为:

ShotScript shot = collider.gameObject.GetComponent<ShotScript>();
ShotScript shot=collider.gameObject.GetComponent();

如果您打算在同一个
游戏对象上处理多个
ShotScript
实例/组件,请使用中提供的修复程序/代码。

您正在调用(注意复数形式),它返回一个数组(即
ShotScript[]
),其中包含该特定
游戏对象上类型的所有匹配组件

因此,这是试图将
ShotScript[]
数组分配到单个
ShotScript
实例中,这是不可能的

如果您只想检索一个
ShotScript
(因为您希望对象上只有1个),请使用(注意单数)方法,该方法将只返回一个实例,如果没有指定实例,则返回
null

因此,将这一行更改为:

ShotScript shot = collider.gameObject.GetComponent<ShotScript>();
ShotScript shot=collider.gameObject.GetComponent();


如果您的目的是处理同一
GameObject
上的多个
ShotScript
实例/组件,请使用中提供的修复程序/代码。

它的意思是这样的。我假设问题出在
ShotScript shot=collider.GameObject.GetComponents()
GetComponents
方法是否返回数组?是的,我应该键入GetComponent=PIt表示它的意思。我假设问题出在
ShotScript shot=collider.gameObject.GetComponents();
方法是否返回数组?是的,我应该键入GetComponent=P