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中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...
随机推荐
- Android Material Design控件学习(二)——NavigationView的学习和使用
前言 上次我们学习了TabLayout的用法,今天我们继续学习MaterialDesign(简称MD)控件--NavigationView. 正如其名,NavigationView,导航View.一般 ...
- CSS 文本缩进,行间距
文本缩进:text-indent:2.0em; 行间距:line-height:1.5em;
- 超分辨率论文CVPR-Kai Zhang
深度学习与传统方法结合的超分辨率:Kai Zhang 1. (CVPR, 2019) Deep Plug-and-Play Super-Resolution for Arbitrary https:/ ...
- Bootstrap——网站添加字体图标
@font-face { font-family: 'itcast'; src: url('../font/MiFie-Web-Font.eot') format('embedded-opentype ...
- mysql中如何查看某个日期所在的周一是几号?某个日期所在的一周开始时间是几号?
需求描述: 在编写SQL的时候,有这么个需求,就是要查出来某个日期所在的周一是几号,进行了测试,在此进行记录下. 测试过程: 议题:查看某个日期所在的周一是几号 分析:如果某个日期是周一,那么加上整数 ...
- feed流拉取,读扩散,究竟是啥?
from:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961214&idx=1&sn=5e80ad6f2 ...
- 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...
- python爬虫系列:做一个简单的动态代理池
自动 1.设置动态的user agent import urllib.request as ure import urllib.parse as upa import random from bs4 ...
- 判断元素是否存时,使用isset会比in_array快得多
情境 有时候,我们需要判断一个元素是否存在于已有数据中(以此来获得非重复值),这时候,使用isset来判断会比in_array快得多很多!! 测试 1)准备测试数据 $exists_a = []; $ ...
- thinkjs+swagger Editor
一直很好奇专门写接口同事的工作,于是趁着手边工作中的闲暇时间,特地看看神奇的接口文档怎么摆弄. 总览: 这是基于thinkjs(3.0),使用swagger editor编写,实现功能性测试的接口文档 ...