Unity3d 小地图上的玩家位置
我做了一个小地图,我和相机的不一样。 视野:玩家在小地图上的位置是正确的,但玩家的视点(相机)可以看到另一个与视野相关的点 小地图类别:Unity3d 小地图上的玩家位置,unity3d,fieldofview,Unity3d,Fieldofview,我做了一个小地图,我和相机的不一样。 视野:玩家在小地图上的位置是正确的,但玩家的视点(相机)可以看到另一个与视野相关的点 小地图类别: using UnityEngine; using System.Collections; using UnityEngine.UI; public class MiniMap : MonoBehaviour { public Transform Target; public Image meImage; public RawImag
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MiniMap : MonoBehaviour
{
public Transform Target;
public Image meImage;
public RawImage minimap;
public GameObject rotatingCube;
public float Scale = 10;
Vector2 XRotation = Vector2.right;
Vector2 YRotation = Vector2.up;
private RectTransform rectTransform;
private void Start()
{
rectTransform = GetComponent<RectTransform>();
}
private void LateUpdate()
{
XRotation = new Vector2(Target.right.x, - Target.right.z);
YRotation = new Vector2(-Target.forward.x, Target.forward.z);
}
public Vector2 TransformPosition(Vector3 position)
{
Vector3 offset = position - Target.position;
Vector2 newPosition = new Vector2(-offset.x, -offset.z);
return newPosition;
}
public Vector3 TransformRotation(Vector3 rotation)
{
return new Vector3(0, 0 , Target.eulerAngles.y - rotation.y);
}
public Vector2 MoveInside(Vector2 point, Rect rect)
{
Rect mapRect = GetComponent<RectTransform>().rect;
point = Vector2.Max(point, mapRect.min);
point = Vector2.Min(point, mapRect.max);
point.x = Mathf.Min(point.x, mapRect.width / 2 - rect.width);
point.y = Mathf.Min(point.y, mapRect.height / 2 - rect.height);
return point;
}
}
使用UnityEngine;
使用系统集合;
使用UnityEngine.UI;
公共类小地图:单一行为
{
公共转型目标;
公众形象;
公共图像小地图;
公共游戏对象旋转立方体;
公众浮存规模=10;
Vector2 x旋转=Vector2.right;
矢量2旋转=矢量2.up;
私有矩形变换;
私有void Start()
{
rectTransform=GetComponent();
}
私有更新()
{
x旋转=新矢量2(Target.right.x,-Target.right.z);
旋转=新矢量2(-Target.forward.x,Target.forward.z);
}
公共向量2转换位置(向量3位置)
{
矢量3偏移=位置-目标位置;
Vector2 newPosition=新的Vector2(-offset.x,-offset.z);
返回新位置;
}
公共向量3旋转(向量3旋转)
{
返回新矢量3(0,0,Target.eulerAngles.y-rotation.y);
}
公共向量2移动内部(向量2点,矩形)
{
Rect mapRect=GetComponent().Rect;
点=矢量2.Max(点,mapRect.min);
点=向量2.Min(点,mapRect.max);
point.x=Mathf.Min(point.x,mapRect.width/2-rect.width);
point.y=数学最小值(point.y,mapRect.height/2-rect.height);
返回点;
}
}
光点等级:
using UnityEngine;
public class Blip : MonoBehaviour
{
private MiniMap map;
private RectTransform myRectTransform;
public bool KeepInBounds = true;
public bool LockScale = false;
public Transform Target;
private void Start()
{
map = GetComponentInParent<MiniMap>();
myRectTransform = GetComponent<RectTransform>();
var rectTransformMap = GetComponentInParent<RectTransform>();
myRectTransform.localPosition = new Vector2((rectTransformMap.rect.width - myRectTransform.rect.width) / 2, (rectTransformMap.rect.height - myRectTransform.rect.height) / 2);
}
private void LateUpdate()
{
Vector2 newPosition = map.TransformPosition(Target.position);
newPosition.x -= myRectTransform.rect.width / 2;
newPosition.y -= myRectTransform.rect.height / 2;
if (KeepInBounds)
newPosition = map.MoveInside(newPosition, this.myRectTransform.rect);
myRectTransform.localPosition = newPosition;
}
}
使用UnityEngine;
公共类闪电:单一行为
{
私人小地图;
私有矩形变换;
公共bool KeepInBounds=true;
公共布尔锁标度=假;
公共转型目标;
私有void Start()
{
map=getComponentParent();
myRectTransform=GetComponent();
var rectTransformMap=getComponentParent();
myRectTransform.localPosition=新向量2((rectTransformMap.rect.width-myRectTransform.rect.width)/2,(rectTransformMap.rect.height-myRectTransform.rect.height)/2);
}
私有更新()
{
Vector2 newPosition=map.TransformPosition(目标位置);
newPosition.x-=myrectcransform.rect.width/2;
newPosition.y-=myrectcransform.rect.height/2;
如果(保留边界)
newPosition=map.MoveInside(newPosition,this.myRectTransform.rect);
myRectTransform.localPosition=newPosition;
}
}
详细和有针对性的问题在哪里?为什么不使用链接到播放器顶部并渲染到纹理的相机?您可以提供一些屏幕截图吗?详细和有针对性的问题在哪里?为什么不使用链接到播放器顶部并渲染到纹理的相机?您可以提供一些屏幕截图吗?