有一个免费的C#代码示例,可以将对象移动到Unity 3D中的鼠标单击位置,如下所示:
public GameObject cube;
Vector3 targetPosition;
void Start () {
targetPosition = transform.position;
}
void Update(){
if (Input.GetMouseButtonDown(0)){
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)){
targetPosition = hit.point;
cube.transform.position = targetPosition;
}
}
}
Run Code Online (Sandbox Code Playgroud)
==============
问题是在运行时,Unity在该行生成错误:
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
错误消息是: NullReferenceException:对象引用未设置为对象的实例 ...
根据某人的建议,我刚刚在上面的示例代码中添加了一些调试语句,发现"Camera.main"为NULL.因此,这是Unity生成上述错误消息的主要原因.:-)
请注意,整个游戏项目我只有1个摄像头.
这是我的"主摄像头"的捕获图像,已经启用并由Unity自动标记为"主摄像头".但是,这也无法解决问题.
最终更新:
我刚刚发现stackoverflow用户" Programmer "已经在以下网址发布了一个很好的答案:
当我使用他的代码"GameObject.Find("NameOfCameraGameObject")时,这个答案解决了我的问题.GetComponent(); "
所以,我同意我的上述问题有点复制.但是,当我问我是否应该删除我的问题时,用户" 程序员 "建议我可以保持这个问题,因为它可能仍然对其他人有用.(同样,我已经通过上面的用户" 程序员 " 将链接发布到了正确的答案).
我的结论是:奇怪的是,即使Unity自动启用标签"MainCamera",代码仍然认为"Camera.Main"为空.因此,我必须使用用户" Programmer " 编写的代码来解决问题.
非常感谢用户" 程序员 "和其他优秀的stackoverflow用户帮助我解决这个问题.:-)
我正在我的REAL设备上开发和测试我的iOS游戏,这是iPad 4(第四代),它在REAL iPad 4上运行良好.但是,我还没有在iPad 1等真正的旧iPad上测试游戏. iPad 2甚至iPod.所以,我想有3个相互关联的问题如下:
(1)Xcode Simulator?
真正的iPad 1只有256 Mb的RAM,真正的iPad 2只有512 Mb的RAM.此外,这两款设备的处理器肯定比新iPad的处理器慢.(很遗憾,我没有钱购买iPad 1和iPad 2进行测试.)
那么,如果我使用Xcode模拟器在这两个设备上测试我的游戏,模拟器是否会准确设置真正反映这些设备的RAM,处理器速度和硬件性能限制的测试条件?如果有办法,请告诉我如何做到这一点?
(老实说,我认为XCODE模拟器只是:它是一个模拟器而不是模拟器.因此,我怀疑XCODE模拟器能够准确地模拟真实iPad 1和iPad 2设备上的测试条件,因此,我我担心我对XCODE模拟器的测试不准确.例如,模拟器可能会显示游戏运行正常,但实际上,当用户在真正的iPad 1和2上安装该游戏时,它可能会有一些滞后的问题用动画来说至少......)
(2)跳过iPad 1,iPad 2,iPad3和iPod?
有没有办法告诉Apple我只想将我的游戏发布到iPad 4(第四代)和新一代iPad,我不想发布我的iPad 1和iPad 2游戏?
(3)Apple规则?
或者,在开发商可以在App商店发售游戏之前,Apple是否会执行所有iPad游戏必须适用于所有iPad(包括iPad 1和iPad 2)的规则?
请帮我解决一个关于以下代码输出的简单问题。
我认为只有在调用 join() 或 detach() 函数时才会执行线程。
因此,我希望输出仅打印“暂停 2 秒结束,ID = 59306 ”,而不是打印“暂停 1 秒结束,ID = 10218 ”,因为我认为只有线程 2会被执行,而线程 1会被执行。不会被执行。但是我错了。
实际上,输出实际上打印了上述两行,这意味着线程 1 和 2 都被执行。是真的吗?
您能向我解释一下代码如何实际执行两个线程吗?
=========================
#include <iostream> // std::cout
#include <thread> // std::thread, std::this_thread::sleep_for
#include <chrono> // std::chrono::seconds
void pause_thread(int n)
{
std::this_thread::sleep_for (std::chrono::seconds(n));
std::cout << "pause of " << n << " seconds ended , ID = " << std::this_thread::get_id() << std::endl;
}
int main()
{
std::cout << "Spawning 2 …
Run Code Online (Sandbox Code Playgroud)