初学者都有这样的疑惑,为什么我托一个图片到材质中不行-,- 那是因为你不理解它的工作方式,
首先最重要的一点就是与这5种材质相关的属相都不要轻易改变,要改图片的话该更换的地方时script里面的texture,在运行时就会自动改变了
OTMaterial-additive
shader为Moblie/ Particles / Additive
OTMaterial-solid 不透明的材质
shader为Unlit / Texture
OTMaterial-tinted //可用来做一种染色的素材
shader为Moblie/ Particles / VertexLit Blended
带有一个Emissive Color为可渲染的颜色
OTMaterial-tintedAlpha //同样可附上颜色,而且还是带透明的
OrtHello 特有的shader,shader为OrtHello / tintedAlpha
有一个MainColor
OTMaterial-transparent //最常用的,就是一个透明的通道
shader为Moblie/ Particles / Alpha Blended
//下面说OTView : MonoBehaviour
public float zoom //变焦的值,设置0时为显示1比1的像素值,设置的值到达1时是看到的2倍的图像,设置的值为-1时看到的是一半的图像
经过我的检查,实际上变焦值变得时Projection摄像机的Size,但是这时摄像机的Size是被锁定的,实际上你只能通过view来改变
Position在摄像机被锁死后实际上没有作用
Rotation可旋转,还是有作用的
Movement Target 是跟随移动的物体,这样设置的话会让主角一直在屏幕中央
Rotation Target 是跟随旋转的物体,这样设置的话会让主角一直在屏幕保持不动
World Bounds 世界边界,会限制摄像机的移动范围。
Always Pix Perfect 总是实际像素,可不勾
Pixel Perfect Resolution 实际分辨尺寸
Custom Size 自定义尺寸-,-最好不要设置这个 各种问题
Draw Gizmos //是否在3d场景中画出边界
Gizmos Color //遮挡颜色
下面是它的方法:
public bool Contains(OTObject o) 检查某个物体是否在视野中
public Vector2 mouseWorldPosition //实际上它是camera.ScreenToWorldPoint(Input.mousePosition);的封装
其它实用一点的方法就一个都没找到了
继续贴update
public void Update()
{
if (!OT.isValid) return;
if (Application.isEditor)
{
// aspect ration check - because it sometimes is forced back to 4:3 ???
float asp = (float)Screen.width / (float)Screen.height;
if (asp!=camera.aspect) return;
GetWorldRect();
if (_position_ == _position)
{
if (!Vector2.Equals((Vector2)camera.transform.position, _position))
{
_position = camera.transform.position;
_position_ = _position;
transform.position = camera.transform.position;
}
}
}
if (customSize != _customSize)
{
_customSize = customSize;
sizeFact = ((customSize / 300) / pixelPerfectResolution.y) * 600;
}
if (_zoom != zoom)
GetWorldRect();
if (customSize == 0)
sizeFact = 1;
// check camera type
if (!camera.orthographic)
SetCamera();
// check camera size
if (camera.orthographicSize != resSize * (Mathf.Pow(2, _zoom * -1)))
camera.orthographicSize = resSize * Mathf.Pow(2, _zoom * -1);
if (Application.isEditor && (transform.position.x != _position.x || transform.position.y != _position.y) && _position == _position_)
{
camera.transform.position = new Vector3(transform.position.x, transform.position.y, -1001);
_position = new Vector2(camera.transform.position.x, camera.transform.position.y);
_position_ = position;
}
Vector2 pos = OT.view.position;
if (OT.view.movementTarget != null)
pos = OT.view.movementTarget.transform.position;
if (worldBounds.width != 0)
{
bool clampX = (Mathf.Abs(worldBounds.width)>=Mathf.Abs(worldRect.width));
if (clampX)
{
float minX = _worldBounds.xMin;
float maxX = _worldBounds.xMax;
if (maxX < minX)
{
float tmp = minX;
minX = maxX;
maxX = tmp;
}
minX += Mathf.Abs(worldRect.width / 2);
maxX -= Mathf.Abs(worldRect.width / 2);
pos.x = Mathf.Clamp(pos.x, minX, maxX);
}
else
pos.x = (worldRect.xMin + worldRect.width / 2);
bool clampY = (Mathf.Abs(worldBounds.height) >= Mathf.Abs(worldRect.height));
if (clampY)
{
float minY = _worldBounds.yMin;
float maxY = _worldBounds.yMax;
if (maxY < minY)
{
float tmp = minY;
minY = maxY;
maxY = tmp;
}
minY += Mathf.Abs(worldRect.height / 2);
maxY -= Mathf.Abs(worldRect.height / 2);
pos.y = Mathf.Clamp(pos.y, minY, maxY);
}
else
pos.y = (worldRect.yMin + worldRect.height / 2);
position = pos;
}
else
position = pos;
// check camera position
if (_position_ != _position)
{
_position_ = _position;
if (camera.transform.position.x != _position.x || Camera.main.transform.position.y != _position.y || Camera.main.transform.position.z != -1001)
{
camera.transform.position = new Vector3(_position.x, _position.y, -1001);
transform.position = camera.transform.position;
GetWorldRect();
}
}
if (OT.view.rotationTarget != null)
OT.view.rotation = OT.view.rotationTarget.transform.eulerAngles.z;
// check camera position
if (camera.transform.eulerAngles.z != _rotation)
{
camera.transform.eulerAngles = new Vector3(0, 0, _rotation);
transform.rotation = camera.transform.rotation;
}
}