[unity] 第一人称视角的实现

做一个第一人称视角的实现,并走动跳起

操作:
W[上] S[下] A[左] D[右]
+[速度加快] -[速度减慢]
鼠标控制方向


新建一项目,然后新建一地形,
[img]http://dl.iteye.com/upload/attachment/0080/3064/61bd1773-a59c-3c60-b7b0-3d52f8610e47.jpg[/img]

然后建站天空,先导入资源
[img]http://dl.iteye.com/upload/attachment/0080/3066/d07f26fe-f81b-3cb2-b2b5-0709df21d057.jpg[/img]

选择菜单上的Edit -> Render Settings
[img]http://dl.iteye.com/upload/attachment/0080/3070/3dda6142-8f43-38a3-a36b-ca61db78b462.jpg[/img]
找到右面Skybox Material打开这个选项
[img]http://dl.iteye.com/upload/attachment/0080/3079/7d76be3d-d008-3b89-8bc3-a86e78f01fa5.jpg[/img]
选择一个合适的天空背景。

如果看不到效果,可点击下面选项来显示天空
[img]http://dl.iteye.com/upload/attachment/0080/3081/7ae51636-fc85-3224-920c-d2e2abae2967.jpg[/img]

Assets->Import Package->Terrain Assets导入陆地小草之类的资源
再导入Assets->Import Package->Character Controllers资源,此资源下有鼠标控制方向

设置陆地
[img]http://dl.iteye.com/upload/attachment/0080/3091/21c03bff-5731-3790-8250-dc9d3c5d9b92.jpg[/img]
选择好点添加
[img]http://dl.iteye.com/upload/attachment/0080/3099/3dfef686-7164-3d6a-90ce-2524b89a5a28.jpg[/img]
把需要的素材都添加进来
[img]http://dl.iteye.com/upload/attachment/0080/3101/4a9e8a9f-6410-3048-a8be-798399161860.jpg[/img]
设置的第一个就是陆地的背景

这里看起来是比较暗的,需要设置一光源
从菜单中选择GameObject->Create other->Directional light创建一光源,设置好方向跟位置

然后设置一些山脉
[img]http://dl.iteye.com/upload/attachment/0080/3120/398d1aaf-f229-3e45-9513-03f376fa46d0.jpg[/img]
然后给山脉上背景
[img]http://dl.iteye.com/upload/attachment/0080/3124/3085fafb-fa03-3ee8-93d8-9d5ff120e4a4.jpg[/img]

效果如图:
[img]http://dl.iteye.com/upload/attachment/0080/3128/749fe480-b52b-3830-a2af-1191d0bda22d.jpg[/img]

选择Main Camera,点菜单Component->Camera-Control->Mouse Look
然后再添加建FPSWalker.js,如下:
[img]http://dl.iteye.com/upload/attachment/0080/3130/5705d099-8310-3313-bc57-e84758eab1e6.jpg[/img]

var speed = 6.0;
var jumpSpeed = 8.0;
var gravity = 20.0;
var e:Vector3;

private var moveDirection = Vector3.zero;
private var grounded : boolean = false;

function FixedUpdate() {
if(Input.GetKey(KeyCode.KeypadPlus)||Input.GetKey(KeyCode.Equals)){
speed+=0.2;
}
if(Input.GetKey(KeyCode.KeypadMinus)||Input.GetKey(KeyCode.Minus)){
if(speed>0){
speed-=0.2;
}else{speed=0;}
}
if (grounded) {
// We are grounded, so recalculate movedirection directly from axes
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;

if (Input.GetButton("Jump")) {
moveDirection.y = jumpSpeed;
}
}

// Apply gravity
moveDirection.y -= gravity * Time.deltaTime;

// Move the controller
var controller : CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
grounded = (flags & CollisionFlags.CollidedBelow) != 0;

var camera : Camera = GameObject.Find("Main Camera").GetComponent(Camera);
if(Input.GetKey(KeyCode.RightBracket)){
if(camera.fieldOfView<90){
camera.fieldOfView+=0.5;
}
}
if(Input.GetKey(KeyCode.LeftBracket)){
if(camera.fieldOfView>60){
camera.fieldOfView-=0.5;
}else {camera.fieldOfView=60;}
}
}

@script RequireComponent(CharacterController)


然后选择Main Camera,把刚才的FPSWalker.js拖拽到右边窗口,如下:
[img]http://dl.iteye.com/upload/attachment/0080/3134/b26fdc4a-5e8f-33d9-9565-9870086b1513.jpg[/img]

保存,运行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值