unity3D引擎:2D游戏自动瞄准算法实现
来源:互联网 发布:淘宝卖假酒怎么处罚 编辑:程序博客网 时间:2024/05/19 20:41
在很多飞行射击类游戏里,都有敌人向玩家自动瞄准并开火的功能。在这里本人用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游戏自动瞄准算法实现
- 动手实现2d游戏引擎(一)
- [Unity3D]手机3D游戏开发:FPS射击游戏中瞄准镜CrossHair的制作
- unity3d开发2d游戏:自动寻路Navmesh入门
- Unity3D 2D游戏摄像机的跟随实现
- Unity3D 2D游戏鼠标点击选中对象如何实现
- 3D游戏引擎设计与实现(2)
- 一种2D游戏引擎的设计与实现
- 一种2D游戏引擎的设计与实现
- Android/Ophone平台2D游戏引擎实现系列文章
- 一种2D游戏引擎的设计与实现
- 一种2D游戏引擎的设计与实现
- unity3d 2D游戏开发
- unity3d 2d游戏相关
- Android 2D游戏引擎
- 2D游戏引擎开发
- 2D游戏引擎ViceGameEngine
- 2D 游戏引擎 全纪录
- Leetcode-2. Add Two Numbers
- Unity3d获取物体的所有子物体对象(child)
- python中pandas库中DataFrame对行和列的操作使用方法
- 回收vector的空间
- 编程之美--2.3寻找发帖“水王”之扩展问题
- unity3D引擎:2D游戏自动瞄准算法实现
- Dapper的扩展这个你知道嘛?
- 树莓派3B-raspbian系统安装
- oracle 权限管理
- 在ununt下安装JDK,eclipse,tomcat
- leetcode 75. Sort Colors
- 抽象工厂模式
- 书单
- 循环神经网络(RNN, Recurrent Neural Networks)介绍