这是另一个自己随手做的小东西,就一个场景,画面简单粗暴
我的经验,一个好的地形,包含了太多人的辛酸泪啊,看看人家的碰撞体,再看我自己捣鼓的,完全不是一个阶级,还好弄来了地形,
主体思想,键盘控制自己移动,空格发射炮弹,随机生成敌人小坦克,细心的你有没有发现,有一个小坦克出来的时候是竖着出来的!竖着走!跑的还比别人一点不慢,我也是醉了,
下面是敌人小坦克的AI,要把子弹做成预设体,每隔几秒发一个,这回没重力,子弹是直的,因为我试过有重力的,对于我这种数学小白,完全打不中啊,
public Transform gun;//枪管头的位置
public GameObject bulletPre;//子弹预设体
public float attackRate = 80f;//攻击概率
public float thinkTime = 2f;//思考时间
public float rotateTime = 4;//每过多长时间换方向
public float currentTime = 0f;//当前时间
public float currentRotateTime = 0f;//当前时间
public bool isTriggerWall= false;//检查是否撞墙了
void Start () {
gun = transform.Find ("Gun");//那个发子弹的位置
}
void Update () {
Think ();
RotateBody ();
}
void Think()
{
if (currentTime >= thinkTime) {//敌人思考时间
Attack();
currentTime = 0;
}
currentTime += Time.deltaTime;
transform.Translate (Vector3.forward*2f*Time.deltaTime);
}
void Attack()
{
if (!CheckIsCanAttack())
return;
Shoot ();
}
bool CheckIsCanAttack()//看能否攻击,在不在范围中
{
bool can = Random.Range (1f,100f) <= attackRate;
return can;
}
void RotateBody()
{
if (CheckIsCanRotateBody () || isTriggerWall) {
float direction = Random.Range (1, 10) <= 5 ? 1 : -1;
transform.Rotate (Vector3.up * 90f * direction);
currentRotateTime = 0f;
isTriggerWall = false;
}
}
bool CheckIsCanRotateBody()
{
bool can = currentRotateTime >= rotateTime;
currentRotateTime += Time.deltaTime;
return can;
}
void OnCollisionEnter(Collision other){
isTriggerWall = true;
}
void Shoot()
{
//创建子弹
GameObject bullet = Instantiate (bulletPre, gun.position, gun.rotation) as GameObject;
//发射子弹(给子弹施加力的作用)
bullet.GetComponent<Rigidbody> ().AddForce (bullet.transform.TransformDirection (Vector3.forward) * 50f, ForceMode.Impulse);
bullet.GetComponent<BulletController> ().isEnemy = true;
}