代码应该没有问题的,这个报错是什么意思,该怎么解决,有没有会的友友解答一下~
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Stack : MonoBehaviour
{
//破碎积木的预制体
public GameObject brokenTilePrefab;
//粒子效果
public GameObject goodPlacedPrefab;
//积木块的列表
private List<Transform> mTiles;
//游戏状态
enum GAME_STATE
{
READY = 0,
RUN = 1,
OVER = 2
}
//当前游戏状态
private GAME_STATE mGameState = GAME_STATE.READY;
//是否沿着X轴移动
private bool isMovingOnX = true;
//当前要操作的积木
private Transform currentTile;
//积木移动速度
private float mMoveSpeed=4f;
//是否让积木停止移动
private bool isStopMoving;
//对齐宽容度
private float allowOffset = 0.3f;
private void Awake()
{
mTiles = new List<Transform>();
for (int i = 0; i < transform.childCount - 1; i++)
{
mTiles.Add(transform.GetChild(i));
}
}
private void Update()
{
switch (mGameState)
{
case GAME_STATE.READY:
if (Input.GetMouseButtonDown(0))
{
ResetTile();
this.mGameState = GAME_STATE.RUN;
}
break;
case GAME_STATE.RUN:
MoveTile();
if (Input.GetMouseButtonDown(0))
PlaceTile();
break;
case GAME_STATE.OVER:
EndGame();
break;
}
}
//重置积木
private void ResetTile()
{
isMovingOnX = !isMovingOnX;
//获取最底下的一个积木
currentTile = mTiles[mTiles.Count - 1];
mTiles.RemoveAt(mTiles.Count - 1);
//获取第一个积木的位置
Transform firstTile = mTiles[0];
//设置初始位置
if (isMovingOnX)
{
currentTile.position = new Vector3(-10, -1, firstTile.position.z);
currentTile.localScale = firstTile.localScale;
}
else
{
currentTile.position = new Vector3(firstTile.position.x, -1, -10);
currentTile.localScale = firstTile.localScale;
}
//剩余的积木堆,往下移动一个单位
for (int i = 0; i < mTiles.Count; i++)
{
mTiles[i].position += Vector3.down;
}
//将当前积木放入列表的最上面
mTiles.Insert(0, currentTile);
//重新让积木开始移动
isStopMoving = false;
}
//放置积木
private void PlaceTile()
{
isStopMoving = true;
Transform nextTile = mTiles[1];
if (isMovingOnX)
{
if (currentTile.position.x < nextTile.position.x - nextTile.localScale.x)
{
this.mGameState = GAME_STATE.OVER;
return;
}
else
{
float offsetX = currentTile.position.x - nextTile.position.x;
if (Mathf.Abs(offsetX) <= allowOffset)
{
currentTile.position = new Vector3(nextTile.position.x, currentTile.position.y, currentTile.position.z);
GameObject obj = Instantiate(goodPlacedPrefab, currentTile.position, Quaternion.identity);
Destroy(obj, 1f);
}
else
{
currentTile.localScale = new Vector3(currentTile.localScale.x - Mathf.Abs(offsetX), currentTile.localScale.y, currentTile.localScale.z);
currentTile.position = new Vector3(currentTile.position.x - offsetX / 2, currentTile.position.y, currentTile.position.z);
// CreateBrokenTile(offsetX);
}
}
}
else
{
if (currentTile.position.z < nextTile.position.z - nextTile.localScale.z)
{
this.mGameState = GAME_STATE.OVER;
return;
}
else
{
float offsetZ = currentTile.position.z - nextTile.position.z;
if (Mathf.Abs(offsetZ) <= allowOffset)
{
currentTile.position = new Vector3(currentTile.position.x, currentTile.position.y, nextTile.position.z);
GameObject obj = Instantiate(goodPlacedPrefab, currentTile.position, Quaternion.identity);
Destroy(obj, 1f);
}
else
{
currentTile.localScale = new Vector3(currentTile.localScale.x, currentTile.localScale.y, currentTile.localScale.z-Mathf.Abs(offsetZ));
currentTile.position = new Vector3(currentTile.position.x, currentTile.position.y, currentTile.position.z-offsetZ/2);
// CreateBrokenTile(offsetZ);
}
}
}
ResetTile();
}
//移动积木
private void MoveTile()
{
if (!isStopMoving)
{
//获取当前积木下的一块积木
Transform nextTile = mTiles[1];
//沿着x轴移动
if (isMovingOnX)
{
currentTile.Translate(Vector3.right * Time.deltaTime * mMoveSpeed, Space.World);
//判断是否超出了底下那个积木的位置
if (currentTile.position.x > nextTile.position.x + nextTile.localScale.x)
{
this.mGameState = GAME_STATE.OVER;
}
}
else//沿着z轴移动
{
currentTile.Translate(Vector3.forward * Time.deltaTime * mMoveSpeed, Space.World);
//判断是否超出了底下那个积木的位置
if (currentTile.position.z > nextTile.position.z + nextTile.localScale.z)
{
this.mGameState = GAME_STATE.OVER;
}
}
}
}
//游戏结束
private void EndGame()
{
}
//创建破碎的积木
// private void CreateBrokenTile(float offset)
// {
// Vector3 pos;
// Vector3 scale;
// if (isMovingOnX)
// {
// float offsetX = offset;
// int f = 1;
// if (offsetX > 0)
// f = 1;
// else if (offsetX < 0)
// f = -1;
// float x = currentTile.position.x + f * currentTile.localScale.x / 2 + offsetX / 2;
// pos = new Vector3(x, currentTile.position.y, currentTile.position.z);
// scale=new Vector3(offsetX,currentTile.localScale.y,currentTile.localScale.z);
// }
// else
// {
// float offsetZ = offset;
// int f = 1;
// if (offsetZ > 0)
// f = 1;
// else if (offsetZ < 0)
// f = -1;
// float z = currentTile.position.z + f * currentTile.localScale.z / 2 + offsetZ / 2;
// pos = new Vector3(currentTile.position.x, currentTile.position.y,z);
// scale=new Vector3(currentTile.localScale.x,currentTile.localScale.y,offsetZ);
// }
// GameObject obj = Instantiate(brokenTilePrefab, pos, Quaternion.identity);
// obj.transform.localScale = scale;
// Destroy(obj, 2f);
// }
}
你的引用没有分配,你把挂载脚本的对象Inspector截图
你把你的这个脚本代码粘贴出来,把你挂了这个脚本的物体属性面板截图出来