unity3d 23

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 initialization
	void 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 frame
	void 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 initialization
	void 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 frame
	void 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值