虚幻引擎 3 中供玩家使用的相机系统由三个主要类组成:Camera、Pawn 和 PlayerController。这些类都会交互以控制位置、旋转量以及任何其他在游戏过程中应该用于玩家相机的特效。
PlayerController 有一个对被使用的 Camera 以及被控制的 Pawn 的引用。PlayerController 会接收玩家的输入数据并将其用于更新它正在控制的 Pawn 的位置和旋转。默认情况下,Camera 会将其更新传递给 Pawn,它反过来会更新相机的位置和旋转。
通过修改这些类中的一个或多个及其交互方式,可以将玩家的相机设置为使用任何适合于您正在制作的游戏类型的视角向玩家显示这个游戏世界。默认情况下,玩家的相机会使用第一人称,并提供可以将其触发为一个第三人称肩后镜头视角的选项。可以轻松地将它改为自上而下视角、等角视图、横向卷轴视角或任何其他您的游戏可能需要的视图。
上面说了Vector
在空间中的一个唯一的三维点或者向量,具有X、 Y、Z分量。
XYZ是什么?读过书的都知道XYZ轴(没文化的估计不会来做游戏了)
图画的实在不好看.....Vector的位置如图所示
计算世界原点o到vector的位置可以用公式
根号(X平方+Y平方+Z平方)
说的那么麻烦 其实可以直接用虚幻语言定义好的Vsize
function PostBeginPlay()
{
//DemoLocation.Z=300.0;
//SetLocation(Location+DemoLocation);
SetLocation(Location+vect(30,20,100));
`log("vector:"@Vsize(Location));
}
如果要取两只ACTOR的距离,可以用
距离=VSize(A.location-B.location)
也可以B-A
(扯谈一下,COD等类型游戏的目标点寻路显示距离)
先来看一下我的代码
class MyUSGame extends actor
placeable;
function PostBeginPlay()
{
SetLocation(Location+vect(30,20,100));
SetRotation(Rotation+rot(100,100,3000));
`log("vector:"@Vsize(Location));
`log("rotation:"@rotation);
}
defaultproperties
{
Begin Object class="SpriteComponent" Name=flag
Sprite=Texture2D'EditorResources.flag1'
End Object
Components.Add(flag)
//加个箭头 好辨认
begin object class="arrowcomponent" name=ac
end object
Components.Add(ac)
}
这样的时候是这样的
在编辑器里转个几十度
function PostBeginPlay()
{
`log("rotation:"@rotation);
}
明明转了76度可为什么有这么高的度数?
这就涉及到一个单位
在虚幻单位中
360度=65536
90度=16384
1度~=182.0444
不服口算看我转的这个量是不是等于这个数
Rotation几个值的旋转方向
我自定义了一个UDNPlayerController类,class UDNPlayerController extends UDKPlayerController。其中有两条语句,就是取得玩家鼠标输入的旋转,如下:
DeltaRot.Yaw=PlayerInput.aTurn;
DeltaRot.Pitch= PlayerInput.aLookUp;
第一条语句可以执行,即可以左右旋转;但第二条语句没有任何效果,即无法上下旋转,请我是怎么回事呢?