public void AddAnimation(Drawable sprite_anim) { SceneUnit temp = new SceneUnit(); temp.m_sprite = sprite_anim; m_animList.Add(temp); }
public void SceneUnit2ARUnit(SceneUnit unit) //直接放置某个对象 { Vector3 transScreenPos = Camera.main.WorldToScreenPoint(unit.thisT.position); Vector2 screenPos = new Vector2(transScreenPos.x, transScreenPos.y); ScreenPoint2ARUnit(unit, screenPos); }
public void AddAnimation(Drawable sprite_anim, SoundEffect sound) { SceneUnit temp = new SceneUnit(); temp.m_sprite = sprite_anim; temp.m_sound = sound; m_animList.Add(temp); }
public void Update() { if (m_scene_state != DrawableState.Finished) { if (m_currUnit.m_sprite.Draw_State == DrawableState.Finished) { m_played_sound = false; if (m_animQ.Count == 0) // Ran out of animations to perform, reset stuff { m_currUnit.m_sprite.Reset(); // So it wont stay finished for the next time around m_scene_state = DrawableState.Finished; return; } else // On to the next animation { float x, y; x = m_currUnit.m_sprite.X_Pos; y = m_currUnit.m_sprite.Y_Pos; m_currUnit.m_sprite.Reset(); // So it wont stay finished for the next time around m_currUnit = m_animQ.Dequeue(); m_currUnit.m_sprite.X_Pos = x; m_currUnit.m_sprite.Y_Pos = y; } } if (!m_played_sound && m_currUnit.m_sound != null) { m_currUnit.m_sound.Play(); m_played_sound = true; } // Update current Animation m_currUnit.m_sprite.Update(); } }
public void Move(SceneUnit sceneUnit, bool isUp) { int beforeNo = _sceneUnitList.IndexOf(sceneUnit); int afterNo = beforeNo + (isUp ? -1 : 1); _sceneUnitList[beforeNo] = _sceneUnitList[afterNo]; _sceneUnitList[afterNo] = sceneUnit; }
public void ScreenPoint2ARUnit(SceneUnit unit, Vector2 screenPos) //对于屏幕上一点,放置某个物体 { StartCoroutine(_WaitForDepthAndFindPlane(unit, screenPos)); // 由于可能会等待一段时间, 播放一个小动画以提醒用户. UIManager.Instance.Open(UIID.TouchEffect); Vector2 normalizedPosition = screenPos; normalizedPosition.x /= Screen.width; normalizedPosition.y /= Screen.height; UIManager.Instance.SetRectAnchor(UIID.TouchEffect, normalizedPosition); }
public void RemoveSceneCat(int id, bool immediatly = true) { // if (!_SceneUnitList.ContainsKey(id)) { return; } SceneUnit unit = _SceneUnitList[id]; unit.OnUnInit(immediatly); _SceneUnitList.Remove(id); }
public void CleanAll() { List <int> ids = new List <int>(_SceneUnitList.Keys); for (int i = ids.Count - 1; i >= 0; i--) { //foreach (int id in _SceneUnitList.Keys) { SceneUnit unit = _SceneUnitList[ids[i]]; unit.OnUnInit(false); _SceneUnitList.Remove(ids[i]); } }
public void RemoveSceneUnit(SceneUnit unit, bool immediatly = true) { if (unit == null) { return; } if (unit.IsCat()) { RemoveSceneCat(unit.id, immediatly); return; } if (!unit.IsCat()) { RemoveSceneItem(unit.id, immediatly); return; } }
public void ResetScene() { for (int i = 0; i < m_animations.Length; i++) { if (m_effect == SpriteEffects.None) { m_animList[m_animations[i]].m_sprite.Effects = SpriteEffects.None; } else { m_animList[m_animations[i]].m_sprite.Effects = SpriteEffects.FlipHorizontally; } m_animQ.Enqueue(m_animList[m_animations[i]]); } m_currUnit = m_animQ.Dequeue(); // Grab the first animation }
public SceneUnit AddUnitComponentByType(GameObject go, UnitClassType type) { SceneUnit unit = null; switch (type) { // case UnitClassType.SceneCat: // unit = go.AddComponent<SceneCat> (); // break; // case UnitClassType.SceneCatLitter: // unit = go.AddComponent<SceneCatLittle> (); // break; default: unit = go.AddComponent <SceneUnit>(); break; } unit.m_Type = type; return(unit); }
public void BuildScene(int[] animations) { m_animations = new int[animations.Length]; m_animQ.Clear(); for (int i = 0; i < animations.Length; i++) { m_animations[i] = animations[i]; /* * if(m_effect == SpriteEffects.None) { * temp.Effects = SpriteEffects.None; * } else { * temp.Effects = SpriteEffects.FlipHorizontally; * } * */ m_animQ.Enqueue(m_animList[animations[i]]); } m_currUnit = m_animQ.Dequeue(); // Grab the first animation }
public virtual void OnMsg(SceneUnit pSender, MsgType eMsgType, System.Collections.Hashtable arParam) { }
private IEnumerator _WaitForDepthAndFindPlane(SceneUnit unit, Vector2 touchPosition) { m_findPlaneWaitingForDepth = true; // T打开深度摄像头等待下一次深度更新. m_tangoApplication.SetDepthCameraRate(TangoEnums.TangoDepthCameraRate.MAXIMUM); while (m_findPlaneWaitingForDepth) { yield return(null); } m_tangoApplication.SetDepthCameraRate(TangoEnums.TangoDepthCameraRate.DISABLED); // 下面是具体放置标记的代码, 我们游戏放置猫盆等主要参考这里. // 找到触摸点所在平面. Camera cam = Camera.main; Vector3 planeCenter; Plane plane; if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane)) { yield break; } // Ensure the location is always facing the camera. This is like a LookRotation, but for the Y axis. Vector3 up = plane.normal; Vector3 forward; if (Vector3.Angle(plane.normal, cam.transform.forward) < 175) { Vector3 right = Vector3.Cross(up, cam.transform.forward).normalized; forward = Vector3.Cross(right, up).normalized; } else { // Normal is nearly parallel to camera look direction, the cross product would have too much // floating point error in it. forward = Vector3.Cross(up, cam.transform.right); } // 实例化 marker 对象. // newMarkObject = Instantiate(m_markPrefabs[m_currentMarkType], // planeCenter, // Quaternion.LookRotation(forward, up)) as GameObject; unit.thisT.position = planeCenter; unit.thisT.rotation = Quaternion.LookRotation(forward, up); unit.thisT.gameObject.SetActive(true); unit.m_timestamp = (float)m_poseController.m_poseTimestamp; Matrix4x4 uwTDevice = Matrix4x4.TRS(m_poseController.m_tangoPosition, m_poseController.m_tangoRotation, Vector3.one); Matrix4x4 uwTUnit = Matrix4x4.TRS(unit.thisT.position, unit.thisT.rotation, Vector3.one); unit.m_deviceT = Matrix4x4.Inverse(uwTDevice) * uwTUnit; //用controller探测到位置和朝向后 //,反转为原始矩阵,再用矩阵乘,则相当于把unity内的位置朝向投射到现实空间去了,之后利用闭环修正这个位置 }
/* * 说明: 消息传递给状态机处理 * 参数:pSender 发送者 * eMsgType 消息ID * arParam 参数列表 */ public virtual void OnMsg(SceneUnit pSender, MsgType eMsgType, Hashtable arParam = null) { }
/// <summary> /// SceneUnitを消去 /// </summary> public void Remove(SceneUnit sceneUnit) { _sceneUnitList.Remove(sceneUnit); SaveSceneUnitList(); }
public void BuildScene(int[] animations) { m_animations = new int[animations.Length]; m_animQ.Clear(); for (int i = 0; i < animations.Length; i++) { m_animations[i] = animations[i]; /* if(m_effect == SpriteEffects.None) { temp.Effects = SpriteEffects.None; } else { temp.Effects = SpriteEffects.FlipHorizontally; } * */ m_animQ.Enqueue(m_animList[animations[i]]); } m_currUnit = m_animQ.Dequeue(); // Grab the first animation }