您的位置:首页 > 移动开发 > Unity3D

Unity下使用暴风魔镜SDK通过头部和手柄控制字体拼凑(二)

2016-09-20 12:01 543 查看
工程如下图,按照笔划顺序给笔划命名



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