Unity制作⼩地图和⽅向导航
⼀、unity⽅向导航制作
设计要求是⽅向导航随着⿏标旋转转换⽅向,效果图如下:
具体的实现⽅法主要有两个步骤,分别为UI设计和脚本编写。我的设计思路是这个控件分为两层,第⼀层为东西南北指⽰层,第⼆层为图标指⽰层,这⾥我的图标采⽤圆形图标,⽅向指⽰这⾥采⽤控制图标旋转的⽅式实现,层级关系如下:
⾸先创建⽗节点1,然后在⽗节点下创建⼦节点2,3;最后调整好位置。
第⼆步脚本编写,脚本如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class shijiao : MonoBehaviour
{
public GameObject Gcanvas;
public GameObject UIzhinanpicture;
public GameObject Terren;
public GameObject SMAP;
/
/public GameObject bnt=GameObject.Find("Button");
//⽅向灵敏度
public float sensitivityX = 10F;
public float sensitivityY = 10F;
//上下最⼤视⾓(Y视⾓)
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
static public bool ifcanvas;
void Update()
{
if(Input.GetMouseButton (0)){
//按住⿏标左键才能调节⾓度,根据⿏标移动的快慢(增量), 获得相机左右旋转的⾓度(处理X)
float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;
//根据⿏标移动的快慢(增量), 获得相机上下旋转的⾓度(处理Y)
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
//⾓度限制. rotationY⼩于min,返回min. ⼤于max,返回max. 否则返回value
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
//总体设置⼀下相机⾓度
transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);
}
}
}
⼆、unity⼩地图的制作
关于⼩地图的制作,⽹上各种帖⼦铺天盖地,然⽽仔细看却发现⼤部分都⼀样,互相抄袭,很多都是没⽤的。各种帖⼦⼤都采⽤是正交相机的⽅式显⽰⼩地图,然⽽这个地图是真实场景的俯视,我们需要的往往是像英雄联盟那样的⼩地图,这⾥我采⽤⼀种简单的⽅式实现⼩地图。废话不说先上效果图:
这⾥的地图只是⼀张图⽚,这增加了地图的灵活性,这⾥的⼩地图创建跟上⾯⽅向导航类似,所不同的是脚本的编写⽅式。具体的实现也是分为两个步骤,分别为UI的设计和代码的编写。
第⼀步:地图UI的设计
层级关系如图:
⽗节点1为背景地图,⼦节点2为蓝⾊箭头,蓝⾊箭头表⽰⽬标⽬前所在的位置。这两个节点仅仅是图⽚控件。
第⼆步:脚本的编写
脚本如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
using UnityEngine.EventSystems;
public class shijiao : MonoBehaviour
{
public GameObject Gcanvas;//画布
float uppublic GameObject UIzhinanpicture;
public GameObject Terren;//⼤地
public GameObject SMAP;//⼩地图指针
public GameObject SMAPBK;//⼩地图背景
GameObject Cm;
//⽅向灵敏度
public float sensitivityX = 10F;
public float sensitivityY = 10F;
//上下最⼤视⾓(Y视⾓)
public float minimumY = -60F;
public float maximumY = 60F;
//⼭地的⼤⼩
float Twidth;
float Tlongth;
//地图⼤⼩
float mapwidth;
float maplongth;
/
/⽐例⼤⼩
static public float widthScale;
static public float longthscal;
//图⽚缩放⽐例
//⽐例⼤⼩
//static public float PwidthScale;
//static public float Plongthscal;
float rotationY = 0F;
static public bool ifcanvas;
private float movespeed = 20;
CharacterController ctrlor;
void Start ()
{
RenderSettings.fog = false;
ifcanvas =true;
Gcanvas.SetActive (ifcanvas);
Cm = GameObject.Find("Mcam");
ctrlor = GetComponent<CharacterController>();
Twidth=Terren.GetComponent<Collider>().bounds.size.x;
Tlongth =Terren.GetComponent<Collider>().bounds.size.z;
mapwidth = SMAPBK.GetComponent<RectTransform>().rect.width;
maplongth = SMAPBK.GetComponent<RectTransform>().rect.height;
widthScale =(mapwidth) /Twidth;
longthscal =(maplongth) /Tlongth;
void Update()
{
if (Input.GetMouseButton (1)) {
ifcanvas = true;
Gcanvas.SetActive (ifcanvas);
}
else{
if (Input.GetKey(KeyCode.Escape))
{
ifcanvas = false;
Gcanvas.SetActive (ifcanvas);
}
if (!EventSystem.current.IsPointerOverGameObject())
{
//W键前进
if (Input.GetKey (KeyCode.W)) {
Vector3 forward = transform.TransformDirection(Vector3.forward);
ctrlor.Move(forward*movespeed*Time.deltaTime);
}
/
/S键后退
if (Input.GetKey(KeyCode.S))
{
Vector3 back = transform.TransformDirection(Vector3.back);
ctrlor.Move(back * movespeed * Time.deltaTime);
}
//A键移动
if (Input.GetKey(KeyCode.A))
{
Vector3 left = transform.TransformDirection(Vector3.left);
ctrlor.Move(left* movespeed * Time.deltaTime);
}
//D键后退
if (Input.GetKey(KeyCode.D) && ansform.position.y > 0)
{
Vector3 right = transform.TransformDirection(Vector3.right);
ctrlor.Move(right * movespeed * Time.deltaTime);
}
//E键升⾼
if (Input.GetKey (KeyCode.E)) {
Vector3 upward = transform.TransformDirection(Vector3.up);
ctrlor.Move(upward * movespeed * Time.deltaTime);
}
//根据⿏标移动的快慢(增量), 获得相机左右旋转的⾓度(处理X)
float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;
//根据⿏标移动的快慢(增量), 获得相机上下旋转的⾓度(处理Y)
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
//⾓度限制. rotationY⼩于min,返回min. ⼤于max,返回max. 否则返回value
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
//总体设置⼀下相机⾓度
transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);
}
}
}
}
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。