Unity3D学习之_AI人工智能(坦克模型自动寻怪_自动追击)

本文介绍了一种基于Unity的游戏开发技术实现的坦克自动寻敌和射击系统。通过定义坦克、开火点、子弹等元素,并设定坦克的寻敌逻辑与射击算法,使坦克能够自动追踪并攻击指定的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天发布一篇关于但可大战的AI人工只能设置。实现了坦克的自动寻怪和自动追击功能。

该文章出自 【狗刨学习网】 http://www.gopedu.com/

  1. var Enemy_tank: GameObject; //定义坦克
  2. var firepoint: Transform; //定义开火点
  3. var bullet: Rigidbody; //定义子弹
  4. var bullspeed: int=50; //定义子弹速度
  5. var attackRange = 100.0; //定义距离
  6. var target : Transform;//定义共计目标
  7. //static var value : float ;
  8. private var cun_time: int=0;
  9. function Start () //初始化目标
  10. {
  11. if (target == null && GameObject.FindWithTag("hero")) target = GameObject.FindWithTag("hero").transform;
  12. }
  13. function Update () 
  14. {
  15. //Tank Fire
  16. // cun_time++;
  17. // if(cun_time==260)
  18. // { 
  19. // var clone : Rigidbody;
  20. // clone = Instantiate(bullet, firepoint.transform.position, firepoint.transform.rotation);
  21. // clone.velocity = transform.TransformDirection (Vector3.right*bullspeed);
  22. // cun_time=0;
  23. // }
  24. //distance from A and B
  25. //angle from A and B
  26. //var targetDir = transform.position-other.position;
  27. //var right = transform.right;
  28. //var angle = Vector3.Angle(targetDir, right);
  29. //print("angle is ="+angle);//if (angle < 5.0)//transform.Rotate(Vector3.up*0.5);
  30. //var speed = 0.1;
  31. //transform.rotation =Quaternion.Slerp (from.rotation, to.rotation, Time.time * speed);


  32. Enemy_tank=GameObject.Find("Enemy_barrel"); //实例化
  33. if (target == null)
  34. return;
  35. if (!CanSeeTarget ())
  36. return;
  37. // Rotate towards target
  38. var targetPoint = target.position;
  39. var targetRotation = Quaternion.LookRotation (targetPoint - Enemy_tank.transform.position,Vector3.up); //求出与目标之间的角度
  40. Enemy_tank.transform.rotation = Quaternion.Slerp(Enemy_tank.transform.rotation, targetRotation, Time.deltaTime * 2.0); //旋转之角度与目标对齐
  41. //If we are almost rotated towards target - fire one clip of ammo
  42. var forward = Enemy_tank.transform.TransformDirection(Vector3.forward);
  43. var targetDir =Enemy_tank.transform.position-target.position; //求出2者之间的距离
  44. if((Vector3.Angle(forward, targetDir) <10.0)||((Vector3.Angle(forward, targetDir) >-10.0))) //这边是自动开炮的效果
  45. {
  46. cun_time++;
  47. if(cun_time==260)

  48. var clone : Rigidbody;
  49. clone = Instantiate(bullet, firepoint.transform.position, firepoint.transform.rotation);
  50. clone.velocity = Enemy_tank.transform.TransformDirection (Vector3.forward*bullspeed);
  51. cun_time=0;
  52. }
  53. }
  54. if((Vector3.Distance(transform.position, target.position) < attackRange)) //发现目标而且在范围之内,开始追击目标
  55. {
  56. var targetPoint1 = target.position;
  57. //Calculation the angle with target
  58. var targetRotation1 = Quaternion.LookRotation (targetPoint1 - transform.position,Vector3.up);
  59. //Rotated Itself then make a line with target
  60. transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation1, Time.deltaTime * 1.0);
  61. transform.Translate(Vector3.forward*0.05);
  62. }
  63. }
  64. function CanSeeTarget (): System.Boolean //计算是否被发现
  65. {
  66. if (Vector3.Distance(transform.position, target.position) > attackRange) return false;
  67. var hit : RaycastHit; if (Physics.Linecast (transform.position, target.position, hit))
  68. return hit.transform == target; return false;
  69. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值