C# 用偏移量移动到目标
我正在尝试将相机移动到具有指定偏移量的已单击游戏对象位置。因此,脚本应该通过单击的gameobjects位置、实际相机位置和偏移量来计算结果位置 我已使用以下代码进行了尝试:C# 用偏移量移动到目标,c#,unity3d,transform,C#,Unity3d,Transform,我正在尝试将相机移动到具有指定偏移量的已单击游戏对象位置。因此,脚本应该通过单击的gameobjects位置、实际相机位置和偏移量来计算结果位置 我已使用以下代码进行了尝试: Vector3 distanceVector = transform.position - target.transform.position; Vector3 distanceVectorNormalized = distanceVector.normalized; targetPosition = (distanceV
Vector3 distanceVector = transform.position - target.transform.position;
Vector3 distanceVectorNormalized = distanceVector.normalized;
targetPosition = (distanceVectorNormalized * preferredDistance);
但我得到了一些非常奇怪的值。以下是我为此编写的代码:
public float moveSpeed = 0.1f;
private bool moving = false;
private GameObject target;
// The distance between the camera and the targets position
private float preferredDistance = 3;
// The position the camera will move to
private Vector3 targetPosition;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out var hit, 100) == false) return;
Debug.Log(hit.transform.gameObject.name);
target = hit.transform.gameObject;
... Here should be the calculations
moving = true;
}
if (moving)
{
transform.position = Vector3.Lerp(transform.position, targetPosition, moveSpeed);
transform.LookAt(target.transform.position);
var offsetX = Math.Abs(transform.position.x - targetPosition.x);
var offsetZ = Math.Abs(transform.position.z - targetPosition.z);
if (offsetX < .01
&& offsetZ < .01) moving = false;
}
}
public float moveSpeed=0.1f;
私有布尔移动=假;
私有游戏对象目标;
//相机和目标位置之间的距离
私有浮动优先距离=3;
//相机将移动到的位置
专用矢量3目标位置;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
if(Input.GetMouseButtonDown(0))
{
var-ray=Camera.main.screenpointoray(Input.mousePosition);
if(Physics.Raycast(光线,out-var-hit,100)=false)返回;
Log(hit.transform.gameObject.name);
target=hit.transform.gameObject;
…这应该是计算结果
移动=真;
}
如果(移动)
{
transform.position=Vector3.Lerp(transform.position,targetPosition,moveSpeed);
变换。注视(目标。变换。位置);
var offsetX=数学Abs(transform.position.x-targetPosition.x);
var offsetZ=Math.Abs(transform.position.z-targetPosition.z);
如果(抵销x<.01
&&偏移量z<0.01)移动=假;
}
}
标准化的距离向量
充当摄影机指向对象的方向。
这个方向应该是标准化的,你可以这样做,所以它可以乘以你的首选距离。然后,它将成为摄影机与目标的偏移量
出现错误的部分是,您将此规格化偏移设置为新的摄影机位置,但应将其添加到其中:
Vector3 distanceVector = transform.position - target.transform.position;
Vector3 distanceVectorNormalized = distanceVector.normalized;
targetPosition = target.transform.position + (distanceVectorNormalized * preferredDistance);
注意最后一行中的差异