unity3d ai是做什么的

 我来答
育知同创教育
2016-03-03 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

Unity3d人工智能确定性AI算法。

核心代码:

using UnityEngine;

using System.Collections;

 

public class PlayObject : MonoBehaviour

{

[HideInInspector]

public float moveVx;//x方向的分速度

[HideInInspector]

public float moveVy;//y方向的分速度

/// <summary>

/// 2维坐标(x,y)

/// </summary>

public Vector2 Position

{

get

{

return new Vector2(this.transform.position.x, this.transform.position.y);

}

}

private Vector2 _vHeading;

/// <summary>

/// //设置导弹的前进方向的归一化向量m_vHeading

/// </summary>

public Vector2 vHeading

{

get

{

float length = Mathf.Sqrt(moveVx * moveVx + moveVy * moveVy);

if (length != 0)

{

_vHeading.x = moveVx / length;

_vHeading.y = moveVy / length;

}

return _vHeading;

}

}

private Vector2 _vSide;

/// <summary>

/// 前进方向的垂直向量

/// </summary>

public Vector2 vSide

{

get

{

_vSide.x = -vHeading.y;

_vSide.y = vHeading.x;

return _vSide;

}

}

 

/// <summary>

/// 速度向量

/// </summary>

public Vector2 Velocity

{

get

{

return new Vector2(moveVx, moveVy);

}

}

/// <summary>

/// 速度标量

/// </summary>

public float Speed

{

get

{

return Mathf.Sqrt(moveVx * moveVx + moveVy * moveVy);

}

}

public float MaxSpeedRate;

// Use this for initialization

void Start()

{

}

 

// Update is called once per frame

void Update()

{

 

}

/// <summary>

/// 移动物体

/// </summary>

/// <param name="speedRate">移动的速度率,一般为1</param>

/// <param name="isLookAtVelocityVector">是否要这是速度矢量与物体的朝向一致</param>

public void Move(float speedRate, bool isLookAtVelocityVector)

{

this.transform.position += new Vector3(moveVx * Time.deltaTime, moveVy * Time.deltaTime, 0) * speedRate;

//  Debug.Log("x:" + m_postion.x + "y:" + m_postion.y);

//调整导弹的朝向是的它和速度矢量合成方向一样

if (isLookAtVelocityVector)

{

LookAtVelocityVector();

}

}

/// <summary>

/// 使得物体始终朝向矢量速度的方向

/// </summary>

void LookAtVelocityVector()

{

float zAngles = Mathf.Atan(moveVx / moveVy) * (-180 / Mathf.PI);

if (moveVy == 0)

{

zAngles = moveVx > 0 ? -90 : 90;

//跟以往的计算角度不同的是,这里加了moveVx==0的独立判断,这样可以在不控制的时候保持原状态

if (moveVx == 0)

{

zAngles = this.transform.rotation.eulerAngles.z;

}

}

 

if (moveVy < 0)

{

zAngles = zAngles - 180;

}

Vector3 tempAngles = new Vector3(0, 0, zAngles);

Quaternion tempQua = this.transform.rotation;

tempQua.eulerAngles = tempAngles;

this.transform.rotation = tempQua;

}

}

AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
步虚真人
推荐于2017-09-26 · TA获得超过1344个赞
知道小有建树答主
回答量:601
采纳率:91%
帮助的人:493万
展开全部
是这个AI吗?
如下代码的:
using UnityEngine;
using System.Collections;

//这里是枚举选择敌人类型
public enum EnemyType
{
Enemy0,
Enemy1
}

public class AI : MonoBehaviour {

//敌人类型枚举 有策划人员选择
public EnemyType enemyType = EnemyType.Enemy0;

//主角游戏对象
public GameObject player;

//敌人状态 普通状态 旋转状态 奔跑状态 追击主角状态 攻击主角状态
private const int EMEMY_NORMAL=0;
private const int EMEMY_ROTATION=1;
private const int EMEMY_RUN = 2;
private const int EMEMY_CHASE = 3;
private const int EMEMY_ATTACK = 4;

//记录当前敌人状态 根据不同类型 敌人播放不同动画
private int state;
//旋转状态,敌人自身旋转
private int rotation_state;
//记录敌人上一次思考时间
private float aiThankLastTime;

void Start ()
{
//初始话标志敌人状态 以及动画为循环播放
state = EMEMY_NORMAL;
this.animation.wrapMode = WrapMode.Loop;
}

void Update ()
{
//根据策划选择的敌人类型 这里面会进行不同的敌人AI
if(attackmode .hp >0)
{
switch(enemyType)
{
case EnemyType.Enemy0:
updateEnemyType0();
break;
case EnemyType.Enemy1:
updateEnemyType1();
break;
}
}
}

//更新第一种敌人的AI
void updateEnemyType0()
{
//这个AI比较简单, 当主角与他的距离小于10米时,他将始终朝向这主角
if(Vector3.Distance(player.transform.position,this.transform.position) <= 10)
{
this.transform.LookAt(player.transform);
}
}

//更新第二种敌人的AI
void updateEnemyType1()
{

//判断敌人是否开始思考
if(isAIthank())
{
//敌人开始思考
AIthankEnemyState(3);
}else
{
//更新敌人状态
UpdateEmenyState();
}
}

int getRandom(int count)
{

return new System.Random().Next(count);

}

bool isAIthank()
{
//这里表示敌人每3秒进行一次思考
if(Time.time - aiThankLastTime >1.0f)
{
aiThankLastTime = Time.time;
return true;

}
return false;
}

//敌人在这里进行思考
void AIthankEnemyState(int count)
{
//开始随机数字。
int d = getRandom(count);

switch(d)
{
case 0:
//设置敌人为站立状态
setEmemyState(EMEMY_NORMAL);
break;
case 1:
//设置敌人为旋转状态
setEmemyState(EMEMY_ROTATION);
break;
case 2:
//设置敌人为奔跑状态
setEmemyState(EMEMY_RUN);
break;
}

}

void setEmemyState(int newState)
{
if(state == newState)
return;
state = newState;

string animName = "boss6runandattack";
switch(state)
{
case EMEMY_NORMAL:
animName = "boss6runandattack";
break;
case EMEMY_RUN:
animName ="boss6attack2";
break;
case EMEMY_ROTATION:
animName ="boss6attack2";
//当敌人为旋转时, 开始随机旋转的角度系数
rotation_state = getRandom(4);
break;
case EMEMY_CHASE:
animName ="boss6attack2";
//当敌人进入追击状态时,将面朝主角方向奔跑
this.transform.LookAt(player.transform);
break;
case EMEMY_ATTACK:
animName ="boss6attack2";
//当敌人进入攻击状态时,继续朝向主角开始攻击砍人动画
this.transform.LookAt(player.transform);
break;
}

//避免重复播放动画,这里进行判断
if(!this.animation.IsPlaying(animName))
{
//播放动画

this.animation.Play(animName);
}

}

//在这里更新敌人状态
void UpdateEmenyState()
{
//判断敌人与主角之间的距离
float distance = Vector3.Distance(player.transform.position,this.transform.position);
//当敌人与主角的距离小于10 敌人将开始面朝主角追击
if(distance <= 10)
{
//当敌人与主角的距离小与3 敌人将开始面朝主角攻击
if(distance <= 3)
{
setEmemyState(EMEMY_ATTACK);
}else
{
//否则敌人将开始面朝主角追击
setEmemyState(EMEMY_CHASE);
}

}else
{
//敌人攻击主角时 主角迅速奔跑 当它们之间的距离再次大于10的时候 敌人将再次进入正常状态 开始思考
if(state == EMEMY_CHASE || state == EMEMY_ATTACK)
{
setEmemyState(EMEMY_NORMAL);
}

}

switch(state)
{
case EMEMY_ROTATION:
//旋转状态时 敌人开始旋转, 旋转时间为1秒 这样更加具有惯性
transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.Euler(0,rotation_state * 90,0), Time.deltaTime * 1);
break;
case EMEMY_RUN:
//奔跑状态,敌人向前奔跑
transform.Translate(Vector3.forward *0.0001f);
break;
case EMEMY_CHASE:
//追击状态 敌人向前开始追击
transform.Translate(Vector3.forward *0.1f);
break;
case EMEMY_ATTACK:

break;
}

}
}
这个是人工智能的代码了,它的一个功能是制作“满世界追着你砍的怪物。”

我是新手,如果见解不当,请指正。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式