坦克大战
游戏介绍:
一共有蓝色和红色两只坦克,蓝色坦克WASD控制移动,空格键发射子弹;红色坦克方向键控制移动,Enter发射子弹。坦克下方有血条,血条消失即游戏结束。
场景导入:
Window →Lighting→Auto Generate取消;取消光线自动渲染,加快开发进度(自动渲染等待时间太长)
Camera→Project→正交视图与透视图
正交视图:即无消失点投影,物体的大小不会随距离的远近而变化,常用作2D
透视图:和我们眼睛看到的物体一直,近大远小
FixedUpdate()固定帧去调用
float h = Input.GetAxis("Vertical"),h的值域为[-1,1]之间,水平方向
刚体组件(Rigibody)→Constraints:约束,控制对刚体运动的约束,勾选这表示冻结即不发生效果。
可以在Unity→Edit→Project Setting→Input 中进行键盘设置
实例化对象
public KeyCode firekey = KeyCode.Space;
if (Input.GetKeyDown(firekey)) { GameObject go = GameObject.Instantiate(shellprefab, transform.position, transform.rotation) as GameObject; go.GetComponent<Rigidbody>().velocity = go.transform.forward * shellspeed; }
设置空格按键,当按下空格按键后,对游戏对象进行实例化,实例化的三个参数分别是实例化的物体对象,对象的位置,对象的旋度;将实例化的对象对象赋值一个名称,以便获取对象的相关组件。
定时毁灭物体
Destroy(this.gameObject, time)
视野跟随控制
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class FollowTarget : MonoBehaviour { 6 7 public Transform Play1; 8 public Transform Play2; 9 private Vector3 offset; 10 private Camera camera; 11 void Start () { 12 offset = transform.position - (Play1.position + Play2.position) / 2; 13 camera = this.GetComponent<Camera>(); 14 } 15 16 17 void Update () { 18 transform.position = (Play1.position + Play2.position) / 2 + offset; 19 float distance = Vector3.Distance(Play1.position, Play2.position); 20 float size = distance * 1; 21 camera.orthographicSize = size; 22 } 23 }
控制两个坦克的视野:
(1)确定两个坦克中心点和相机的偏移:首先调整相机到合适位置,计算出此时相机和中心点的距离,并赋值给偏移量Offset
动态时,确定相机位置
transform.position = (Play1.position + Play2.position) / 2 + offset;
(2)确定两个坦克距离和相机Size参数的比例关系:
float distance = Vector3.Distance(Play1.position, Play2.position);
计算出两个坦克之间的距离,并赋值给distance,size/distance计算出此时的比例系数;
float size = distance * 1;
动态时,确定相机size值
获取camera组件,将size值赋值给camera的size组件参数
camera.orthographicSize = size;