unity3d 23

来源:互联网 发布:网站数据库放在哪里 编辑:程序博客网 时间:2024/05/18 00:47

minmap

小地图的计算方式还有大小有问题 


Minmap.cs

using UnityEngine;using System.Collections;public class Minmap : MonoBehaviour {GameObject plane;GameObject cube;float mapWidth;float mapHeight;float widthCheck;float heightCheck;float mapcube_x =0;float mapcube_y =0;bool keyUp;bool keyDown;bool keyLeft;bool keyRight;public Texture map;public Texture map_cube;// Use this for initializationvoid Start () {plane = GameObject.Find("Plane");cube = GameObject.Find ("Cube");float size_x = plane.GetComponent<MeshFilter> ().mesh.bounds.size.x; //??float scal_x = plane.transform.localScale.x;float size_z = plane.GetComponent<MeshFilter> ().mesh.bounds.size.z;float scal_z = plane.transform.localScale.z;mapWidth = size_x * scal_x;mapHeight = size_z * scal_z;widthCheck = mapWidth / 2;heightCheck = mapHeight / 2;check ();}void OnGUI(){keyUp=GUILayout.RepeatButton("向前移动");keyDown=GUILayout.RepeatButton("向后移动");keyLeft=GUILayout.RepeatButton("向左移动");keyRight=GUILayout.RepeatButton("向右移动");GUI.DrawTexture (new Rect (Screen.width - map.width, 0, map.width, map.height),map);GUI.DrawTexture (new Rect (mapcube_x, mapcube_y, map_cube.width, map_cube.height), map_cube);}// Update is called once per framevoid Update () {}void FixedUpdate(){if (keyUp) {cube.transform.Translate(Vector3.forward * Time.deltaTime * 5);check();}if (keyDown) {cube.transform.Translate(-Vector3.forward * Time.deltaTime * 5);check();}if (keyLeft) {cube.transform.Translate(-Vector3.right * Time.deltaTime * 5);check();}if (keyRight) {cube.transform.Translate(Vector3.right * Time.deltaTime * 5);check();}}void check(){float x = cube.transform.position.x;float z = cube.transform.position.z;if (x >= widthCheck) {x =widthCheck;}if (x <= -widthCheck) {x = -widthCheck;}if (z >= heightCheck) {z = heightCheck;}if (z <= -heightCheck) {z = -heightCheck;}cube.transform.position = new Vector3 (x, cube.transform.position.y, z);mapcube_x = (map.width / mapWidth * x) + ((map.width / 2) - (map_cube.width / 2)) + (Screen.width - map.width);mapcube_y = map.height - ((map.height/mapHeight * z)+(map.height/2));}}

搞定计算方式 了  期间又犯了 坐标原点不一致导致的计算错误   与教程不一样是由于  plane与cube 都不在原点 计算值时得考虑当前坐标


新的代码 计算上改了很多 

using UnityEngine;using System.Collections;public class Minmap : MonoBehaviour {GameObject plane;GameObject cube;float mapWidth;float mapHeight;float widthCheck;float heightCheck;float mapcube_x =0;float mapcube_y =0;float planePostion_x;float planePostion_z;bool keyUp;bool keyDown;bool keyLeft;bool keyRight;public Texture map;public Texture map_cube;float size_x;float size_z;float scal_x;float scal_z;// Use this for initializationvoid Start () {plane = GameObject.Find("Plane");cube = GameObject.Find ("Cube");size_x = plane.GetComponent<MeshFilter> ().mesh.bounds.size.x; //默认长宽scal_x = plane.transform.localScale.x;  //当前缩放size_z = plane.GetComponent<MeshFilter> ().mesh.bounds.size.z;scal_z = plane.transform.localScale.z;//float csize_x =mapWidth = size_x * scal_x;  //模型尺寸mapHeight = size_z * scal_z;planePostion_x = plane.transform.position.x;  //plane的x,z坐标planePostion_z = plane.transform.position.z;  widthCheck = mapWidth / 2;  //边界值  其实就是 250  不过实际判定时得加上当前坐标 还有cube的长宽heightCheck = mapHeight / 2;check (); //边界也有问题 }//plane.GetComponent<Renderer>().bounds.size.x 返回真实模型尺寸void OnGUI(){keyUp=GUILayout.RepeatButton("向前移动");keyDown=GUILayout.RepeatButton("向后移动");keyLeft=GUILayout.RepeatButton("向左移动");keyRight=GUILayout.RepeatButton("向右移动");GUI.DrawTexture (new Rect (Screen.width - mapWidth*0.2f, 0,mapWidth*0.2f,mapHeight *0.2f),map);//gui图片自动嵌套???GUI.DrawTexture (new Rect (mapcube_x, mapcube_y,0.02f*mapWidth*0.2f,0.02f* mapHeight*0.2f), map_cube);GUILayout.Label (cube.transform.position.x + "\n" + cube.transform.position.z);GUILayout.Label (mapcube_x + "\n" + mapcube_y);}// Update is called once per framevoid Update () {}void FixedUpdate(){if (keyUp) {cube.transform.Translate(Vector3.forward * Time.deltaTime * 50);check();}if (keyDown) {cube.transform.Translate(-Vector3.forward * Time.deltaTime * 50);check();}if (keyLeft) {cube.transform.Translate(-Vector3.right * Time.deltaTime * 50);check();}if (keyRight) {cube.transform.Translate(Vector3.right * Time.deltaTime * 50);check();}}void check(){float x = cube.transform.position.x;float z = cube.transform.position.z;if (x >= (widthCheck + planePostion_x - 5)) {x =widthCheck + planePostion_x-5;}if (x <= (planePostion_x - widthCheck+5)) {x = planePostion_x - widthCheck+5;}if (z >= (planePostion_z + heightCheck-5)) {z = planePostion_z + heightCheck-5;}if (z <= (planePostion_z - heightCheck+5)) {z = planePostion_z - heightCheck+5;}cube.transform.position = new Vector3 (x, cube.transform.position.y, z);mapcube_x = Screen.width - mapWidth * 0.2f + ((x - (planePostion_x - 250)) / 500) * mapWidth * 0.2f;mapcube_y = mapHeight*0.2f- ((z - (planePostion_z - 250)) / 500) * mapHeight * 0.2f;}}


0 0