敌人动画unity3d(2D)返回动画师未初始化 [英] Enemy Animator unity3d(2d) returning animator not initialized

查看:510
本文介绍了敌人动画unity3d(2D)返回动画师未初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的敌人,我克隆(实例)。我有一个错误,我已成立了一切正确的,我认为。

This is my enemy I'm cloning (instantiating). I have an error and I have set up everything correct I think.

动画尚未初始化。   UnityEngine.Animator:的setFloat(字符串,单人间)enemyscript:playerhit()   (在资产/敌人/ enemyscript.js:14)

Animator has not been initialized. UnityEngine.Animator:SetFloat(String, Single) enemyscript:playerhit() (at Assets/enemies/enemyscript.js:14)

我如何初始化每一个克隆的动画师。

How do I initialise the animator in every clone.

#pragma strict
var enemysmall : GameObject;
var speed : float = 1.0;
var anim : Animator;

function Start() {
  this.transform.position.x = 8.325;
  this.transform.position.y = -1.2;
  anim = GetComponent(Animator);
  anim.SetFloat("enemy1sta",0);
}

function playerhit() {
  anim.SetFloat("enemy1sta",1);
}

function Update() {
  this.transform.Translate(Vector3(Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, 0));
  this.rigidbody2D.velocity = Vector2(-5, 0);
}

这是我对我的球员从prefab产卵它们

This is my on my player to spawn them from a prefab

 var enemy1 : Transform;

 function Start () { 
 ///enemy1
   while (true) {
     yield WaitForSeconds (Random.Range(3, 5));
     var enemy1Clone : Transform = Instantiate(enemy1, transform.position, transform.rotation);
     enemy1Clone.GetComponent("enemyscript");
     enemy1Clone.GetComponent(Animator);
   }
}

和我用一个简单的

function OnCollisionEnter2D(coll: Collision2D) {
  if (coll.gameObject.CompareTag("enemy") && jumped==true){
    other.playerhit();   < ----- i have it so this calls the enemy function.
    //Destroy(coll.gameObject);
    jumpup(); 
    jumped = true;
    combo += 1;
    GUIcombo.text = "COMBO: " + combo;
  }
}

有人可以帮我解决这个错误它真的让我对我的第一个游戏开发

can someone help me with this bug its really getting me down on my first game dev

推荐答案

您正试图组件存储在同一个变量。这是错误的:

You are trying to store Components in the same variable. This is wrong:

var enemy1Clone : Transform = Instantiate(enemy1, transform.position, transform.rotation);
enemy1Clone.GetComponent("enemyscript");
enemy1Clone.GetComponent(Animator);

enemy1Clone 的类型是变换,不要试图把 enemyscript 动画成分在里面。

enemy1Clone is of type Transform, don't try putting enemyscript or Animator Components inside of it.

您不需要这些2 GetComponent 所以就放弃他们。

You don't need those 2 GetComponent so just discard them.

我已经完全改变了逻辑,为你的游戏。它的工作原理吧。

I have completely changed the logic for your game. It works now.

Player.js

function Awake()
{
    GUIcombo.text = "COMBO: ";
    GUIlives.text = "LIVES: 3";
}


function Start () 
{ 
    anim = GetComponent(Animator);
}


function Update () 
{
    if(lives <= 0)
        Destroy(Player);

    Player.transform.position.x = -4.325;

    if(!jumped)
        anim.SetFloat("hf",0.0);

    if(Input.GetButtonDown("Fire1") && !jumped)
    {
        jumpup();
        jumped = true;

        anim.SetFloat("hf",1);
    }
}


function OnCollisionEnter2D(coll: Collision2D) 
{
    var g : GameObject = coll.gameObject;

    if(g.CompareTag("ground"))
    {
        anim.SetFloat("hf",0.0);
        jumped=false;
        combo = 0;
        GUIcombo.text = "COMBO: " + combo;
    }

    else if(g.CompareTag("enemy") && jumped)
    {   
        // Notify the Enemy to die.
        g.SendMessage("die");

        jumpup(); 
        jumped=true;
        combo += 1;
        GUIcombo.text = "COMBO: " + combo;
    }

    else if(g.CompareTag("enemy") && !jumped)
    {
        lives -=1;
        GUIlives.text = "LIVES: " + lives;
    }
}


function slam()
{
    Player.rigidbody2D.AddForce(new Vector2(0,-3000), ForceMode2D.Force);
}

function glide()
{
    Player.rigidbody2D.AddForce(Vector2(0,600), ForceMode2D.Force);
}

function jumpup()
{
    Player.transform.Translate(Vector3(Input.GetAxis("Vertical") * speed * Time.deltaTime, 0, 0));
    Player.rigidbody2D.velocity = Vector2(0,10);

    if(jumplevel2)
        Player.rigidbody2D.velocity = Vector2(0,13);

    if(jumplevel3)
        Player.rigidbody2D.velocity = Vector2(0,16);
}

Enemy.js

#pragma strict

var enemy : GameObject;
var speed : float = 1.0;
var anim : Animator;
var isDead : boolean = false;

function Start()
{
   anim = GetComponent(Animator);
   anim.SetFloat("EnemyDie", 0);
   enemy.transform.position.x = 8.325;
   enemy.transform.position.y = -1.2;
}

function Update()
{
    if(!isDead)
    {
        enemy.transform.Translate(Vector3(Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, 0));
        enemy.rigidbody2D.velocity = Vector2(-5, 0);
    }
}

// Call here when enemy should die. 
function die()
{
    if(!isDead)
    {
        isDead = true;
        anim.SetFloat("EnemyDie", 1);

        yield WaitForSeconds(0.5f);
        Destroy(gameObject);
    }
}

这篇关于敌人动画unity3d(2D)返回动画师未初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆