环境:Unity5.4.0f3 Personal

1.新建一个3D的Unity工程。

2.菜单 "GameObject" - "3D Object",选择"Cube" 和 "Capsule"两个物体。在Hierarchy的面板中,拖拽Capsule到Cube的物体上。Cube为Capsule的子组件。

3.Hierarhy面板中,选择Cube,在Inspector面板的Transform选项卡,更改两个属性:Position和Scale。Cube重命名为"Visor"。

  • Set the Visor GameObject’s Scale to (0.95, 0.25, 0.5).
  • Set the Visor GameObject’s Position to: (0.0, 0.5, 0.24)

  在Project面板,右键Assets目录,"Create" - "Material" ,创建一个材质,命名为Black。选中,在Inspector面板的"Shader "- "Unit/Color"中,更改材质颜色为黑色。拖拽到Hierarchy面板的Cube对象上。

4.拖拽Hierarchy面板中的Capsule到Project面板的Assets目录下,生成一个预制件,重命名为Player,模仿玩家对象。删除Hierarchy面板的Cube。

5.拖拽Player预制件到Hierarchy面板中两次,分别命名为"Player1"和"Player2"。

6.在Assets目录中,新建一个scripts文件夹,右键"Create" - "C# Scripts ",新建两个脚本文件,分别命名为"Player1"和"Player2"。 两个脚本的代码如下:

 using UnityEngine;
using System.Collections; public class Player1 : MonoBehaviour { public static bool selected = true;
public int translateSpeed=;
public int rotateSpeed = ; // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.P)) {
selected = !selected;
}
} void OnGUI(){
if (selected) {
// turn left
if (Input.GetKey (KeyCode.A)) {
transform.Translate (Vector3.left * Time.deltaTime);
} // turn right
if (Input.GetKey (KeyCode.D)) {
transform.Translate (Vector3.right * Time.deltaTime);
} // turn forward
if (Input.GetKey (KeyCode.W)) {
transform.Translate (Vector3.forward * Time.deltaTime);
} // turn backward
if (Input.GetKey (KeyCode.S)) {
transform.Translate (Vector3.back * Time.deltaTime);
} // turn up
if (Input.GetKey (KeyCode.Q)) {
transform.Translate (Vector3.up * Time.deltaTime);
} // turn down
if (Input.GetKey (KeyCode.E)) {
transform.Translate (Vector3.down * Time.deltaTime);
} // rotate x axis anticlockwise
if (Input.GetKey (KeyCode.H)) {
transform.Rotate (Vector3.left * Time.deltaTime * rotateSpeed);
} // rotate x axis clockwise
if (Input.GetKey (KeyCode.K)) {
transform.Rotate (Vector3.right * Time.deltaTime * rotateSpeed);
} // rotate z axis clockwise
if (Input.GetKey (KeyCode.U)) {
transform.Rotate (Vector3.forward * Time.deltaTime * rotateSpeed);
} // rotate z axis anticlockwise
if (Input.GetKey (KeyCode.J)) {
transform.Rotate (Vector3.back * Time.deltaTime * rotateSpeed);
} // rotate y axis clockwise
if (Input.GetKey (KeyCode.Y)) {
transform.Rotate (Vector3.up * Time.deltaTime * rotateSpeed);
} // rotate y axis anticlokcwise
if (Input.GetKey (KeyCode.I)) {
transform.Rotate (Vector3.down * Time.deltaTime * rotateSpeed);
}
}
}
}

Player1

 using UnityEngine;
using System.Collections; public class Player2 : MonoBehaviour { public int translateSpeed=;
public int rotateSpeed = ; // Use this for initialization
void Start () { } // Update is called once per frame
void Update () { } void OnGUI(){
if (!Player1.selected) {
// turn left : x- axis
if (Input.GetKey (KeyCode.A)) {
transform.Translate (Vector3.left * Time.deltaTime);
} // turn right : x+ axis
if (Input.GetKey (KeyCode.D)) {
transform.Translate (Vector3.right * Time.deltaTime);
} // turn forward : z+ axis
if (Input.GetKey (KeyCode.W)) {
transform.Translate (Vector3.forward * Time.deltaTime);
} // turn backward : z- axis
if (Input.GetKey (KeyCode.S)) {
transform.Translate (Vector3.back * Time.deltaTime);
} // turn up : y+ axis
if (Input.GetKey (KeyCode.Q)) {
transform.Translate (Vector3.up * Time.deltaTime);
} // turn down : y- axis
if (Input.GetKey (KeyCode.E)) {
transform.Translate (Vector3.down * Time.deltaTime);
} // rotate x axis anticlockwise
if (Input.GetKey (KeyCode.H)) {
transform.Rotate (Vector3.left * Time.deltaTime * rotateSpeed);
} // rotate x axis clockwise
if (Input.GetKey (KeyCode.K)) {
transform.Rotate (Vector3.right * Time.deltaTime * rotateSpeed);
} // rotate z axis clockwise
if (Input.GetKey (KeyCode.U)) {
transform.Rotate (Vector3.forward * Time.deltaTime * rotateSpeed);
} // rotate z axis anticlockwise
if (Input.GetKey (KeyCode.J)) {
transform.Rotate (Vector3.back * Time.deltaTime * rotateSpeed);
} // rotate y axis clockwise
if (Input.GetKey (KeyCode.Y)) {
transform.Rotate (Vector3.up * Time.deltaTime * rotateSpeed);
} // rotate y axis anticlokcwise
if (Input.GetKey (KeyCode.I)) {
transform.Rotate (Vector3.down * Time.deltaTime * rotateSpeed);
}
} }
}

Player2

编辑完两个脚本后,关闭回到unity。

7.分别拖拽两个脚本"Player1"和"Player2"到Hierarchy的对应物体Player1和Player2上。

8.分别选择Hierarhy面板上的Player1和Player2物体,选择菜单 "Component" - "Physical" -- "RigidBody",为物体增加碰撞属性。

9.保存,运行。

"ADWSQE"  -- "左右前后上下"

"P"  -- 控制是Player1还是Player2接收按键的输入。

"HKUJYI"  --控制绕轴旋转的方向。

10.运行截图:

Unity 碰撞的例子的更多相关文章

  1. Unity 碰撞器

    Unity引擎的碰撞器 常见的有Box Collider,Capsule Collider等等 IsTrigger(触发器) 在这些碰撞器中有一个属性 Is Trigger(是否使用触发器) 触发器事 ...

  2. unity碰撞组件、刚体组件

    游戏导入标准资源包“Character Controllers”后可以为游戏对象添加 character(角色控制器)组件: 添加角色控制器组建以后可以控制游戏对象移动: 角色控制器组件因为与碰撞组件 ...

  3. 关于unity碰撞检测器的用法

    今天已经是我第三次忘记了这两种碰撞检测的用法,混淆了.特意整理一下 首先把今天要解决涉及到的东西列出来 碰撞方法: public void OnTriggerEnter(Collider other) ...

  4. Unity碰撞器触发关系测试

    本文刚体有关的内容不再赘述,主要测试碰撞器和触发器的消息关系. 刚体在这篇有测试:U3D刚体测试1-刚体非刚体物体非Kinematic等之间的碰撞关系 碰撞器测试结果: 1.A对象为Collider, ...

  5. Unity 碰撞器和触发器的理解

    要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...

  6. unity插件开发——一个例子:简单的svn集成

    在unity开发过程中,通常我们习惯性地在Windows操作系统下使用svn进行版本管理,而每次提交更新,都需要回到文件夹下的这种操作让人无法忍受.是不是可以集成svn到unity中呢?查了一圈uni ...

  7. Unity Shader基本例子

    Unity中,对于一个物体我们想要改变其的外观,就需要给其增加一个材质,即Matiral 一般的Matiral采用的是标准的Shader,而标准的Shader并不是最好的渲染物体表明的效果,那么我们就 ...

  8. Unity碰撞和触发的区别

    碰撞的必要条件: 2个都有Collider,且至少有一个刚体.带刚体的身上会检测OnCollision事件,stay就是2个一直在碰着. 触发的必要条件: 至少有一个碰撞器勾选了IsTrigger,至 ...

  9. Unity碰撞消息(OnCollisionXXXX)和触发消息(OnTriggerXXXX)的调用情境

    MonoBehaviour中的消息非常多,一共有62个! 除了必须关注的脚本生命周期的一系列函数外,还有其他两组比较常混淆的消息:碰撞和触发. 按3D和2D物体区分,又分为碰撞:Collision.C ...

随机推荐

  1. IT培训行业揭秘(一)

    最近一个多月来,身边有很多朋友问我,我家孩子明年就要大学毕业了,现在工作还没有着落,最近孩子回家经常和我说,他们学校最近来了很多IT培训班,让同学们参加培训,然后各个培训班动辄拿出往届他们的培训学生赚 ...

  2. 【WPF】 通过FarPoint显示Excel

    1.FarPoint 只支持winform,在Wpf中要引用:WindowsFormsIntegration.dll2.*.xaml文件引用    xmlns:wfi ="clr-names ...

  3. FFmpeg 转码和截屏

    转码 (flv转码为MP4,libx264是MP4编码格式 , -b 3000k是码率,比特率) ffmpeg -i /home/ghr/mp4/mp4.flv -vcodec libx264 -b ...

  4. 移动端开发viewport深入理解(转)

    一.viewport的概念   移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那一块区域,就是浏览器上用来显示网页的那部分区域,但viewport不局限于浏览器可视区域 的大小,它 ...

  5. mvn-打jar运行包(含环境变量配置)

    前沿条件 maven下载:http://maven.apache.org/download.cgi 配置环境变量 MAVEN_HOME= D:\Softwares\apache-maven-3.2.2 ...

  6. Django进阶(三)

    ORM 众所周知有很多不同的数据库系统,并且其中的大部分系统都包含Python接口,能够让我们更好的利用它们的功能,而这些系统唯一的缺点就是需要你了解SQL,如果你是一个更愿意操纵Python对象,而 ...

  7. json 除去转义字符以及查看json错误

    $param=stripslashes($_POST['param']); try{ //$param包含了文档指定的信息,...这里保存您的快递信息,$param的格式与订阅时指定的格式一致 $ar ...

  8. matlab中pcolorh函数作用

    就是说X,Y是用来定位的,C是用来填充颜色的.参数C要求至少是一个矩阵,而参数X,Y可以是向量,也可以是矩阵.当X,Y是向量时,X与C的行对应,Y与C的列对应,因此向量X与Y的维数必须要求与C的行与列 ...

  9. 【bzoj1004】 HNOI2008—Cards

    http://www.lydsy.com/JudgeOnline/problem.php?id=1004 (题目链接) 题意 n张卡片,染成3种颜色,每种颜色只能染固定张数.给出一些洗牌方案,问染色方 ...

  10. 将上传图片转成base64(转)

    效果如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"><titl ...