塔防游戏c语言源代码,用Unity开发一款塔防游戏(一):攻击方设计

private void Update()

{

hpObj.rotation = mainCamera.rotation; //血条始终面向镜头

if (GameMain.instance.gameOver) //游戏结束播放待机动画

anim.Play("idle");

else if (state == EnemyState.forward)

EnemyForward();

}

public int view; //视野

Quaternion wayDir; //前进方向

MainCity target; //主城

Transform way; //正在走的路

public float speed;

//前进方法

private void EnemyForward()

{

RaycastHit hit;

//看见攻击目标则攻击

if (Physics.Raycast(eye.position, transform.forward, out hit, view, LayerMask.GetMask("City")))

{

state = EnemyState.attack;

anim.Play("attack");

target = hit.collider.GetComponent();

}

//斜下方30°打射线检测前方道路

if (Physics.Raycast(eye.position, Quaternion.AngleAxis(30, transform.right)

* transform.forward, out hit, 50, LayerMask.GetMask("Way")))

{

Debug.DrawLine(eye.position, hit.point, Color.blue);

//发现未走过的道路,获取该道路,朝向该路通往的方向

if (!ways.Contains(hit.collider))

{

ways.Add(hit.collider);

way = hit.transform;

wayDir = Quaternion.LookRotation(way.forward);

}

}

else //前方没路了发射球形射线检测周围是否有路

{

Collider[] colliders = Physics.OverlapSphere(transform.position, 8, LayerMask.GetMask("Way"));

for (int i = 0; i < colliders.Length; i++)

{

//发现未走过的道路,获取该道路,朝向该路通往的方向

if (!ways.Contains(colliders[i]))

{

way = colliders[i].transform;

wayDir = Quaternion.LookRotation(way.forward);

break;

}

}

}

//获取与脚下道路x轴上偏差值,好让自身走在路中间

float offset = 0;

if (way != null)

{

Vector3 distance = transform.position - way.position;

offset = Vector3.Dot(distance, way.right.normalized);

}

//面向该路指向的方向前进

transform.rotation = Quaternion.RotateTowards(transform.rotation, wayDir, speed * 20 * Time.deltaTime);

transform.Translate(-offset * Time.deltaTime, 0, speed * Time.deltaTime);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值