unity 学习 处理一个物体 单击事件
2017-12-19 17:36
253 查看
1.学习一个物体单击事件
单机一个Cube物体,在点击位置播放一个特效,并且给一个力。下面是代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class kick : MonoBehaviour { public Camera activeCamera;//主场景摄像机 public float Force;//Cube收到的力基数 public ParticleSystem Particles;//粒子系统(点击的时候播放一下 拖拽的方式赋值) private Rigidbody rb; //获得这个实例的刚体 void Awake() { rb = GetComponent<Rigidbody>(); activeCamera = GameObject.Find("Scene Camera").GetComponent<Camera>();//摄像机赋值 } // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButtonUp(0)) { checkKick(); } } void OnMouseDown() { } void OnMouseUp() { } void checkKick() { RaycastHit hit;//射线投射碰撞信息 // 从鼠标所在的位置发射 Vector2 screenPosition = Input.mousePosition;//当前鼠标的位置 var ray = activeCamera.ScreenPointToRay(screenPosition); //从当前屏幕鼠标位置发出一条射线 if (Physics.Raycast(ray, out hit) && hit.transform == transform)//判断是否点击到实例物体上 { //hit.rigidbody.AddForceAtPosition(ray.direction * Force, hit.point, ForceMode.Impulse);//给这个刚体一个力 rb.AddForceAtPosition(ray.direction * Force, hit.point, ForceMode.Impulse);//给这个刚体一个力 Instantiate(Particles, hit.point, Quaternion.identity);//播一个特效 } } }
Ray 射线
创建一条射线从origin开始,沿direction方向。
Ray ray = new Ray(Vector3 origin, Vector3 direction);
//从当前变换位置开始,沿当前变换的Z方向创建一条射线。
Ray ray = new Ray(transform.position, transform.forward);
Camera.ScreenPointToRay
Ray ScreenPointToRay(Vector3 position);//返回一条射线从摄像机通过一个屏幕点。
Vector2 screenPosition = Input.mousePosition;//当前鼠标的位置
var ray = activeCamera.ScreenPointToRay(screenPosition); //从当前屏幕鼠标位置发出一条射线
RaycastHit 射线投射碰撞信息
该结构用来获取射线投射返回的信息。用来记录从raycast函数中得到的信息反馈。Transform: 碰撞到的物体的Transform节点
Rigidbody: 碰撞到的物体的刚体
Physics.Raycast 射线投射
RaycastHit hit;//射线投射碰撞信息 // 从鼠标所在的位置发射 Vector2 screenPosition = Input.mousePosition;//当前鼠标的位置 var ray = activeCamera.ScreenPointToRay(screenPosition); //从当前屏幕鼠标位置发出一条射线 if (Physics.Raycast(ray, out hit) && hit.transform == transform)//判断是否点击到实例物体上 { //hit.rigidbody.AddForceAtPosition(ray.direction * Force, hit.point, ForceMode.Impulse);//给这个刚体一个力 rb.AddForceAtPosition(ray.direction * Force, hit.point, ForceMode.Impulse);//给这个刚体一个力 Instantiate(Particles, hit.point, Quaternion.identity);//播一个特效 }从摄像机发射一条射线,只和target层发生碰撞,碰撞后得到碰撞体的信息,并返回一个布尔值。
在发射的轨迹中,一旦与其他物体发生碰撞,它就会停止。返回的布尔值则为true。并且将第一个碰到的信息记在 RaycastHit hit,所以这个变量就携带了射线碰撞到那个物体的一些信息(这里碰到的是方块cube)。
这个函数还有其他一些多态函数,用到的时候可以看看用哪个比较合适。
Instantiate 初始化的实例
// 参数一:是预设类型(这里是粒子系统)
//参数二:实例化预设的坐标
//参数三:实例化预设的旋转角度
Instantiate(Particles, transform.position, randomRotation);
当点击到一个实例Cube的实例上的时候,给一个力的同时,我们通过预制体实例化一个粒子实例。但是需要粒子效果播放之后自动销毁,否则这个粒子会一直播放,这里的处理方法是在这个粒子预制体上加了一个脚本,控制延迟自动销毁。如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class killMe : MonoBehaviour { public float Delay; private IEnumerator Start() { if (Delay != 0) yield return new WaitForSeconds(Delay); Destroy(gameObject); } }
相关文章推荐
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- Unity学习笔记——利用脚本实现对一个物体的第三人称观察
- unity实现3D物体上的事件监听处理
- Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)
- Unity中同一个物体上加载的脚本的执行顺序以及点击Button时触发事件的顺序
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- logz.io一个企业级的ELK日志分析器 内部集成了机器学习识别威胁——核心:利用用户对于特定日志事件的反馈处理动作来学习判断日志威胁 + 类似语音识别的专家系统从各方收集日志威胁信息
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- unity 学习 双击一个物体的实现
- Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)
- JavaScript中处理事件之单击事件onClick
- JS 一个函数处理多个事件
- 【JavaScript学习】事件:事件处理程序
- IOS学习——自定义View与使用block实现事件处理入门
- javascript学习-事件处理
- Android学习之按钮单击事件及监听器的5实现方式
- 一个自定义事件的处理程序
- 2014-10-27Android学习------布局处理(八)------自定义ListView的监听事件和Adapter的实现-----城市列表应用程序