Unity下使用暴风魔镜SDK通过头部和手柄控制字体拼凑(二)
2016-09-20 12:01
543 查看
工程如下图,按照笔划顺序给笔划命名
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/07/152fd210a244155779b1e1ee07a2589a)
stroke下的物体是笔划实体,tag是Font,加碰撞体
originalStrokePositionParent下的是笔划实体原本待在的地方,tagboardStrokePosition
position是墙上希望笔划应该待在的地方,tag是wallStrokePosition,加碰撞体
代码如下:
选择笔划及控制移动
有不足的地方或者更好地解决办法希望大家能指出哦
stroke下的物体是笔划实体,tag是Font,加碰撞体
originalStrokePositionParent下的是笔划实体原本待在的地方,tagboardStrokePosition
position是墙上希望笔划应该待在的地方,tag是wallStrokePosition,加碰撞体
代码如下:
选择笔划及控制移动
using UnityEngine; using System.Collections; namespace MojingSample.CrossPlatformInput.PlatformSpecific { public class FontMove : MonoBehaviour { public static FontMove _instance; private GameObject lacuchPosition;//射线发射位置 public GameObject targetMoveObject = null;//被拾起的笔画 public LayerMask moveLayer;//移动层 public LayerMask wallLayer;//墙体层 public bool isMove = false;//是否可以移动 public bool isFind = true;//是否可以寻找 private Vector3 lastPosition; private int strokeNumber=1;//记录笔画顺序 void Awake() { _instance = this; } void Start() { lacuchPosition = GameObject.FindGameObjectWithTag("MainCamera"); } // Update is called once per frame void Update() { FindTarget(); if (isMove == true) TargetMove(); } void FindTarget() {//寻找需要选择的笔画 if (isFind == true) if (CrossPlatformInputManager.GetButtonDown("C") || Input.GetKeyDown(KeyCode.J)) { RaycastHit info; bool hit = Physics.Raycast(lacuchPosition.transform.position, lacuchPosition.transform.forward, out info, 100); if (hit) { if (info.transform.tag == "Font") { if (info.transform.name == strokeNumber.ToString()) {//如果满足要求的笔划顺序 targetMoveObject = info.transform.gameObject; lastPosition = targetMoveObject.transform.position; isMove = true; isFind = false; targetMoveObject.GetComponent<BoxCollider>().enabled = false; strokeNumber++; } } } } } void TargetMove() {//移动笔画 if (targetMoveObject != null) { RaycastHit info; bool hit = Physics.Raycast(lacuchPosition.transform.position, lacuchPosition.transform.forward, out info, 100); if (hit) { if (info.transform.tag == "Wall") { Vector3 pos = info.point; pos -= new Vector3(0.1f, 0, 0); targetMoveObject.transform.position = pos; } } } } } }控制笔划匹配
using UnityEngine; using System.Collections; namespace MojingSample.CrossPlatformInput.PlatformSpecific { public class FontAlign : MonoBehaviour { private GameObject[] wallStrokePosition;//墙上应该被放置的笔画的位置 private GameObject lacuchPosition;//笔画向墙发射射线的位置 private GameObject targetStroke = null;//墙上被选中的笔画 // Use this for initialization void Start() { wallStrokePosition = GameObject.FindGameObjectsWithTag("wallStrokePosition"); } // Update is called once per frame void Update() { if (FontMove._instance.targetMoveObject != null) { lacuchPosition = FontMove._instance.targetMoveObject; } FindPosition(); } void FindPosition() { if (lacuchPosition != null) { foreach (GameObject go in wallStrokePosition) { if (go.name == lacuchPosition.name) { targetStroke = go; } } if (FontMove._instance.targetMoveObject != null) if (Vector3.Distance(lacuchPosition.transform.position, targetStroke.transform.position) <= 0.5f) { FontMove._instance.isMove = false; FontMove._instance.isFind = true; FontMove._instance.targetMoveObject.transform.position = targetStroke.transform.position; FontMove._instance.targetMoveObject = null; } } } } }
有不足的地方或者更好地解决办法希望大家能指出哦
相关文章推荐
- Unity下使用暴风魔镜SDK通过头部和手柄控制字体拼凑(一)
- Unity下使用暴风魔镜SDK通过头部和手柄控制字体拼凑
- Unity中使用暴风魔镜蓝牙手柄
- 在C#中使用.NET SDK创建控制实例
- 关于DirectX高级动画书中使用的9.0bsdk的升级说明 cXParser类(dx9.0c sdk vs2003编译运行通过)
- 家庭办公你也能做到!通过Symantec PcAnywhere控制远程计算机-使用方法图解教程
- 使用putty 0.60 cn控制linux 通过ssh 乱码
- 在C#中使用.NET SDK创建控制
- 通过滑动手势控制摇杆移动并且通过移动的速度控制能量条的增长 Unity
- 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置
- 在C#中使用.NET SDK创建控制
- Python:通过自定义系统级快捷键来控制程序开始或停止记录日志(使用小技巧解决一个貌似无解的问题)
- 用C#通过Nokia手机发送短信(使用Nokia SDK3.0/原创)
- 通过JavaScript控制字体大小的代码
- 40 个可通过 @font-face 使用的免费字体
- 通过Symantec PcAnywhere控制远程计算机-使用方法图解教程
- 在C#中使用.NET SDK创建控制
- 通过编程的方式控制程序的内存使用量
- Flex中如何通过设置fontFamily样式在NumericStepper控件中使用嵌入字体的例子
- 梦想成真 XNA (5) - 通过键盘、鼠标、手柄控制精灵