下载材料包,调整基本设置
创建场景
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";
}
}
}
来源:oschina
链接:https://my.oschina.net/u/4462559/blog/4265361