unity3d - MissingComponentException:“Balletjes(Clone)”游戏对象没有附加“SpriteRenderer”,但脚本正在尝试访问它
问题描述
我收到此错误:
“MissingComponentException:没有‘SpriteRenderer’附加到‘Balletjes(Clone)’游戏对象,但脚本正在尝试访问它。”
我想将精灵的名称分配给变量goldCoinPopUp
。我搜索了很多,但没有任何效果。任何人都可以帮助我吗?
ItemDragHandler
public class ItemDragHandler : MonoBehaviour, IDragHandler, IEndDragHandler
{
public GameObject prefab;
Vector2 original;
public void OnDrag(PointerEventData eventData)
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(ray.origin, ray.direction * 100);
transform.position = Input.mousePosition;
}
public void OnEndDrag(PointerEventData eventData)
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray.origin, ray.direction, out hit, 100))
{
if (hit.collider.gameObject.name == "Terrain")
{
transform.gameObject.SetActive(false);
GameObject obj = Instantiate(prefab,hit.point, Quaternion.EulerAngles(0f, 3f, 0f)); // 3d object
obj.AddComponent<GenerateResources>(); // link to GenerateResources script
Vector3 img = new Vector3(0, 8.66f, 0);
obj.transform.position += img;
}
else
{
transform.localPosition = original;
}
}
else
{
transform.localPosition = original;
}
}
void Start ()
{
original = transform.localPosition;
}
}
生成资源
public class GenerateRessources : MonoBehaviour
{
private int ressourcesInBuilding;
public int valueWhenCollect = 10;
private float timerExtraRessource;
public float generateRate = 4;
public SpriteRenderer goldCoinPopUp;
private GameObject currentGameObject;
private GameObject Inventory;
void Start ()
{
goldCoinPopUp = GetComponent<SpriteRenderer>();
goldCoinPopUp.enabled = false;
currentGameObject = gameObject.GetComponent<GameObject>();
Inventory = GameObject.Find("Inventory");
}
void Update ()
{
AddResource();
getResources();
}
private void AddResource()
{
timerExtraRessource += Time.deltaTime;
if (timerExtraRessource >= generateRate)
{
ressourcesInBuilding++;
timerExtraRessource = 0;
if (ressourcesInBuilding >= valueWhenCollect)
{
goldCoinPopUp.enabled = true;
}
}
}
private void getResources()
{
if (Input.touchCount > 0)
{
Touch touch = Input.touches[0];
if (touch.phase == TouchPhase.Began)
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 100f))
{
if (hit.transform.gameObject != null)
{
}
}
}
}
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 100f))
{
if (hit.transform.gameObject != currentGameObject)
{
if (goldCoinPopUp.enabled == true)
{
goldCoinPopUp.enabled = false;
Inventory.GetComponent<GameController>().Gold += ressourcesInBuilding;
ressourcesInBuilding = 0;
}
}
}
}
}
}
解决方案
您的代码取决于 SpriteRenderer 的存在,而您的预制件没有。您可以通过在类定义之前添加以下属性来解决此问题
[RequireComponent(typeof(SpriteRenderer))]
public class GenerateRessources : MonoBehaviour
然而,自动添加的 SpriteRenderer 将没有附加精灵,因此更好的解决方案是确保您的预制件确实附加了合理的精灵
推荐阅读
- firebase - 从 firebase 存储下载 url 为空
- list - 如何根据先前列表的变量创建列表
- python - 如何使用键盘模块检测任何按键?
- github - Github 包注册表是 Docker 注册表的替代品吗?
- c# - 从 byte[] 返回 FileResult
- xml - 使用 Xquery 返回属性值
- ios - [iOS Swift4]如何支持 ViewControllers(模态和推送)
- android - Rest API 进入 onFailure() 方法问题 - retrofit2
- scala - 在条件成立时在 Scala 中链接多个函数
- python - *** 在 Python -3 中是什么意思?