Unity 一段简单的AI
来源:互联网 发布:tcl王牌液晶网络电视 编辑:程序博客网 时间:2024/05/17 04:37
这是一段控制僵尸向玩家移动的脚本,AI很sb但很有效。我将对Unity3d引擎和UDK引擎的AI脚本编写做一个简单的编程介绍。
先是一段UDK引擎下的脚本示例
class TestZombieBot extends GameAIController;
var Pawn thePlayer; //variable to hold the target pawn
var name SeenPlayerAnim;
simulated event PostBeginPlay()
{
super.PostBeginPlay();
}
event SeePlayer(Pawn SeenPlayer) //bot sees player
{
if (thePlayer ==none) //if we didnt already see a player
{
thePlayer = SeenPlayer; //make the pawn the target
TestZombiePawn(Instigator).FullBodyAnimSlot.PlayCustomAnim(SeenPlayerAnim);
GoToState('Follow'); // trigger the movement code
}
}
state Follow
{
Begin:
if (thePlayer != None) // If we seen a player
{
MoveTo(thePlayer.Location); // Move directly to the players location
GoToState('Looking'); //when we get there
}
}
state Looking
{
Begin:
if (thePlayer != None) // If we seen a player
{
MoveTo(thePlayer.Location); // Move directly to the players location
GoToState('Follow'); // when we get there
}
}
default(此处打断是防止自动论坛表情替换代码字符)properties
{
Begin Object class=AnimNodeSequence Name=SeenPlayerAnim
bCauseActorAnimEnd=true
End Object
AnimSets(0)=AnimSet'MyModContents.AnimSet.Zombie'
Animations=SeenPlayerAnim
SeenPlayerAnim=Fury
}
TestZombieBot.uc
以上这段脚本就是怪物攻击玩家的最简单形式,傻傻地跑向玩家,然后攻击玩家。很多游戏都是使用这样的AI,如果你希望你的AI不变成sb,可以参考另一篇文章http://bbs.game798.com/showtopic-141617-1.html
接着介绍Unity3d引擎下的脚本编写。其实程序是相通的,还是按上面那串代码来说,需要改几个变量,首先是玩家坐标(thePlayer.Location),在Unity3D里面没有这个现成的变量,但是你也可以做一步转化获得玩家坐标thePlayer.Location=GameObject.FindWithTag("Player").transform.position
MoveTo函数的具体形式在Unity3D引擎中可以这样写
function MoveTo(position : Vector3)
{
var direction = position - transform.position;
direction.y = 0;
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation(direction), rotationSpeed * Time.deltaTime);
transform.eulerAngles = Vector3(0, transform.eulerAngles.y, 0);
var forward = transform.TransformDirection(Vector3.forward);
var speedModifier = Vector3.Dot(forward, direction.normalized);
speedModifier = Mathf.Clamp01(speedModifier);
direction = forward * speed * speedModifier;
GetComponent (CharacterController).SimpleMove(direction);
}
如果你要跑动有声音,那么把这段插到MoveTo函数里面就可以
if (Time.time > SoundReloadTime +lastSound) {
if (Sound)
AudioSource.PlayClipAtPoint(Sound, transform.position);
lastSound = Time.time;
}
这样就有脚步声了。
Unity3D下更复杂的AI脚本请看另外两个实例
http://bbs.game798.com/showtopic-133226-1.html
http://bbs.game798.com/showtopic-132155-1.html
- Unity 一段简单的AI
- unity 简单的小兵AI
- Unity 智能AI的简单例子
- Unity 基于状态的简单敌人AI
- Unity简单AI编写
- unity简单AI
- Unity简单AI编写
- Unity敌人的AI
- 一段简单的程序
- 一段简单的代码
- unity3d简单的AI
- 简单的鱼群AI
- 五子棋的简单AI
- Unity 内的敌人AI 或者 有限状态机FSM实现AI
- Unity 代码碎片敌人的AI
- 一段简单的事件代码
- 一段简单的Delphi代码
- 一段简单的javascript代码
- css box-shadow ie6-8
- 敏捷开发绩效管理之十一:如何提高人员可用率?
- mapreduce top K实现
- 单链表的逆置
- 10条网站易用性设计改进技巧
- Unity 一段简单的AI
- sicily 1011. Lenny's Lucky Lotto
- Android单元测试
- JavaScript基础-Array
- 计算机会议排名:Computer Science Conference Rankings 转帖
- jQuery插件开发的模式和结构
- 关于模式对话框与非模式对话框释放资源的小总结
- 一步步学算法(算法题解)---3
- HTC DesireHD G10 完美root