12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 5111|回复: 10
打印 上一主题 下一主题

[教程] 如何使用Unity制作虚拟导览(九)

[复制链接]

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2014-3-19 00:13:45 |只看该作者 |倒序浏览
如何使用Unity制作虚拟导览(一)
http://www.narkii.com/club/thread-316986-1.html

如何使用Unity制作虚拟导览(二)
http://www.narkii.com/club/thread-316987-1.html

如何使用Unity制作虚拟导览(三)
http://www.narkii.com/club/thread-317011-1.html

如何使用Unity制作虚拟导览(四)
http://www.narkii.com/club/thread-317013-1.html

如何使用Unity制作虚拟导览(五)
http://www.narkii.com/club/thread-317451-1.html

如何使用Unity制作虚拟导览(六)
http://www.narkii.com/club/thread-317503-1.html

如何使用Unity制作虚拟导览(七)
http://www.narkii.com/club/thread-317769-1.html

如何使用Unity制作虚拟导览(八)
http://www.narkii.com/club/thread-317865-1.html

在这个教程里面,我们将要介绍交互功能的制作,例如角色走到室内时触发房门的开启,或是走入个电梯后的上升动作,而这些工作就必须交给程序来完成,以下是模拟一个角色走到触发区域时自动开门,离开触发区后关门的示范:

首先创建一个Plane,Position设置为(0,0,0),然后再增加一个Cube,将其名称更换为DoorLeaf,Position设置为 X=1, Y=1.5, Z=0 ,Scale 设置为X=2, Y=3,Z=0.1。

1.png

使用Assets > Create > C# Script 创建一个C#脚本,将其名称设置为rotateObject,双击后打开MonoDevelop进行编辑,输入以下的代码:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class rotateObject : MonoBehaviour {

  4. void Update () {
  5.         this.transform.rotation = Quaternion.Euler (0,90,0);
  6. }
复制代码
在Update里面我们使用了Quaternions Euler用来指定Y轴的旋转角度为90度,保存后将这个脚本添加到DoorLeaf的物件,然后按下播放,再按下停止看看效果。

2.png

我们会发现两个问题,一个是门会突然的打开,在停止后就回到原来的位置,另外是门的轴心在中央,这使得旋转的方式是以门的正中央为基准,显然这个不是我们需要的结果,那么应该如何修正呢?

创建一个空的Game Object,将其名称更改为Hinge,Position与Rotation皆设置为0,作用是让门的轴心位置以这个GameObject为基准点。

3.png

确认Hinge的轴心为Pivot模式,然后将DoorLeaf拖曳到Hinge成为子物件,如图所示,现在门的轴心换到了左下角的位置。

4.png

5.png

轴心的修改除了用上述的方法,也可以使用功能更强大的插件来完成:
Edit Pivot 1.3 - 任意修改轴心的插件
http://www.narkii.com/club/thread-300346-1.html

将原本在DoorLeaf上的脚本删除,再将rotateObject.cs脚本添加到Hinge,按下播放测试效果:

6.png
7.png

现在门的转动轴心没问题了,接下来就是让门的转动更为合理,我们需要一个角色的模拟,
使用第一人称的物件,让这个角色走到触发区后,门就以旋转方式开启,角色离开后门就关闭。


在原来的脚本里面我们使用了很简单的代码让门以Y轴转动90度,现在需要添加OnTriggerEntger与OnTriggerExit这两个事件来让角色进行触发与离开,具体的操作如下:

增加一个Cube在场景内,Position设置为X=1, Y=1.5, Z=0 ,scale设置为 X=2, Y=3, and Z=6,将其名称更换为DoorTrigger。

Unity内建的Cube已经具备了Box Collider,勾选Is Trigger使这个Cube具备触发器的功能,然后取消Mesh Renderer的作用,如图所示,画面中的绿色物件即为我们设置的触发区域。

8.png

为了物件的管理方便,新增一个空的Game Object,名称更换为Door,将Position设置为(0,0,0),
然后将DoorTrigger与Hinge拖曳到Door成为子物件。

9.png

将Hinge上的rotateObject脚本移除,再打开这个脚本进行修改:
  1. using UnityEngine;
  2. using System.Collections;
  3. public class rotateObject : MonoBehaviour {

  4. public GameObject Target;  //指定GameObject
  5. public float Angle = 90.0f;  // 设置门的旋转角度

  6. void OnTriggerEnter(Collider other) {  //其他的物体进入触发区的动作l
  7.       Target.transform.rotation = Quaternion.Euler (0,Angle,0);
  8. }
  9. void OnTriggerExit(Collider other) {  //物体离开触发区的动作
  10.       Target.transform.rotation = Quaternion.Euler (0,0,0);
  11. }
  12. }
复制代码
保存后将脚本添加到DoorTrigger,接着将Hinge添加到Traget的栏位,在进行测试前,我们需要导入第一人称的角色来配合触发区的使用。

如图所示,当角色进到触发区时,门就自动的开启90度,角色退出触发区后,门则旋转回原来的位置。

10.png
11.png

测试后发现门的打开与关闭的方式过于突然,所以我们将要的加入一个easing的方式来修正门的旋转动作,

脚本里面我们加入了以下的代码:
  1. private float targetAngleY = 0.0f;  //预计的开启角度
  2. private float currentAngleY = 0.0f;  //目前的角度
  3. private float easing = 0.05f;  //推进的微量速度
复制代码
将rotation的代码移到Update()里面,再添加以下的代码:
  1. void Update() {
  2.   currentAngleY += (targetAngleY-currentAngleY) * easing;
  3.       Target.transform.rotation =
  4. Quaternion.Euler (0.0f, currentAngleY, 0.0f);
  5. }

  6. void OnTriggerEnter(Collider other) {
  7.   targetAngleY = Angle;
  8.       currentAngleY = 0.0f;
  9. }

  10. void OnTriggerExit(Collider other) {
  11.   currentAngleY = Angle;
  12.       targetAngleY = 0.0f;
  13. }
复制代码
Ok,保存后再进行测试,没问题了,角色在进入与退出触发区,门的开关动作就能模拟出缓冲的效果,也能合乎场景里面的设计需求,而这个门复制到别的位置后也是采用相同的脚本即可。

更多的技术分享与讨论请加入:
纳金网3dsmax技术交流群 - 284146304
纳金网Unity技术交流群 - 218689657

rotateObject.zip

467 Bytes, 下载次数: 17

已有 1 人评分纳金币 收起 理由
传说的落叶 + 10

总评分: 纳金币 + 10   查看全部评分

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-3-19 01:01:14 |只看该作者
Thanks fore this tutorials~!!!!
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-3-19 01:12:59 |只看该作者
Thanks for sharing !
回复

使用道具 举报

1

主题

1

听众

1804

积分

助理设计师

Rank: 4

纳金币
1006
精华
0

活跃会员

地板
发表于 2014-3-19 09:21:01 |只看该作者
Thanks for sharing !
回复

使用道具 举报

17

主题

7

听众

3710

积分

中级设计师

Rank: 5Rank: 5

纳金币
775
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2014-3-19 11:11:53 |只看该作者
支持原创好文章。
回复

使用道具 举报

2

主题

1

听众

744

积分

初级设计师

Rank: 3Rank: 3

纳金币
483
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2014-3-19 13:42:50 |只看该作者
DDDDDDDDDDDDDDDD
回复

使用道具 举报

2

主题

7

听众

5583

积分

高级设计师

Rank: 6Rank: 6

纳金币
87
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2014-3-19 13:46:32 |只看该作者
Thanks for sharing!
回复

使用道具 举报

0

主题

2

听众

620

积分

初级设计师

Rank: 3Rank: 3

纳金币
0
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2014-3-25 14:30:23 |只看该作者
谢谢分享
回复

使用道具 举报

0

主题

1

听众

74

积分

设计初学者

Rank: 1

纳金币
35
精华
0

活跃会员 灌水之王

9#
发表于 2014-4-3 17:18:23 |只看该作者
这个牛啊,谢谢楼主分享了
回复

使用道具 举报

0

主题

1

听众

52

积分

设计初学者

Rank: 1

纳金币
0
精华
0
10#
发表于 2014-4-21 16:14:27 |只看该作者
学习了!
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-1 07:08 , Processed in 0.104022 second(s), 39 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部