我构建了我的第一个游戏,并希望实例化一个对象,应该允许玩家选择在哪里实例化它。它应该在地面上(平面),物体(立方体)应该遵循mousePos。问题就发生在那里。我已经试了好几个小时了(至少5个小时),但我想不出来。我试过射线和screentoWorld的东西,但对象没有完全跟随我的鼠标。我能得到的最好结果是,如果我向右移动,立方体向右移动,所有其他方向都是一样的,但--它的移动速度与我的鼠标不同,所以它的移动速度与鼠标不同,所以我不能"OnMouseDown“移动--它不能”OnMouseDown“--我使用正投影相机,立方体移动的速度似乎取决于我的相机大小,但我希望它能在任何大小上工作等等。谢谢事先提供的帮助。
这是我的密码:
using UnityEngine;
using System;
public class VorKasernenBau : MonoBehaviour
{
public static event Action<Vector3> onBuildBuilding;
public Camera cam;
public GameObject kasernePrefab;
private void Update()
{
moveMe();
}
private void OnMouseDown()
{
if (true/*if genug platz*/)
{
Instantiate(kasernePrefab, transform.position, Quaternion.identity, transform.parent);
if (onBuildBuilding != null)
onBuildBuilding.Invoke(transform.position);
Destroy(gameObject);
}
}
private void moveMe()
{
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.CompareTag("Ground"))
{
transform.position = hit.point + Vector3.up;
Debug.Log("test");
}
}
}
}Update1: z的位置似乎没问题,但是xPos并没有完全遵循。
发布于 2021-07-15 11:20:43
我用另一个函数移动了对象。(cam.screentoworld和y值为1)解决了这个问题(甚至知道我对这个解决方案并不满意),但还有一个问题随之而来。如果我在播放模式下(通过拖放)移动屏幕,mousePos将不会被正确计算,因为计算出的鼠标not并不像屏幕那样被翻译。不管怎样,祝你今晚愉快,谢谢你的帮助。
Vector3 pos = cam.ScreenToWorldPoint(Input.mousePosition);
transform.position = new Vector3(pos.x,1,pos.z);https://stackoverflow.com/questions/68386048
复制相似问题