[ DestoryTimeout.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DestroyTimeout : MonoBehaviour {
public float timer = 1.5f;
// Use this for initialization
void Start () {
Destroy(gameObject, timer);
}
// Update is called once per frame
void Update () {
}
}
[ CursorPositioner.cs ]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CursorPositioner : MonoBehaviour {
private float defaultPosZ;
// Use this for initialization
void Start () {
defaultPosZ = transform.localPosition.z;
}
// Update is called once per frame
void Update () {
Transform camera = Camera.main.transform;
Ray ray = new Ray(camera.position , camera.rotation * Vector3.forward);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
if(hit.distance <= defaultPosZ)
{
transform.localPosition = new Vector3(0 , 0 , hit.distance);
}
else
{
transform.localPosition = new Vector3(0 , 0 , defaultPosZ);
}
}
}
}
[ LookMoveTo03.cs]
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using UnityEngine;
public class LookMoveTo : MonoBehaviour {
public GameObject ground;
Transform camera;
public Transform infoBubble;
private Text infoText;
// Use this for initialization
void Start () {
camera = Camera.main.transform;
if(infoBubble != null)
{
infoText = infoBubble.Find("Text").GetComponent<Text>();
}
}
// Update is called once per frame
void Update () {
//Transform camera = Camera.main.transform;
Ray ray;
RaycastHit[] hits;
GameObject hitObject;
Debug.DrawRay(camera.position, camera.rotation * Vector3.forward * 100.0f);
ray = new Ray(camera.position, camera.rotation * Vector3.forward * 100.0f);
hits = Physics.RaycastAll(ray);
for (int i = 0; i< hits.Length; i++)
{
RaycastHit hit = hits[i];
hitObject = hit.collider.gameObject;
if(hitObject == ground) {
if (infoBubble != null)
{
infoText.text = "X:" + hit.point.x.ToString("F2")
+ ", Z:" + hit.point.z.ToString("F2");
infoBubble.LookAt(camera.position);
infoBubble.Rotate(0.0f, 180.0f, 0.0f);
}
transform.position = hit.point;
}
}
}
}
[ PhotoFrame.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PhotoFrame : MonoBehaviour {
public string infoText = "Photo!";
public GameObject infoBubble = null;
// Use this for initialization
void Start () {
infoBubble.transform.GetChild(0).GetComponent<TextMesh>().text = infoText;
Renderer infoBubbleRenderer = infoBubble.GetComponent<Renderer>();
infoBubbleRenderer.sortingLayerName = "Default";
infoBubbleRenderer.sortingOrder = 0;
Renderer textRenderer = infoBubble.transform.GetChild(0).GetComponent<Renderer>();
textRenderer.sortingLayerName = "UI";
textRenderer.sortingOrder = 1;
CloseBubble();
}
public void OpenBubble()
{
infoBubble.SetActive(true);
}
public void CloseBubble()
{
infoBubble.SetActive(false);
}
}
[ LookMoveToTime.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class LookMoveToTime : MonoBehaviour {
// 몇초 후에 갈 것인지
public float timeToMove = 3.0f;
// 시간 계산용
private float countDown = 0.0f;
// 현재 어떤 바닥을 바라보고 있는지
private GameObject currentObj = null;
// 정확히 어느 지점을 바라봤는지
private Vector3 targetPos;
// 높이는 고정
private float startY = 0.0f;
// 현재 보고 있는 사진
private PhotoFrame viewPhoto = null;
// Use this for initialization
void Start () {
// 높이 고정
startY = Camera.main.transform.position.y;
}
// Update is called once per frame
void Update () {
Transform camera = Camera.main.transform;
Ray ray;
RaycastHit[] hits;
GameObject hitObject = null;
Debug.DrawRay(camera.position , camera.rotation * Vector3.forward * 100.0f);
ray = new Ray(camera.position , camera.rotation * Vector3.forward * 100.0f);
hits = Physics.RaycastAll(ray);
for (int i = 0; i < hits.Length; i++)
{
RaycastHit hit = hits[i];
hitObject = hit.collider.gameObject;
if (viewPhoto != null)
viewPhoto.CloseBubble();
// 액자 체크
if (hitObject.CompareTag("photo"))
{
viewPhoto = hitObject.GetComponent<PhotoFrame>();
viewPhoto.OpenBubble();
continue;
}
if (hitObject.transform.parent == null)
continue;
if (hitObject.transform.parent.CompareTag("ground"))
{
targetPos = hit.point;
}
else
hitObject = null;
}
if(currentObj != hitObject)
{
currentObj = hitObject;
countDown = timeToMove;
}
if(currentObj != null)
{
countDown -= Time.deltaTime;
if(countDown < 0.0f)
{
countDown = timeToMove;
transform.position = targetPos;
}
}
float distance = Vector3.Distance(Camera.main.transform.parent.position , transform.position);
if (distance >= 1.35f)
{
Vector3 dir = transform.position - Camera.main.transform.parent.position;
dir.Normalize();
Camera.main.transform.parent.position += dir * Time.deltaTime * 10.0f;
Vector3 pos = Camera.main.transform.parent.position;
Camera.main.transform.parent.position = new Vector3(pos.x , startY , pos.z);
transform.GetChild(0).gameObject.SetActive(true);
}
else
{
transform.GetChild(0).gameObject.SetActive(false);
}
}
}