Unity API查询:Unity - Scripting API:
素材 : 百度搜图片:地面纹理,找到喜欢的贴图导入Import资源即可
自制一个坦克大战:需要的GameObjects有:Plane,Bullets,EnemyTank,PlaytTank,Wall空气墙
Main Camera,Directional Light
由于音频视频导入和UI制作和3D建模都不会,只能搞搞基础的了
以下是实机展示:
空气墙的制作:先在Plane边缘建立一个墙,尽量将墙边缘贴近Plane后用v键使重合,然后Crtl+D复制三份,通过移动和旋转角度和Plane重合,最后关闭Inspector面板的Mesh Mender组件,游戏运行时就会生成
己方坦克的要实现的功能有;移动,旋转,发射炮弹,创建一个PlayerControl.cs的脚本
移动,旋转通过虚拟轴GexAxis()获取正负方向Horizontal,Vertical
创建一个炮弹发射点的空对象
发射炮弹用transform.Find("目录")找到这个空对象
同时创建一个球体即炮弹的预设体
用圆柱体和长方体创建一个坦克并给它脚本和刚体,把坦克的GameObject全放在空对象中
再创建一个Bullets.cs的组件,负责控制炮弹的速度和方向
**创建敌方坦克**
因为要生成多个敌方坦克,需要将敌方坦克设置为一个预设体,颜色要和玩家的有所区分,还有坦克生成的最大数量,生成的时间间隔。首先他得是个刚体,其次得有计数器counter,计时器timer和时间间隔interval控制它生成的时间
需要创建一个TankControl.cs的脚本负责坦克的基本生成,移动等等。。。同时还需要刚体,计时器
最重要的还是随机生成,使用Random.Range()来随机生成的位置,角度等等。。
Example:对于旋转的角度来说,生成的是欧拉角,但要转成四元数,因为你要使用
Instantiate(GameObject,Vector3,Quaternion)这个方法;这时候我们就要使用Quaternion.Euler()这个方法来转化为四元数了。
既然生成了坦克,就不得不考虑模型重叠的问题了,添加刚体的情况下坦克容易被搞飞。
这时候就要用Physcis.CheckSphere(Vector3,float,int layerMask),球形检测,参数分别代表的意思是中心位置,半径,检测的Layer层,
第三个参数:layerMask涉及位或运算,由于我不会就简单介绍一下。(1 timeInterval) { yPartol = Random.Range(0, 360);
//计时器归零 timer = 0; } //新生成一个角度来旋转 Rotate(Quaternion.Euler(Vector3.up * yPartol)); //Quaternion quaRotation = Quaternion.LookRotation // (new Vector3(0, yPartol, 0));
// transform.rotation = Quaternion.Lerp(transform.rotation, // quaRotation, turnSpeed * Time.deltaTime); } private void Rotate(Quaternion quaTarget) { //再用插值函数 transform.rotation = Quaternion.Lerp(transform.rotation, quaTarget, turnSpeed * Time.deltaTime);
} private void RotateTo(Vector3 pos) { //先将方向向量转化为四元数 Quaternion quaTarget = Quaternion.LookRotation(pos); Rotate(quaTarget);
} }
其次是敌方坦克管理(如生成)
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class MyEnemyTankManager : MonoBehaviour { //创建敌方坦克的生成 //以及敌方坦克的基本属性:随机生成的位置,旋转的角度 //还需要一些限制:最大生成数量,定时生产,生成的时候不能和其它坦克重合
[Header("敌方坦克的预设体")] public GameObject enemyTankPrefab;
private float counter; [Range(30, 100)] public int maxEnemy = 50;
private float timer = 0; [Header("生成的时间间隔")] public float timeInterval = 5f;
private float radius = 5f; private void Start() { }
private void Update() { timer += Time.deltaTime; if (timer > timeInterval) { if(counter
- 【Untiy2D独立/合作开发】特别篇:如何实现快速丢掉物品
- [Unity2D独立/合作开发]实现记录物品在不同场景的存在状态,附:场景的淡入淡出功能和预加载
- 【Unity好插件之PlayMaker系列一上半部分】如何只用一个插件和一个脚本完成制作一个简易的游戏
- [Unity存档系统]简单介绍Unity常见存档系统二JSON以及使用方法
- [Unity存档系统]简单介绍Unity常见存档系统之一PlayerPrefs以及使用方法
- 【Unity2D好项目分享】用全是好活制作横版卷轴射击游戏⑤制作得分系统以及能量的使用。
- 【Unity2D好项目分享】用全是好活制作横版卷轴射击游戏④制作敌人管理器以及播数显示和音效以及场景加载器
- 【Unity2D好项目分享】用全是好活制作横版卷轴射击游戏③制作血条和能量条UI以及生命值系统和能量值系统
- 【Unity2D好项目分享】用全是好活制作横版卷轴射击游戏②游戏画面后处理以及制作玩家子弹
- 【Unity2D好项目分享】用全是好活制作横版卷轴射击游戏①简单制作滚动卷轴以及玩家移动