Unity3D⼊门(⼆):碰撞检测
碰撞器由来
1.系统默认会给每个对象(GameObject)添加⼀个碰撞组件(ColliderComponent),⼀些背景对象则可以取消该组件。
2.在unity3d中,能检测碰撞发⽣的⽅式有两种,⼀种是利⽤碰撞器,另⼀种则是利⽤触发器。这两种⽅式的应⽤⾮常⼴泛。为了完整的了解这两种⽅式,我们必须理解以下概念:
(⼀)碰撞器是⼀组件,它包含了很多种类,⽐如:Box Collider,Capsule Collider等,这些碰撞器应⽤的场合不同,但都必须加到GameObjecet⾝上。
(⼆)所谓触发器,只需要在检视⾯板中的碰撞器组件中勾选IsTrigger属性选择框。
(三)在Unity3d中,主要有以下接⼝函数来处理这两种碰撞检测:
触发信息检测:
1.MonoBehaviour.OnTriggerEnter( Collider other )当进⼊触发器
2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器
3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器
碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进⼊碰撞器
2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay( Collision collisionInfo ) 当逗留碰撞器
碰撞使⽤场景
1.给主⾓添加刚体(Rigidbody)组件,并且取消刚体组件的重⼒选项UseGravity。
2.主⾓碰到⼀些物体后会有⼀系列反应。举例,完雷电游戏时,飞机可以获取⼀些 加速球、 能量球,碰到这些球体,飞机⾃⾝属性会有所提⾼
下图:蓝⾊球为“ 加速球”,红⾊球为 能量球,的当飞机接触球体时,属性就会增加
主⾓的脚本代码如下:
using UnityEngine;
using System.Collections;
public class Hero : MonoBehaviour {
private float move_v = 0;//纵向移动距离
private float move_h = 0;//横向移动距离
public float m_speed = 1.5f;//移动速度
public float m_power = 1.0f;//飞机的威⼒能量
private Transform m_transform;
void Start () {
m_transform = ansform;
}
void Update () {
Move();
}
//飞机与物体发⽣碰撞,需要判断碰撞体是什么类型
void OnTriggerEnter(Collider e)
{
if (e.gameObject.tag.CompareTo("tagSpeedBall")==0)
{
Debug.Log("捡到加速球");
m_speed += 5;//速度+2
Destroy(e.gameObject);//销毁加速球
}
if (e.gameObject.tag.CompareTo("tagPowerBall") == 0)
{
Debug.Log("捡到能量球");
m_power += 2;//威⼒+2
Destroy(e.gameObject);//销毁能量球
}
}
//移动⽅法
void Move()
{
/
/向上
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
//移动距离
m_transform.Translate(-Vector3.forward * Time.deltaTime * m_speed);
}
//向下
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
m_transform.Translate(Vector3.forward * Time.deltaTime * m_speed); }
//向左
unity3d入门
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
m_transform.Translate(Vector3.right * Time.deltaTime * m_speed);
}
//向右
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
m_transform.Translate(Vector3.left * Time.deltaTime * m_speed);
m_transform.Translate(Vector3.left * Time.deltaTime * m_speed); }
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论