Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Это работает быстрее, т.к. не используется Sqrt.
Mathf.Pow(attackMinimumDistance, 2)
attackMinimumDistance * attackMinimumDistanceтам, вроде-как, методы extern (т.е. реализованы нативно)
вместо FindGameObjectsWithTag используйте статическую коллекцию.
Target.transform.position
private Transform myTransform;
private void Awake()
{
myTransform = transform;
}
myObject.GetComponent(Transform);
// по отношению к
myObject.transform;
// и
var t : Transform = myObject.transform;
...
t.position.Set(4, 8, 15);
// по отношению к
var p : Vector3 = myObject.transform.position;
...
p.Set(4, 8, 15);
public Vector3 forward {
get {
return localToWorldMatrix.MultiplyPoint(Vector3.forward);
}
set {
// Расчет обратной операции с коррекцией всего трансформа
}
}
var cachedTransform = transform;
// bla-bla-bla with cachedTransform
var forward = cachedTransform.forward;
// bla-bla-bla with forward
Или это касается только unity-c#?
transform.position.x = 10;
var pos = transform.position;
pos.x = 10;
transform.position = pos;
// Это псевдокод, реально не проверялся, но идея та же.
Matrix4x4 GetLocalToWorldMatrix() {
var lastParent = transform;
var mat = Matrix4x4.SetTRS(lastParent.localPosition, lastParent.localRotation, lastParent.localScale);
while (lastParent != transform.parent) {
var parent = transform.parent;
mat = Matrix4x4.SetTRS(parent.localPosition, parent.localRotation, parent.localScale) * mat;
lastParent = parent;
}
}
Vector3 GetPosition() {
return GetLocalToWorldMatrix().MultiplyPoint(transform.localPosition);
}
Vector3 GetForward() {
return GetLocalToWorldMatrix().MultiplyPoint(Vector3.forward) - GetLocalToWorldMatrix().MultiplyPoint(transform.localPosition);
}
Vector3 GetPosition() {
return GetLocalToWorldMatrix().MultiplyPoint(Vector3.zero);
}
Vector3 GetForward() {
return GetLocalToWorldMatrix().MultiplyPoint(Vector3.forward) - GetPosition();
}
Transform — это компонент, и вы его не конструируете из матрицы, это самостоятельный класс.
По идее так: При рендере — локальная матрица умножается на матрицы всех обьектов выше по иерархии.
Transform.forward является произведением вращения rotation на Vector3.forward.
//Задаём позицию по умолчанию для камеры, здесь выставлена моя — меняйте под себя
public float DefaultCameraPosX = 888.0f;
public float DefaultCameraPosY = 50.0f;
public float DefaultCameraPosZ = 1414.0f;
public Transform initialPosition;
private void Update()
{
float smoothCamSpeed = CameraSpeed * Time.smoothDeltaTime; //множим скорость перемещения камеры на сглаженную версию Time.deltaTime
public class CachingMonoBehaviour : MonoBehaviour {
// Transform
private Transform _cachedTransform;
private bool _cachedTransformIsSet;
public new Transform transform {
get {
if (!_cachedTransformIsSet) {
_cachedTransform = GetComponent<Transform>();
_cachedTransformIsSet = true;
}
return _cachedTransform;
}
}
}
Как создать простую Tower Defense игру на Unity3D, часть вторая