Unity3D笔记十五 碰撞、移动
碰撞
Collision. [kəˈliʒən] 碰撞;冲突;(意见,看法)的抵触;(政党等的)倾轧
选择一个需要添加碰撞器的游戏对象后
Component->Physics-
Unity一共为对象提供了6
种碰撞器,分别是Box Collider[kəˈlaidə](盒子碰撞器)、Sphere Collider[ˈkæpsju:l](球体碰撞器)、Capsule Collider
(胶囊碰撞器)、Mesh Collider(网格碰撞器)和Wheel Collider(车轮碰撞器)还有一个Terrain Collider
Collider[kəˈlaidə] 相撞;碰撞;冲突;抵触
物理材质
1、Assets- Import Package-Physic Materials
标准资源包中提供了5种常用的物理材质:
1、弹性材质(Bouncy)[ˈbaunsi] adj.快活的;精神的;有弹性的;自大的
2、冰材质(Ice)
3、金属材质(Metal)[ˈmetl] n.金属;金属元素;成色;金色
4、橡胶材质(Rubber)[ˈrʌbə] adj.橡胶制成的
5、木头材质(Wood)。
2、除了可以使用Unity标准资源包中的5款物理材质,也可以自行创建物理材质。创建新物理材质的方法如下,在Project视图中点击“Create”→“Physic Material”菜单项即可
using UnityEngine;
using System.Collections; public class _6_3 : MonoBehaviour
{
/// <summary>
/// 角色控制器对象
/// </summary>
private CharacterController controller = null; /// <summary>
/// 角色移动的速度
/// </summary>
private float moveSpeed = 30.0f; /// <summary>
///角色旋转的速度
/// </summary>
private float rotateSpeed = 3.0f; ////碰撞的游戏对象
private GameObject colliderObj = null;
// Use this for initialization
void Start()
{
//获取角色控制器对象
controller = GetComponent<CharacterController>();
} private void OnGUI()
{
//控制角色旋转
if (GUILayout.RepeatButton("向左旋转"))
{
transform.Rotate(, -rotateSpeed, );
}
if (GUILayout.RepeatButton("向右旋转"))
{
transform.Rotate(, rotateSpeed, );
} #region 移动
//SimpleMove() 只适用于平面中的移动 2 Move()方法适用于所有方向的移动,所以它可以实现游戏对象任意角度的飞行与移动效果。
//在开发中,尽量使用Move()方法来控制角色移动,因为它完全可以取代SimpleMove()方法,并且使用它移动角色更为灵活
#endregion
//控制角色移动 ×必须添加了角色控制器才有效 选择游戏对象Component-Physics-Character Controller
#region 移动
if (GUILayout.RepeatButton("向前移动"))
{
controller.SimpleMove(Vector3.forward * moveSpeed);//其参数为角色移动的方向,只支持x轴与z轴方向的移动
}
if (GUILayout.RepeatButton("向后移动"))
{
controller.SimpleMove(Vector3.back * moveSpeed);
}
if (GUILayout.RepeatButton("向左移动"))
{
controller.SimpleMove(Vector3.left * moveSpeed);
}
if (GUILayout.RepeatButton("向右移动"))
{
controller.SimpleMove(Vector3.right * moveSpeed);
}
if (GUILayout.RepeatButton("Move向右移动-飞了"))
{
controller.Move(Vector3.right * moveSpeed);
}
#endregion #region 飞行
//可以使用transform.TransformDirection()方法得到当前主角移动时面朝的方向
if (GUILayout.RepeatButton("起飞"))
{
transform.Translate(, , );
}
if (GUILayout.RepeatButton("降落"))
{
transform.Translate(, -, );
}
#endregion if (controller.collisionFlags == CollisionFlags.Sides)
{
if (controller)
{
if (colliderObj != null)
{
GUI.color = Color.yellow;
GUI.Label(new Rect(, , , ), "碰撞游戏的对象为:" + colliderObj.name);
}
}
}
} #region 碰撞检测
//角色控制器可感应游戏对象之间的碰撞,检测它们碰撞时,需要调用父类方法OnControllerColliderHit()
void OnControllerColliderHit(ControllerColliderHit hit)
{
//得到碰撞的游戏对象
colliderObj = hit.gameObject;//使用hit.gameObject引用,即可获取角色控制器组件碰撞后的游戏对象
}
#endregion // Update is called once per frame
void Update()
{ }
}
Unity3D笔记十五 碰撞、移动的更多相关文章
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- (C/C++学习笔记) 十五. 构造数据类型
十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...
- (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)
一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...
- Unity3D笔记 愤怒的小鸟<五> 小鸟动画+Unity3D如何设置断点调式
前言:实现小鸟的动画,之前吐槽过js写U3D,就改成了C#来写,没想到遇到问题了. 实现的效果 using UnityEngine; using System.Collections; /// < ...
- MySQL学习笔记十五:优化(2)
一.数据库性能评测关键指标 1.IOPS:每秒处理的IO请求次数,这跟磁盘硬件相关,DBA不能左右,但推荐使用SSD. 2.QPS:每秒查询次数,可以使用show status或mysqladmin ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十五之铭文升级版
铭文一级:[木有笔记] 铭文二级: 第12章 Spark Streaming项目实战 行为日志分析: 1.访问量的统计 2.网站黏性 3.推荐 Python实时产生数据 访问URL->IP信息- ...
- Unity3D笔记十八 GL图像库
1.绘制2D图像的时需要使用GL.LoadOrtho()方法来将图形映射到平面中. 2.所有绘制相关的内容都要写在OnPostRender()方法中. 3.有关GL图像库的脚本需要绑定到Hierarc ...
- angular学习笔记(十五)-module里的'服务'
本篇介绍angular中的模块:module 在笔记(二)http://www.cnblogs.com/liulangmao/p/3711047.html里已经讲到过模块,这篇主要讲模块的 '服务' ...
- Java学习笔记十五:Java中的成员变量和局部变量
Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...
随机推荐
- hibernate 之 sql查询
如果用hibernate执行原生sql进行数据查询可以调用 SQLQuery query = getSession().createSQLQuery(sql); 然后再执行 query.list() ...
- python 导入模块的坑。为什么整个项目能运行,单独运行某个文件模块就报错?多层目录不同文件夹怎么导入?
一些文章介绍了python不同目录怎么导入问题,但py文件运行起点却从来没有文章说过!这是相当重要的!! 这个连接是网上99%的所讲的导入 https://www.cnblogs.com/luoye0 ...
- C#------Aspose的License文件
Aspose官网: https://docs.aspose.com/display/cellsnet/Home 下载地址: http://vdisk.weibo.com/s/uoya0tRiZNf0X ...
- nvm-windows的安装配置
首先建议把你之前安装的node.js的msi版本给卸载掉. 然后下载nvm-windows并按照默认配置一步步安装 由于国外的镜像源下载慢,所以打开C:\Users\dell\AppData\Roam ...
- str.split()与re.split()的区别
str.split(): >>>'hello, world'.split() >>>['hello,','world'] >>>'hello, w ...
- Ansible Playbook 使用变量
如何在 Playbook 中定义并使用变量: vars: - user: "test" # 定义变量 tasks: - name: create user user: name=& ...
- Ajax 分析方法
我们如何查看到 Ajax 请求: 以 https://m.weibo.cn/u/2830678474 这个网页为例,按 F12,加载网页,然后选择资源类型为 XHR 的就可以看到 Ajax 请求了 我 ...
- 2018.8.23几日重新编译OSG+OE+Qt遇到的问题
Qt安装多个版本的时候,注意屏蔽掉不使用的Qt,例如OE中的CMakeLists.txt中的# FIND_PACKAGE(Qt4) 使用以前编译好的libcurl.dll现在出现"无法定位序 ...
- Cesium添加水面
var viewer = new Cesium.Viewer('cesiumContainer');var waterPrimitive = new Cesium.Primitive({ //show ...
- webform的学习(2)
突然回想一下,两周之后放假回家,三周之后重返学习,四周之后就要真正的面对社会,就这样有好多的舍不得在脑海中回旋,但是又是兴奋的想快点拥有自己的小生活,似乎太多的人在说程序的道路甚是艰难,我不知道我的选 ...