游戏开发:玩家控制、武器创建与UDK物理碰撞
立即解锁
发布时间: 2025-08-24 01:29:50 阅读量: 1 订阅数: 3 

### 游戏开发:玩家控制、武器创建与 UDK 物理碰撞
#### 玩家控制器与武器功能添加
在玩家控制器类 `ExampleCh31PC` 的 `SwipeZoneCallback()` 函数中,需要添加相关命令以实现玩家武器的开火和停火功能。当发生触摸事件时,调用 `StartFire(0)` 开始开火;当触摸结束事件发生时,调用 `StopFire(0)` 停止开火。以下是具体代码:
```plaintext
function bool SwipeZoneCallback(MobileInputZone Zone,
float DeltaTime,
int Handle,
EZoneTouchEvent EventType,
Vector2D TouchLocation)
{
local bool retval = true;
if (EventType == ZoneEvent_Touch)
{
WorldInfo.Game.Broadcast(self,"You touched the screen at = "
@ TouchLocation.x @ " , "
@ TouchLocation.y @ ", Zone Touched = "
@ Zone);
// Start Firing pawn's weapon
StartFire(0);
}
else if(EventType == ZoneEvent_Update)
{
}
else if (EventType == ZoneEvent_UnTouch)
{
// Stop Firing Pawn's weapon
StopFire(0);
}
return retval;
}
```
重新编译并使用自定义游戏类型在虚幻编辑器中运行游戏,此时除了虚拟摇杆区域,在屏幕其他任何位置触摸都可以开火。并且可以注意到子弹会从粒子发射器发射出火焰。
#### 第一人称视角武器添加实践
在这个实践中,将创建一个自定义武器并将其放置在第一人称视角中。具体步骤如下:
1. **创建目录**:在默认源目录(如 `C:\UDK\UDK - 2011 - 06\Development\Src`,不同版本 UDK 目录可能不同)下创建新目录 `ExampleCh32`,再在其下创建 `Classes` 目录,将此示例的所有源代码放在该 `Classes` 目录中。
2. **创建武器类**:自定义武器类为 `JazzWeapon2`,它与其他武器的区别在于发射 `JazzBullet2` 类定义的不同类型子弹。以下是 `JazzWeapon2` 类的代码:
```plaintext
class JazzWeapon2 extends Weapon;
defaultproperties
{
Begin Object Class=SkeletalMeshComponent Name=FirstPersonMesh
SkeletalMesh=SkeletalMesh'KismetGame_Assets.Anims.SK_JazzGun'
End Object
Mesh=FirstPersonMesh
Components.Add(FirstPersonMesh);
Begin Object Class=SkeletalMeshComponent Name=PickupMesh
SkeletalMesh=SkeletalMesh'KismetGame_Assets.Anims.SK_JazzGun'
End Object
DroppedPickupMesh=PickupMesh
PickupFactoryMesh=PickupMesh
WeaponFireTypes(0)=EWFT_Projectile
WeaponFireTypes(1)=EWFT_NONE
WeaponProjectiles(0)=class'JazzBullet2'
WeaponProjectiles(1)=class'JazzBullet2'
FiringStatesArray(0)=WeaponFiring
FireInterval(0)=0.25
Spread(0)=0
}
```
3. **创建武器的射弹类**:`JazzBullet2` 类的代码如下,`Explode()` 函数会改变射弹的物理模型,使其击中物体后落到地面;`Init()` 函数会为射弹(石头)设置随机旋转。
```plaintext
class JazzBullet2 extends Projectile;
simulated function Explode(vector HitLocation, vector HitNormal)
{
SetPhysics(Phys_Falling);
}
function Init( Vector Direction )
{
super.Init(Direction);
RandSpin(90000);
}
defaultproperties
{
Begin Object Class=StaticMeshComponent Name=Bullet
StaticMesh=StaticMesh'Castle_Assets.Meshes.SM_RiverRock_01'
Scale3D=(X=0.300000,Y=0.30000,Z=0.3000)
End Object
Components.Add(Bullet)
Begin Object Class=ParticleSystemComponent Name=BulletTrail
Template=ParticleSystem'Castle_Assets.FX.P_FX_Fire_SubUV_01'
End Object
Components.Add(BulletTrail)
MaxSpeed=+05000.000000
Speed=+05000.000000
}
```
4. **创建新的角色类**:新的角色类 `Jazz2Pawn` 在 `AddDefaultInventory()` 函数中使用 `JazzWeapon2` 武器,无需更改 `InventoryManager` 类。以下是 `Jazz2Pawn` 类的代码:
```plaintext
class Jazz2Pawn extends SimplePawn;
var Inventory MainGun;
function AddDefaultInventory()
{
MainGun = InvManager.CreateInventory(class'JazzWeapon2');
MainGun.SetHidden(false);
Weapon(MainGun).FireOffset = vect(0,0,-70);
}
defaultproperties
{
InventoryManagerClass=class'
```
0
0
复制全文
相关推荐









