unity 制作小球吃砖块简易游戏

a 夏天 提交于 2020-05-04 22:47:36

下载材料包,调整基本设置

创建场景

Ground:创建plane作为Ground,放大一倍,加上材质。

Wall:创建四个cube添加到一个empty管理,调整位置(距离原点10个单位)大小(长20.5,宽0.5)

PickUp:创建一个cube(长宽高0.5,Rotation45),添加Tag——PickUp(创建新的Tag),添加Rigidbody(勾上Is Trigger和Is Kinematic)

              写一个自转脚本

void Update () {
        this.transform.Rotate(new Vector3(15, 30, 45)*Time.deltaTime);
	}

             将PickUp作为预制件放入场景中

             方法一:拖入12个PickUp到场景中调整位置排成一个圆

             方法二:写脚本自动生成(写在camera的脚本里,下面是新加的内容)

public class CameraController : MonoBehaviour {
    public GameObject pickupPfb;
    private GameObject[] obj1;//生成一个数组
    private int objCount = 0;
	// Use this for initialization
	void Start () {
        obj1 = new GameObject[12];
        for (objCount = 0; objCount < 12; objCount++)
        {
            obj1[objCount] = GameObject.Instantiate(pickupPfb);
            obj1[objCount].name = "pickup" + objCount.ToString();//命名
            obj1[objCount].transform.position = new Vector3(4*Mathf.Sin(Mathf.PI/6*objCount),1,4*Mathf.Cos(Mathf.PI/6*objCount));//确定位置
        }
	}
}

游戏方法

Player:创建一个球,Tag设为Player,添加Rigidbody

player运动的脚本

public class PlayerController : MonoBehaviour {
    public float speed;//设置速度的卡槽可以改变小球运动速度
    private Rigidbody rb;//定义刚体对象
	void Start () {
        rb = GetComponent<Rigidbody>();//获取对象的Rigidbody
	}
	
    //控制小球
    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");//获取Horizontal的方向
        float moveVertical = Input.GetAxis("Vertical");//获取Vertical的方向
        Vector3 movement = new Vector3(moveHorizontal, 0, moveVertical);//没有Y轴上的移动
        rb.AddForce(movement * speed);//加一个力
    }

    //碰到砖块后砖块消失
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("PickUp"))//当碰到的物体标签为PickUp时
        {
            other.gameObject.SetActive(false);//物体看不见
        }
    }

 

视角

摄像机跟着球跑

public class CameraController : MonoBehaviour {
    public GameObject player;
    private Vector3 offset;//摄像机和玩家之间的偏移量
	// Use this for initialization
	void Start () {
        offset = this.transform.position - player.transform.position;//计算偏移量
	}
	
    void LateUpdate()
    {
        this.transform.position = player.transform.position + offset;
    }

 

游戏数据

在游戏中创建可以记录游戏数据的文本

创建两个Text

       

Text的脚本写在Player的脚本里(下面的为新加的部分)

using UnityEngine.UI;

public class PlayerController : MonoBehaviour {
    public Text countText;
    public Text winText;
    private int count;//计数
	void Start () {
        count = 0;
        winText.text = "";
        SetCountText();
	}
    //碰到砖块后砖块消失
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("PickUp"))//当碰到的物体标签为PickUp时
        {
            other.gameObject.SetActive(false);//物体看不见
            count += 1;//碰到砖块计数加一
            SetCountText();//碰到一次更新一次

        }
    }

    void SetCountText()//自定义函数
    {
        countText.text = "Count:" + count.ToString();
        if (count >= 12)
        {
            winText.text = "You Win";
        }
    }
}

视频链接:https://unity-1-1301924619.cos.ap-nanjing.myqcloud.com/Unity%202017.4.36c1%20Personal%20(64bit)%20-%20Rollball.unity%20-%20RollBall%20-%20PC%2C%20Mac%20%26%20Linux%20Standalone_%20_DX11_%202020-05-04%2018-22-07.mp4

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!