您的位置:首页 > 移动开发 > Unity3D

Unity3.X 笔记01

2016-05-11 10:28 573 查看
碰撞检测的三种方法:

碰撞器检测

在门和玩家分别设置碰撞器

使用角色控制器碰撞器 函数: OnControllerColliderHit()

这个碰撞检测函数包含角色控制器组件,它的唯一参数hit是一个ControllerColliderHit类型变量,通过使用hit包含的信息,来获知玩家和哪一个物体发生了碰撞。

步骤:

1.给门添加box_collider, 设置门的tag为 playerDoor

2.角色控制器上增加脚本,在脚本中添加变量

private bool  doorIsOpen;
private  float doorTimer=0.0f;
public  float door openTime = 3.0f;
public  AudioClip  doorOpenSound, doorShutSound;


3.检测hit里的碰撞信息 和 门的开关状态, 执行方法OpenDoor()

void OnControllerColliderHit(ControllerColliderHit  hit)
{
if(hit.gameObject.tag == "playerDoor" && doorIsOpen == false)
{
currentDoor = hit.gameObject;
OpenDoor(currentDoor);
}
}


4.定义OpenDoor方法: 更改门的状态,播放开门动画,播放开门声音

void OpenDoor(GameObject door)
{
doorIsOpen = true;
door.GetComponent<AudioSource>().PlayOneShot(doorOpenSound);
door.transform.parent.GetComponent<Animation>().Play("doorOpen");
}


5.在update方法中设置门自动关闭

void Update()
{
if(doorIsOpen)
{
doorTimer += Time.deltaTime;
if(doorTimer > doorOpenTime)
{
ShutDoor(currentDoor);
}
}
}


6.定义ShutDoor方法

void ShutDoor(GameObject door)
{
doorIsOpen = false;
door.GetComponent<AudioSource>().PlayOneShot(doorShutSound);
door.transform.parent.GetComponent<Animation>().Play("doorShut");
}


*Audio Source组件的引用

4个函数:Play() Stop() Pause() PlayOneShot()

音频文件的类: AudioClip

AudioClip doorOpenSound;
door.GetComponent<AudioSource>().PlayOneShot(doorOpenSound);


音频文件的赋值:将音频文件拖动到公有变量DoorOpenSound上*

光线投射

将门的动画管理,声音管理脚本放在门上 DoorManager

将光线投射检测脚本放在角色上 PlayerCollisions

一旦角色检测到约定范围内的光线碰撞,通过SendMessage函数直接调用门脚本中的doorcheck函数

Physics.Raycast()函数

void Update()
{
RaycastHit hit;

if(Physics.Raycast(transform.postion, transform.forward, out hit, 3))
{
if(hit.collider.gameObject.tag == "playerDoor")
{
currentDoor = hit.collider.gameObject;
currentDoor.SendMessage("DoorCheck");
}
}
}


触发器

在门的父物体上添加碰撞器,设置成trigger(触发模式)检测玩家是否进入触发区域。TriggerZone脚本设置在door的父物体上。

void OnTriggerEnter(Collider col)
{
if(col.gameObject.tag== "Player")
{
transform.FindChild("door").SendMessage("DoorCheck");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: