我刚刚开始进行另一个项目,其中一个游戏机制是能够将无人驾驶飞机重新定位到鼠标光标的位置。
这是我的代码,下面我有几个问题(将指定)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class lightDrone : MonoBehaviour
{
Vector3 newPosition;
void Start()
{
newPosition = transform.position + (0,0,10); //***Problem A***
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
newPosition = hit.point;
transform.position = newPosition; // ***Problem B***
}
}
}
}
问题A-我试图在y轴上单击的位置加上新位置= + 10,所以“ Drone”似乎正在飞行而不是在地面上。这什么都没做,只是给我编译错误。
我希望确切的位置是(cursor.x,(public int(y)),cursor.z),但是我有一个非常模糊的想法。
问题B-
当前,当我单击鼠标时,对象将移动到光标,但似乎只是瞬间移动。我希望它以一定的速度移动,我想我需要一个公共浮动来做到这一点,并将transform.position更改为translate.position,但这再次不起作用。
在此先感谢您回答我的问题,我正在尝试学习这些新机制以及如何对其进行编码。 :)
答案 0 :(得分:1)
如果您希望将新位置放置在y轴上光标单击的位置+ 10,则将代码的任何放在jQuery(document).ready(function($){
$('.tabs').tabslet({
active :1,
animation : true,
container: '.tabs-container'
});
var hash = $.trim( window.location.hash );
var anchor = $('a[href$="'+hash+'"]');
if (anchor.length > 0){
anchor.click();
}
window.onload = function () {
if (location.hash) {
window.scrollTo(0, 0);
}
};
});
中是没有意义的。那仅用于初始化。它仅在场景开始时运行一次。只需使用Start()
方法将10添加到newPosition中即可。
将Update()
设置为某个值会使立即转换到该位置。如果要随着时间的推移进行转换,则需要一次将转换移动几个增量。由于这引入了“随着时间的推移”元素,因此您需要使用随时间变化的方法,因此需要协程,异步方法,或者如果您有点狡猾,也可以只使用update方法。
此外,您还需要射线相交并击中某物。就像一个平面,地面,地形,任何带有对撞机的东西。如果它在任何地方都没有命中,那么您将没有新的住所。
transform.position