【转】AI_自动寻怪,自动追击

来源:互联网 发布:淘宝口令红包 编辑:程序博客网 时间:2024/04/28 01:47
1,坦克自动旋转炮管,自动瞄准
2,在坦克的射程之内自动开炮
3,坦克自动向你追击

var Enemy_tank: GameObject;                                             //定义的坦克
var firepoint: Transform;                                                         //定义的开火点
var bullet: Rigidbody;                                                              //定义的子弹
var bullspeed: int=50;                                                              //定义的子弹速度
var attackRange = 100.0;                                                          //定义的距离
var target : Transform;//定义的共计目标
//static var value : float ;
private var cun_time: int=0;


function Start ()                                                                                 //初始化目标
{
    if (target == null && GameObject.FindWithTag("hero"))     target = GameObject.FindWithTag("hero").transform;
}


function Update () 
{
//Tank Fire
// cun_time++;
// if(cun_time==260)
// { 
//     var clone : Rigidbody;
//     clone = Instantiate(bullet, firepoint.transform.position, firepoint.transform.rotation);
//     clone.velocity = transform.TransformDirection (Vector3.right*bullspeed);
//     cun_time=0;
//     }

//distance from A and B
//angle from A and B
//var targetDir = transform.position-other.position;
//var right = transform.right;
//var angle = Vector3.Angle(targetDir, right);
//print("angle is ="+angle);//if (angle < 5.0)//transform.Rotate(Vector3.up*0.5);

//var speed = 0.1;
//transform.rotation =Quaternion.Slerp (from.rotation, to.rotation, Time.time * speed);




Enemy_tank=GameObject.Find("Enemy_barrel");                                                       //实例化
if (target == null)
return;
if (!CanSeeTarget ())
return;
// Rotate towards target
var targetPoint = target.position;
var targetRotation = Quaternion.LookRotation (targetPoint - Enemy_tank.transform.position,Vector3.up);  //求出与目标之间的角度
Enemy_tank.transform.rotation = Quaternion.Slerp(Enemy_tank.transform.rotation, targetRotation, Time.deltaTime * 2.0); 
//旋转之角度与目标对齐
//If we are almost rotated towards target - fire one clip of ammo

var forward = Enemy_tank.transform.TransformDirection(Vector3.forward);
var targetDir =Enemy_tank.transform.position-target.position;                          //求出2者之间的距离
if((Vector3.Angle(forward, targetDir) <10.0)||((Vector3.Angle(forward, targetDir) >-10.0)))         //这边是自动开炮的效果
{
cun_time++;
if(cun_time==260)
   { 
    var clone : Rigidbody;
    clone = Instantiate(bullet, firepoint.transform.position, firepoint.transform.rotation);
    clone.velocity = Enemy_tank.transform.TransformDirection (Vector3.forward*bullspeed);
    cun_time=0;
   }
}

if((Vector3.Distance(transform.position, target.position) < attackRange))         //发现目标而且在范围之内,开始追击目标
{
   var targetPoint1 = target.position;
//Calculation the angle with target
var targetRotation1 = Quaternion.LookRotation (targetPoint1 - transform.position,Vector3.up);
//Rotated Itself   then make a line with target
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation1, Time.deltaTime * 1.0);
   transform.Translate(Vector3.forward*0.05);
   }


}

function CanSeeTarget (): System.Boolean                                //计算是否被发现
{
if (Vector3.Distance(transform.position, target.position) > attackRange) return false;
var hit : RaycastHit; if (Physics.Linecast (transform.position, target.position, hit))
return hit.transform == target; return false;


}
原创粉丝点击