unity想用刚体添加重力效果,代码编写完了运行效果不行

代码应该没有问题的,这个报错是什么意思,该怎么解决,有没有会的友友解答一下~

img

img

img





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截图

你把你的这个脚本代码粘贴出来,把你挂了这个脚本的物体属性面板截图出来