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
- unity3d 23
- Unity3D
- Unity3D
- Unity3D
- Unity3D
- unity3d
- Unity3D
- Unity3D
- Unity3D
- UNITY3D
- Unity3D
- unity3d
- unity3D
- Unity3D
- Unity3d
- Unity3D
- unity3D
- unity3D
- Mac ProGuard Jar混淆工具及操作文档
- TCP/IP、Http、Socket的区别
- Scala 异常处理
- apt-get 失败
- 16. 3Sum Closest(重要)
- unity3d 23
- Velocity 模板引擎介绍
- eclipse for php编辑器遇namespace报语法错误?
- 产品助理day19
- 在Spring中配置jdbc为什么不能用${username}问题
- 采用ViewIndicator主题设置之后造成的listview点击事件处理
- Lighttpd1.4.20源码分析之状态机(1)---状态机总览
- OPENCV入门教程十一:dilate图像膨胀
- 3 Sum问题