【发布时间】:2017-12-19 16:55:59
【问题描述】:
错误如下:
MissingComponentException:“Gumbaa”游戏对象没有附加“SpriteRenderer”,但脚本正在尝试访问它。您可能需要将 SpriteRenderer 添加到游戏对象“Gumbaa”。或者您的脚本需要在使用之前检查组件是否已附加。 UnityEngine.Renderer.get_bounds () (在 /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/GraphicsBindings.gen.cs:1007) EnemyMovement.Start () (在 Assets/Scripts/EnemyMovement.cs :21)
每当我点击播放按钮时,我的游戏也会自动暂停。
当我尝试将组件“SpriteRenderer”添加到 Gumbaa 时,我收到另一条错误消息,如下所示:无法将组件“SpriteRenderer”添加到 Koopa Troopa,因为它与现有的“MeshFilter”派生组件冲突!
using System.Collections;
using UnityEngine;
public class EnemyMovement : MonoBehaviour
{
public float speed = 2.7f;
public LayerMask EnemyMask;
Transform myTrans;
float myWidth, myHeight;
Rigidbody2D rb;
SpriteRenderer mySprite;
// Use this for initialization
void Start ()
{
myTrans = this.transform;
rb = this.gameObject.GetComponent<Rigidbody2D> ();
mySprite = this.gameObject.GetComponent<SpriteRenderer> ();
myWidth = mySprite.bounds.extents.x;
myHeight = mySprite.bounds.extents.y;
}
// Update is called once per frame
void FixedUpdate ()
{
Physics2D.IgnoreLayerCollision (8, 9);
Vector2 LineCastPos = (myTrans.position.toVector2() + myTrans.right.toVector2() * myWidth + Vector2.up * myHeight * 1.2f);
Debug.DrawLine (LineCastPos, LineCastPos + myTrans.right.toVector2 () * 1.2f);
bool isBlocked = Physics2D.Linecast (LineCastPos, LineCastPos + myTrans.right.toVector2 () * 1.2f, EnemyMask);
if (isBlocked)
{
Vector2 currRot = myTrans.eulerAngles;
currRot.y += 180;
myTrans.eulerAngles = currRot;
}
Vector2 myVel = rb.velocity;
myVel.x = myTrans.right.x * speed ;
rb.velocity = myVel;
}
}
【问题讨论】:
-
错误说明了一切。您没有将
SpriteRenderer附加到相同的游戏对象EnemyMovement脚本附加到。检查你的场景 -
游戏对象是 Gumbaa。我尝试将组件“SpriteRenderer”添加到其检查器,但收到此错误消息:无法将组件“SpriteRenderer”添加到 Koopa Troopa,因为它与现有的“MeshFilter”派生组件冲突。可以查看我的检查员截图
-
这是一个 3D(模型)对象吗?如果是这样,则将 MeshRenderer 添加到其中,而不是用于 2D 的 SpriteRenderer。如果它是 2D 对象,则删除附加到它的 MeshFilter。