Unity3D写C#脚本,用鼠标左键按下选中模型时,控制一个模型按照模型的X轴向移动,Y轴向移动,Z轴向移动。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D写C#脚本,用鼠标左键按下选中模型时,控制一个模型按照模型的X轴向移动,Y轴向移动,Z轴向移动。相关的知识,希望对你有一定的参考价值。
Unity3D写C#脚本,用鼠标左键按下选中模型时,控制一个模型按照模型的X轴向移动,Y轴向移动,Z轴向移动。
参考技术A C语言是很多语言的前身,是很厉害的语言,而且效率很高。如果水平很好的话,我觉得用C语言写游戏是完全可行的,而且游戏可能还会更有效率一些,实时性更好一些,但是很多东西都必须自己实现,这一点很考验水平。Unity3D是一个游戏引擎,里面封装了很多直接就可以使用的效果,而且设计得比较方便使用,提供的API也很多们很好用,使用难度比起前一种要减少很多很多,但是效率可能不会有完全自己实现高,优化问题可能更重要一些。
Unity3D用C#和javascript比较多,至少C#的前身是C,并且C#的效率比起C低一些。
本人自己初学,只是说一下自己的观点,如果不正确,希望指正,多谢了。 参考技术B 表砸esc鼠标左键空格
鼠标左键按下时如何更改鼠标光标?
【中文标题】鼠标左键按下时如何更改鼠标光标?【英文标题】:How do I change the mouse cursor when the left mouse button is down? 【发布时间】:2010-09-27 11:40:43 【问题描述】:在 Delphi 2007 中,在鼠标移动事件中,我尝试使用以下命令更改鼠标光标:
procedure TFr_Board_Display.PaintBox_Proxy_BoardMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if left_mouse_button_down then begin
if some_condition then begin
Cursor := crDrag;
end
else begin
Cursor := crNoDrop;
end;
end
else begin
if some_other_condition then begin
Cursor := crHandPoint;
end
else begin
Cursor := crDefault;
end;
end;
end;
例如。但是,当按下鼠标左键并移动鼠标时,光标不会变为 crDrag 或 crNoDrop。代码被执行(例如 Cursor := crDrag;)但光标没有改变。当鼠标左键向上时,我移动鼠标,光标改变没有问题。
(我最初尝试使用一些拖放事件和属性,但无法让一切按我想要的方式工作。)
编辑:阐明所需行为和格式化代码。
编辑:谢谢你,Gamecat,但我希望鼠标左键按下时光标会改变,而鼠标移动时光标应该在 crDrag 和 crNoDrop 之间来回改变。
【问题讨论】:
添加了更多信息,因此可以在鼠标移动时使用。 【参考方案1】:如果您在 OnMouseDown 中设置鼠标光标并在 OnMouseUp 中重置它,一切正常:
procedure TForm4.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Cursor := crCross;
end;
procedure TForm4.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Cursor := crDefault; // Or you can restore a saved cursor.
end;
如果您希望鼠标光标在鼠标移动时做出反应,请使用以下命令:
procedure TForm4.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then begin
if X<100 then
Screen.Cursor := crCross
else
Screen.Cursor := crHourGlass;
end else
Screen.Cursor := crDefault; // Or you can restore a saved cursor.
end;
procedure TForm4.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Screen.Cursor := crDefault; // Or you can restore a saved cursor.
end;
MouseUp 是必需的,否则光标悬停在控件上方时不会变回。
确保在任何地方都使用 Screen.Cursor。
【讨论】:
【参考方案2】:有点离题,但可能对你有用。
我创建了一个全局堆栈以允许嵌套游标更改。它允许任何一段代码将鼠标光标设置为他们想要的,而不用担心他们的调用者或被调用者的设置。
例如:
procedure AskUserWhatToDo;
begin
PushMouseCursor(crArrow);
try
if MessageDlg('Abort?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
SysUtils.Abort;
finally
PopMouseCursor;
end;
end;
procedure LongProcess;
begin
PushMouseCursor(crHourglass);
try
// do something
if QuestionableState then
AskUserWhatToDo;
// do something
finally
PopMouseCursor;
end;
end;
两个程序都不必担心其他程序需要什么状态或离开鼠标光标。
//===============================================================
// in a universal utility module (mine is called CraftWindows.pas)
function SetMouseCursor(ACursor : TCursor) : TCursor;
begin
Result := Screen.Cursor;
Screen.Cursor := ACursor;
end;
var
GlobalMouseCursorStack : TList = nil;
procedure PushMouseCursor(ACursor : TCursor);
begin
if GlobalMouseCursorStack = nil then
GlobalMouseCursorStack := TList.Create;
GlobalMouseCursorStack.Add(Pointer(SetMouseCursor(ACursor)));
end;
procedure PopMouseCursor;
begin
if (GlobalMouseCursorStack <> nil) and (GlobalMouseCursorStack.Count > 0) then
begin
SetMouseCursor(TCursor(GlobalMouseCursorStack.Last));
GlobalMouseCursorStack.Delete(GlobalMouseCursorStack.Count - 1);
end;
end;
...
finalization
GlobalMouseCursorStack.Free;
【讨论】:
以上是关于Unity3D写C#脚本,用鼠标左键按下选中模型时,控制一个模型按照模型的X轴向移动,Y轴向移动,Z轴向移动。的主要内容,如果未能解决你的问题,请参考以下文章
Chrome浏览器下JQuery实现鼠标左键按下移动,鼠标左键抬起停止移动功能的问题
如何在鼠标左键按下时触发循环 autoclicker c++