用Unity实现一个很基本的游戏操作,相当于吃星星,控制小球在方块区域内吃掉所有的小方块(food),即可获得游戏胜利。
1.游戏场景的实现:
1〉创建Cube,拉伸scale属性,实现地板平面(貌似现在很多地面都是这么干的),作为Ground
2〉 创建4个Cube作为四周的围墙
3〉将围墙全部放到Ground下面,当作子物体,这样做的好处是使整个游戏场景作为一个整体进行操作
2.食物的实现:
1〉创建Cube,调整Rotation属性进行旋转至如上状态
2〉如何实现物体的自动旋转呢?
只需要在Food下面挂载脚本:
void Update () {
this.transform.Rotate (Vector3.up);//每帧都使物体沿y轴旋转
}
/*对于Vector3.up
Vector3
.up
public static
Vector3
up
;
Description
Shorthand for writing Vector3(0, 1, 0).
*/
注意,在里面up是y轴,而不是我们所认为的z轴
3〉设置成Prefab
注意一个问题就是要将cube的collider(碰撞体)设置为Trigger(触发器) ,此时会忽略物体的物理碰撞属性
3.Player的实现
1〉此处用一个Sphere简单的当作Player处理
2〉 给Player设置一个Rigidbody(刚体)属性,只有具有刚体属性才能够给物体添加物理学上的力,才能够使物体发生物理学上的运动[可见如果要深入引擎实现底层的话,物理得学好,哈哈]
3〉给Player设置控制脚本
public class player : MonoBehaviour {
private int i = 0;
// Update is called once per frame
void Update () {
float horizontal_move = Input.GetAxis ("Horizontal");//x轴方向输入检测,范围是-1~1
float vertical_move = Input.GetAxis ("Vertical");//z轴方向输入检测,范围是-1~1
this.rigidbody.AddForce (new Vector3(horizontal_move*10,0,vertical_move*10));//给物体施加一个力
}
void OnTriggerEnter(Collider other ){//触发器检测,当进入触发器时进行触发
//destory
//i++
//if i==10,game win
if (other.gameObject.name == "Food") {
GameObject.Destroy (other.gameObject);
i++;
}
if (i == 10) {//吃掉10个食物后游戏结束
Debug.Log("Game Win!");
}
}
}
4.相机跟随功能:
我们能看到的游戏界面显示出来的实际上就是游戏相机所拍摄到的,那么到底是如何实现人物移动的时候,看到的场景也跟着人物变换的呢 ?
这个就涉及到了相机跟随的一个问题;
在坐标系中,如果能够保持相机相对于游戏物体的相对位置一定的话,那么也就实现了相机的跟随问题。
public GameObject player;
// Update is called once per frame
void Update ()
{
Vector3 player_position = player.GetComponent<Transform> ().position;
this.GetComponent<Transform> ().position = new Vector3 (player_position.x, player_position.y + 7.1f, player_position.z - 8.57f);
}
脚本挂载在相机上面, 这样的话相机始终保持在相对游戏物体(0,+7.1,-8.57)的位置,实现了相机的跟随功能。
最后放好 food,就可以开始游戏了。比较值得学习的就是关于相机跟随的实现思想。
[链接:http://pan.baidu.com/s/1i3ztVzJ 密码:9kr2]
——爱生活,乐分享
Poloris