注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mississippi的博客

学习使人进步

 
 
 

日志

 
 

UDK:模拟池中鱼——Actor  

2013-01-07 17:16:40|  分类: UnrealScript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

设计思路:在水池内放置若干个定位点(FishMoveNode类),让“鱼”(FishActor类)在几个定位点中随机选择一个作为移动目标,然后,利用Tick事件让“鱼”一边旋转方向。一边向此位置“游”动,当达此目标时,再重新选择一个新的移动目标……周而复始,自动完成游弋动作。

 

一、FishMoveNode类

 

class FishMoveNode extends Actor placeable;

 

var() Const EditConst DrawSphereComponent RadiusComponent;

var float Radius;

function PreBeginPlay()

{      

         Radius = RadiusComponent.SphereRadius;

         super.PreBeginPlay();

}

defaultproperties

{

         Begin Object Class=DrawSphereComponent Name=MyDSC

         End Object

         RadiusComponent=MyDSC

         Components.Add(MyDSC)

}

 

二、FishActor类

 

class FishActor extends Actor placeable;

 

var() array< FishMoveNode > MoveNodes;

var() StaticMeshComponent FishMesh;

var() float MinSize,MaxSize;

var() float Speed;

var Rotator TargetRotation;

var Vector TargetLocation;

 

event PostBeginPlay()

{

         super.PostBeginPlay();

         SetDrawScale(RandRange(MinSize, MaxSize));

         GetNextTarget();

}

 

function GetNextTarget()

{

         local int Idx;

         local Vector Offset;

        

         Idx = Rand(MoveNodes.Length);    

         Offset = Normal(VRand()) * MoveNodes[Idx].Radius;

         TargetLocation = MoveNodes[Idx].Location + Offset;

         TargetRotation = Rotator(TargetLocation - Location);

         Velocity = Normal(TargetLocation - Location) * Speed * DrawScale;

}

 

event Tick(float d)

{

         RotationRate = TargetRotation - Rotation;

         if(VSize(Location - TargetLocation) < 10.0)

         {

                   GetNextTarget();

         }

}

 

event HitWall( vector HitNormal, actor Wall, PrimitiveComponent WallComp )

{

         GetNextTarget();

}

 

event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal )

{

         if(!Other.IsA('FishActor'))

         {

                   GetNextTarget();

         }

}

 

defaultproperties

{

         Begin Object Class=DynamicLightEnvironmentComponent Name=MyDLEC

         End Object

         Components.Add(MyDLEC)

        

         Begin Object Class=StaticMeshComponent Name=MySMC

                   StaticMesh=StaticMesh'Chapter_06_Functions.ClownFish'

                   LightEnvironment=MyDLEC

         End Object

         Components.Add(MySMC)

         FishMesh=MySMC

         CollisionComponent=MySMC;

 

         Physics=PHYS_Projectile

         bCollideActors=true

         bCollideWorld=true

         bStatic=false

         bMoveable=true

        

         MinSize=0.2

         MaxSize=0.8

         Speed=80

}

 

三、场景效果(版本:UDK-2012-10)

UDK:模拟池中鱼——Actor - mississi - Mississippi的博客

 

UDK:模拟池中鱼——Actor - mississi - Mississippi的博客

 

 

  评论这张
 
阅读(1396)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017