Unity 碰撞的例子

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"。 两个脚本的代码如下:

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class Player1 : MonoBehaviour {
 5
 6     public static bool selected = true;
 7     public int translateSpeed=1;
 8     public int rotateSpeed = 10;
 9
10     // Use this for initialization
11     void Start () {
12
13     }
14
15     // Update is called once per frame
16     void Update () {
17         if (Input.GetKeyDown (KeyCode.P)) {
18             selected = !selected;
19         }
20     }
21
22     void OnGUI(){
23         if (selected) {
24             // turn left
25             if (Input.GetKey (KeyCode.A)) {
26                 transform.Translate (Vector3.left * Time.deltaTime);
27             }
28
29             // turn right
30             if (Input.GetKey (KeyCode.D)) {
31                 transform.Translate (Vector3.right * Time.deltaTime);
32             }
33
34             // turn forward
35             if (Input.GetKey (KeyCode.W)) {
36                 transform.Translate (Vector3.forward * Time.deltaTime);
37             }
38
39             // turn backward
40             if (Input.GetKey (KeyCode.S)) {
41                 transform.Translate (Vector3.back * Time.deltaTime);
42             }
43
44             // turn up
45             if (Input.GetKey (KeyCode.Q)) {
46                 transform.Translate (Vector3.up * Time.deltaTime);
47             }
48
49             // turn down
50             if (Input.GetKey (KeyCode.E)) {
51                 transform.Translate (Vector3.down * Time.deltaTime);
52             }
53
54             // rotate x axis anticlockwise
55             if (Input.GetKey (KeyCode.H)) {
56                 transform.Rotate (Vector3.left * Time.deltaTime * rotateSpeed);
57             }
58
59             // rotate x axis clockwise
60             if (Input.GetKey (KeyCode.K)) {
61                 transform.Rotate (Vector3.right * Time.deltaTime * rotateSpeed);
62             }
63
64             // rotate z axis clockwise
65             if (Input.GetKey (KeyCode.U)) {
66                 transform.Rotate (Vector3.forward * Time.deltaTime * rotateSpeed);
67             }
68
69             // rotate z axis anticlockwise
70             if (Input.GetKey (KeyCode.J)) {
71                 transform.Rotate (Vector3.back * Time.deltaTime * rotateSpeed);
72             }
73
74             // rotate y axis clockwise
75             if (Input.GetKey (KeyCode.Y)) {
76                 transform.Rotate (Vector3.up * Time.deltaTime * rotateSpeed);
77             }
78
79             // rotate y axis anticlokcwise
80             if (Input.GetKey (KeyCode.I)) {
81                 transform.Rotate (Vector3.down * Time.deltaTime * rotateSpeed);
82             }
83         }
84     }
85 }

Player1

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class Player2 : MonoBehaviour {
 5
 6     public int translateSpeed=1;
 7     public int rotateSpeed = 10;
 8
 9     // Use this for initialization
10     void Start () {
11
12     }
13
14     // Update is called once per frame
15     void Update () {
16
17     }
18
19     void OnGUI(){
20         if (!Player1.selected) {
21             // turn left : x- axis
22             if (Input.GetKey (KeyCode.A)) {
23                 transform.Translate (Vector3.left * Time.deltaTime);
24             }
25
26             // turn right : x+ axis
27             if (Input.GetKey (KeyCode.D)) {
28                 transform.Translate (Vector3.right * Time.deltaTime);
29             }
30
31             // turn forward : z+ axis
32             if (Input.GetKey (KeyCode.W)) {
33                 transform.Translate (Vector3.forward * Time.deltaTime);
34             }
35
36             // turn backward : z- axis
37             if (Input.GetKey (KeyCode.S)) {
38                 transform.Translate (Vector3.back * Time.deltaTime);
39             }
40
41             // turn up : y+ axis
42             if (Input.GetKey (KeyCode.Q)) {
43                 transform.Translate (Vector3.up * Time.deltaTime);
44             }
45
46             // turn down : y- axis
47             if (Input.GetKey (KeyCode.E)) {
48                 transform.Translate (Vector3.down * Time.deltaTime);
49             }
50
51
52             // rotate x axis anticlockwise
53             if (Input.GetKey (KeyCode.H)) {
54                 transform.Rotate (Vector3.left * Time.deltaTime * rotateSpeed);
55             }
56
57             // rotate x axis clockwise
58             if (Input.GetKey (KeyCode.K)) {
59                 transform.Rotate (Vector3.right * Time.deltaTime * rotateSpeed);
60             }
61
62             // rotate z axis clockwise
63             if (Input.GetKey (KeyCode.U)) {
64                 transform.Rotate (Vector3.forward * Time.deltaTime * rotateSpeed);
65             }
66
67             // rotate z axis anticlockwise
68             if (Input.GetKey (KeyCode.J)) {
69                 transform.Rotate (Vector3.back * Time.deltaTime * rotateSpeed);
70             }
71
72             // rotate y axis clockwise
73             if (Input.GetKey (KeyCode.Y)) {
74                 transform.Rotate (Vector3.up * Time.deltaTime * rotateSpeed);
75             }
76
77             // rotate y axis anticlokcwise
78             if (Input.GetKey (KeyCode.I)) {
79                 transform.Rotate (Vector3.down * Time.deltaTime * rotateSpeed);
80             }
81         }
82
83     }
84 }

Player2

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

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

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

9.保存,运行。

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

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

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

时间: 2024-10-13 23:23:44

Unity 碰撞的例子的相关文章

Unity 模仿官方例子 点击时添加爆炸力

这里需要有一些爆炸的粒子特效,如果大家没有的话,我会打包在项目中,这是我在网上下载的一些特效,里面有很多特效,我就只用了其中一个来做测试. 爆炸特效的路径在:Assert–>JMO Assert–>WarFX–>Explosions 首先创建好一个3D项目,做出如下类似的场景. 注意:需要给立方体添加Rigidbody(刚体)组件,不然没有效果. 给摄像机添加一个Boom脚本,编辑如下: using UnityEngine; using System.Collections; publi

unity碰撞组件、刚体组件

游戏导入标准资源包“Character Controllers”后可以为游戏对象添加 character(角色控制器)组件: 添加角色控制器组建以后可以控制游戏对象移动: 角色控制器组件因为与碰撞组件相互冲突,所以添加角色控制器组建后Collider组件就会消失. 默认在Unity中创建的模型是不具备接收物理引擎的,除非给模型添加刚体组件或角色控制器组件. 看下面代码: 1 using UnityEngine; 2 using System.Collections; 3 4 public cla

Unity碰撞器触发关系测试

本文刚体有关的内容不再赘述,主要测试碰撞器和触发器的消息关系. 刚体在这篇有测试:U3D刚体测试1-刚体非刚体物体非Kinematic等之间的碰撞关系 碰撞器测试结果: 1.A对象为Collider,B对象为Trigger.A对象绑定接收脚本.只触发Trigger相关消息. 2.A对象为Collider,B对象也为Collider.A对象绑定接收脚本.只触发Collider相关消息. 3.A对象为Collider,B对象同时有Collider和Trigger.A对象绑定接收脚本.Trigger消

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

MonoBehaviour中的消息非常多,一共有62个! 除了必须关注的脚本生命周期的一系列函数外,还有其他两组比较常混淆的消息:碰撞和触发. 按3D和2D物体区分,又分为碰撞:Collision.Collision2D.触发:Trigger.Trigger2D. 以3D物体为例做了如下实验,分别测试下OnColiisionXXXX碰撞消息和OnTriggerXXXX触发消息的调用情景. 实验模拟: 1.分别创建物体A 和 物体B,使物体A处于物体B上方 2.在物体A有刚体组件的情况下,对物体A

关于unity碰撞检测器的用法

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

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

在unity开发过程中,通常我们习惯性地在Windows操作系统下使用svn进行版本管理,而每次提交更新,都需要回到文件夹下的这种操作让人无法忍受.是不是可以集成svn到unity中呢?查了一圈unity store可以看到很多svn的第三方插件.考虑到我们只需要简单的功能,而且不希望加入额外复杂的代码,最后还是自己写一个插件.功能就是更新或者提交assets文件夹. 如果还没有svn对项目进行管理的,按照以下2步操作:     1.下载svn客户端,安装.     2.从svn版本库check

unity学习笔记2

[转]自http://blog.csdn.net/tianyao9hen/article/details/53141141 对于新手学习unity碰撞讲的还是比较清楚的 OnTriggerEnter和OnCollisionEnter的触发条件是不同的,需要在设计的过程中加以关注. 触发的共同要求 碰撞的两个物体A,B,都要有碰撞体(collider),Box Collider,Sphere Collider,Capsule Collider等的任意一种 当A,B都添加刚体(Rigidbody)时

数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇

<数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇>一文让读者了解了 HT的 2D 拓扑图组件使用,本文将对 HT 的 3D 功能做个综合性的介绍,以便初学者可快速上手使用 HT 构建例如电信网管 3D 机房应用.水务燃气 SCADA 监控应用及智能楼宇等应用场景. HT for Web 的 3D 是完全基于 WebGL 技术实现的渲染引擎,但开发者几乎不需要了解 3D 图形数学或 Shader 渲染的底层技术,只需要掌握基本的 3D 坐标系和相机  Camera 的概念,剩下需要掌

【Unity】7.5 移动设备输入

分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 在iOS和Android系统中,操作都是通过触摸来完成的.Input类中对触摸操作的方法或变量如下图所示: 通过GetTouch或者touches可以访问移动没备的触摸数据,数据保存在Touch的结构体中.下图是Touch的结构体变量: 二.基本用法示例 1.示例1(遍历所有Touch并输出Touch的信息) void OnGUI() { //遍历所有Touch foreach(Touch touch in Inpu