敌人动画unity3d(2D)返回动画师未初始化 [英] Enemy Animator unity3d(2d) returning animator not initialized
问题描述
这是我的敌人,我克隆(实例)。我有一个错误,我已成立了一切正确的,我认为。
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屋!