我在创建脚本时遇到一些问题,一旦玩家点击gameObject,gameObject将跟随鼠标。再次单击鼠标后,对象将被删除。
这是脚本:
public float distance = 10;
public void OnMouseDrag()
{
Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance);
Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
transform.position = objPosition;
}
这很好用,但问题是如果播放器(主摄像头)上有任何类型的移动脚本,例如它上面的字符控制器脚本或其父节点,则拾取的游戏对象将移动为如果它试图远离鼠标。
public float speed = 6.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
private Vector3 moveDirection = Vector3.zero;
void Update()
{
CharacterController controller = GetComponent<CharacterController>();
if(Input.GetKey(KeyCode.LeftShift))
{
speed = 15.0f;
}else
{
speed = 6.0f;
}
if(controller.isGrounded)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
}
if(Input.GetButton("Jump"))
{
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
float rotateRight = Input.GetAxis("Mouse X");
transform.Rotate(0, rotateRight, 0);
}
如果上面的脚本被禁用,那么GameObject就不会出类拔萃,而且运行正常。
我知道在角色控制器中进行的输入以某种方式影响顶级脚本,鼠标移动,因此gameObject在尝试保持鼠标上的某个点时向该方向转换。
但是如何让它不会影响它。
答案 0 :(得分:0)
我敢打赌鼠标拖动是在你移动之前发生的。
尝试将拖动逻辑放在LateUpdate()
中,以便它可以适应新的位置