【问题标题】:Implicit downcast from 'UnityEngine.Component[]' to 'UnityEngine.ParticleEmitter[]'从“UnityEngine.Component[]”隐式向下转换为“UnityEngine.ParticleEmitter[]”
【发布时间】:2014-07-05 03:35:55
【问题描述】:
#pragma strict

static var charge : int = 0;
var collectSound : AudioClip;
//HUD
var hudCharge : Texture2D[];
var chargeHudGUI : GUITexture;
//Generator
var meterCharge : Texture[];
var meter : Renderer;
//Matches
private var haveMatches : boolean = false;
var matchGUIprefab : GUITexture;
private var matchGUI : GUITexture;
var fireEmitters : ParticleEmitter[];
var TextHints : GUIText;

function Start ()
{
    charge = 0;
}

function Update ()
{

}

function CellPickup()
{
    AudioSource.PlayClipAtPoint(collectSound, transform.position);
    charge++;
    chargeHudGUI.texture = hudCharge[charge];
    meter.material.mainTexture = meterCharge[charge];
    HUDon();
}

function HUDon()
{
    if(!chargeHudGUI.enabled)
    {
        chargeHudGUI.enabled = true;
    }
}

function MatchPickup()
{
    haveMatches = true;
    AudioSource.PlayClipAtPoint(collectSound, transform.position);
    var matchHUD : GUITexture = Instantiate(matchGUIprefab, Vector3(0.15,0.1,0),transform.rotation);
    matchGUI = matchHUD;
}

function OnControllerColliderHit(col : ControllerColliderHit)
{
    if(col.gameObject.name == "campfire")
    {
        if(haveMatches)
        {
            LightFire(col.gameObject);
        }

        else
        {
            TextHints.SendMessage("ShowHint", "i could use this campfire to signal for help... \n if only i could light it");
        }
    }
}

function LightFire(campfire : GameObject)
{
    fireEmitters = campfire.GetComponentsInChildren(ParticleEmitter);
    for(var emitter : ParticleEmitter in fireEmitters)
    {
        emitter.emit = true;
    }
    campfire.audio.Play();
    Destroy(matchGUI);
    haveMatches=false;
}

我第一次遇到一个问题,说不能从源类型转换为目标类型,然后我添加了 pragma strict,现在标题中出现错误,现在我正在写更多,因为 lovely 网站认为这解释不够。

【问题讨论】:

  • 未来注意事项:不要咬喂你的手
  • 我很欣赏赞成票,但更愿意回答:P
  • 不要在没有交叉链接的两个地方发布相同的东西。answers.unity3d.com/questions/223836/…
  • 当网站甚至没有连接时,我几乎不需要这样做

标签: unity3d unityscript


【解决方案1】:

好的,我不熟悉这种明显类型化的 javascript 变体,但假设它类似于其他 Java 系列语言并且具有 C 样式转换,我会在 LightFire 中尝试这个:

var emitters : Component[] = campfire.GetComponentsInChildren(ParticleEmitter);
for(var emitter : Component in fireEmitters)
{
    ((ParticleEmitter)emitter).emit = true;
}

如果这不是正确的语法,那么请了解如何进行向下转换。

【讨论】:

  • 对不起,伙计没有工作,谢谢你的努力,我会像你说的那样低头看
  • 有关错误消息的任何更多信息都会有所帮助。什么线?是编译时还是运行时?
  • 问题出在运行时和第 73 行
  • 嗯。看起来emitters 中有一些实际上不是ParticleEmitters 的东西。但我认为GetComponentsInChildren 会为你过滤它,因为你把它作为一个论点。也许不是。做一些调试,看看emitter 是什么类型...或者在设置属性之前插入一个ParticleEmitter 的检查——但是你用这种语言来做。
  • 无论出于何种原因,它似乎没有将particleEmitter 识别为一个组件,然后它抱怨因为没有相同的类型
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2015-10-16
  • 2013-05-01
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多