码迷,mamicode.com
首页 > 编程语言 > 详细

unity3D引擎:2D游戏自动瞄准算法实现

时间:2016-07-14 01:25:54      阅读:510      评论:0      收藏:0      [点我收藏+]

标签:

转:http://blog.csdn.net/naitu/article/details/39555373

在很多飞行射击类游戏里,都有敌人向玩家自动瞄准并开火的功能。在这里本人用unity3D引擎新版本的2D系统来实现这个功能。

首先,让我们了解一下原理的理论知识。我们可以把敌人和玩家放到一个坐标系中,敌人是坐标是的原点((0,0)点),玩家是在这个坐标系中的一点。然后把二者在坐标系中构建成直角三角形来计算坐标系的X轴旋转多少角度指向玩家。

技术分享

 

现在假设玩家分别放在坐标系的四个象限中,假设第一象限坐标为(X,Y),假设第二象限坐标为(-X,Y),假设第三象限坐标为(-X,-Y),假设第四象限坐标为(X,-Y)。分别求出它们的角度。

技术分享

tan角度=(敌人坐标Y-玩家坐标Y)/(敌人坐标X-玩家坐标X).

要用代码求出角度,就要对上面的值进行反正切。注意反正切之后的值是弧度值不是角度值。我们还要把它进行弧度转角度操作。代码如下。

angle =Mathf.Rad2Deg*Mathf.Atan ((transform.position.y- m_player.position.y) / (transform.position.x - m_player.position.x));

 

当玩家在第一象限时,旋转角度为正数。当玩家在第四象限时,旋转角度为负数。注意,这里的旋转角度是敌人坐标X轴指向玩家所要旋转的角度。在unity中一般是把Y轴为向上方向。所以我们要Y轴指向玩家就要让敌人顺时针旋转90°。也就是让角度值减90°。

angle=angle-90;

技术分享

技术分享

当玩家在第三象限时,旋转角度为正数。当玩家在第二象限时,旋转角度为负数。注意,这里的旋转角度是敌人坐标-X轴指向玩家所要旋转的角度。我们要Y轴指向玩家就要让敌人逆时针旋90°。也就是让角度值加90°。

angle=angle+90;

技术分享

技术分享

要判断玩家在坐标系的一四象限还是二三象限很简单。敌人X坐标减去玩家X坐标小于0时,玩家在一四象限。否则在二三象限。

if(transform.position.x - m_player.position.x < 0)

                            angle=angle-90;

                   else

                            angle=angle+90;

 

求出了旋转角度,下面我们来设置物体的自身欧拉角。由于我们要旋转的是XY轴构成的平面。我们就要以Z轴为旋转轴来旋转。使物体绕自身坐标系绕Z轴,旋转angle度。

transform.localEulerAngles=new Vector3(0,0,angle);

这样敌人就可以根据玩家的位置自动瞄准了。最终代码如下;

using UnityEngine;

using System.Collections;

public class enemy : MonoBehaviour {

//申请一个变量存储角度值。

private float angle;

//申请一个变量存储玩家位置。

public Transform m_player;

//申请一个变量存储gun游戏物体的prefab。

public Transform gun;

void Start () {

}

void Update () {

//计算角度

angle =Mathf.Rad2Deg*Mathf.Atan ((transform.position.y - m_player.position.y) / (transform.position.x - m_player.position.x));

//判断角度所在象限,并进行修正。

if (transform.position.x - m_player.position.x < 0)

angle=angle-90;

else 

angle=angle+90;

//设置物体的自身欧拉角,是物体绕自身坐标系在Z轴,旋转Z度。

transform.localEulerAngles=new Vector3(0,0,angle);

//生成gun物体。

//Instantiate (gun, transform.position, transform.rotation);

}

}

 

unity3D引擎:2D游戏自动瞄准算法实现

标签:

原文地址:http://www.cnblogs.com/dj1232090/p/5668080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!