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

unity 通过点击游戏小地图,来移动主相机功能实现

2017-04-15 16:24 706 查看

方法介绍

前提:小地图由另一相机实现 (mapCamera)

通过 UI界面的RawImage 和 mapCamera 的视窗大小等比例 ,来实现点击位置的在世界坐标中的转换.

此脚本挂于Canvas中的小地图上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI ;
using UnityEngine .EventSystems ;

public class smallmap : MonoBehaviour ,IPointerClickHandler {
Vector3 a;
Vector3 pointPSInLocal ;
Camera[] c ;   //获取场景中所有的相机
Transform   point ;
GameObject MainCamera;

public static   bool isGo = false ;
static  smallmap _instance;
public static smallmap Instance{
get {
if (_instance == null) {
_instance = new smallmap ();
}
return _instance;
}
}

void Start () {
point = transform.FindChild ("Image");
pointPSInLocal = new Vector3 (0,0,0);
MainCamera = GameObject.FindWithTag ("MainCamera");
c= Camera.allCameras;
}

// Update is called once per frame
void Update () {
if (isGo) {
Vector3 n = new Vector3 (a.x, MainCamera .transform .position .y, a.z);
Vector3 n1 = test (n);
//          Debug.Log (n1);
MainCamera .transform .position  = Vector3.MoveTowards (MainCamera .transform .position ,  n1 ,5);
if (MainCamera.transform .position == n1 ){
//              Debug.Log ("主相机位置 :" +transform.position);
isGo = false;
}
}
}

#region IPointerClickHandler implementation
public void OnPointerClick (PointerEventData eventData)
{
point.position = Input.mousePosition;
Vector3 p = point.localPosition;
pointPSInLocal = new Vector3 (p.x+125,p.y+125,p.z);
a =  c[1]. ScreenToWorldPoint ( pointPSInLocal);
isGo = true;       //主相机移动
}
#endregion

Vector3 test(Vector3 v ){
v.x = Mathf.Clamp (v.x ,23.6f,75.8f);
v.z = Mathf.Clamp (v.z ,13.6f,56.7f);
return v;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐