ПредишенСледващото

Добър ден. В една или друга форма, този въпрос вече е бил помолен да forume.No за съжаление за мен и не изчиства. Задачата е както следва: - в сцената на няколко обекта (на отворите вградения Prefab), 10-20sht (някои влагане). Необходимост от едно кликване на мишката, или да ги скриете избирателно. Или (което е много по-добре.) Промяна материал (за предпочитане прозрачен) обект. До него ischeznoveniya.Odin кликнете селекция (осветен обект), втори клик 50% прозрачност, а третият кликнете vidimost.Nu нула и желателно да бъде в състояние да се върне на видимостта на всички обекти, като по този начин скрити.
Сега имам камерата да се върти около група виси скрипт намерено в мрежата:

# 91; AddComponentMenu # 40; "Камера-Control / 3dsMax Камера Style" # 41; # 93;

обществен maxCamera клас. MonoBehaviour

обществена трансформация мишена;

обществен Vector3 targetOffset;

фрий-флоут разстояние = 5.0f;

фрий-флоут maxDistance = 20;

фрий-флоут minDistance = .6f;

фрий-флоут xSpeed ​​= 200.0f;

фрий-флоут ySpeed ​​= 200.0f;

обществен инт yMinLimit = - 80;

обществен инт yMaxLimit = 80;

обществен инт zoomRate = 40;

фрий-флоут panSpeed ​​= 0.3f;

фрий-флоут zoomDampening = 5.0f;

частен поплавък xDeg = 0.0f;

частен поплавък yDeg = 0.0f;

частен поплавък currentDistance;

частен поплавък desiredDistance;

частен четворица currentRotation;

частен четворица desiredRotation;

частен четворица въртене;

частен Vector3 положение;

нищожен Старт # 40; # 41; # 123; Init # 40; # 41; ; # 125;

нищожен OnEnable # 40; # 41; # 123; Init # 40; # 41; ; # 125;

обществени невалидни Init # 40; # 41;

// Ако няма цел, да създаде временна мишена на "разстояние" от камерите сегашната гледна точка

ако # 40. мишена # 41;

GameObject отидете = нов GameObject # 40; "Cam Target" # 41; ;

отида. трансформира. позиция = трансформира. позиция + # 40; трансформира. напред * разстояние # 41; ;

целеви = отида. трансформиране;

разстояние = Vector3. разстояние # 40; трансформира. позиция. мишена. позиция # 41; ;

// не забравяйте да вземете настоящите ротации като начални точки.

позиция = трансформира. положение;

въртене = трансформира. въртене;

currentRotation = трансформира. въртене;

desiredRotation = трансформира. въртене;

xDeg = Vector3. ъгъл # 40; Vector3. прав. трансформира. прав # 41; ;

yDeg = Vector3. ъгъл # 40; Vector3. нагоре. трансформира. нагоре # 41; ;

* Камера логика на LateUpdate само актуализация в края на краищата логика характер движение са били обработени.

нищожен LateUpdate # 40; # 41;

// Ако Control и Alt и Близкия бутон? ZOOM!

ако # 40; Input. GetMouseButton # 40; 1 # 41; # 41;

desiredDistance - = въвеждане. GetAxis # 40; "Мишка X" # 41; * Time. deltaTime * * zoomRate 0.125f * Mathf. коремни мускули # 40; desiredDistance # 41; ;

// Ако са избрани средата на мишката и левия н? ORBIT

иначе, ако # 40; Input. GetMouseButton # 40; 0 # 41; # 41;

xDeg + = въвеждане. GetAxis # 40; "Мишка X" # 41; * * XSpeed ​​0.02f;

yDeg - = въвеждане. GetAxis # 40; "Мишка Y" # 41; * * YSpeed ​​0.02f;

// Clamp вертикалната ос на орбитата

yDeg = ClampAngle # 40; yDeg, yMinLimit, yMaxLimit # 41; ;

// настроен въртене камера

desiredRotation = четворка. Ойлер # 40; yDeg, xDeg, 0 # 41; ;

currentRotation = трансформира. въртене;

въртене = четворка. Lerp # 40; currentRotation, desiredRotation, Time. deltaTime * zoomDampening # 41; ;

трансформира. въртене = въртене;

// в противен случай, ако е избран средата на мишката, ние се придвижвате по пътя на превръщането на целта в screenspace

иначе, ако # 40; Input. GetMouseButton # 40; 2 # 41; # 41;

// вземете въртенето на камерата, така че ние може да се движи в една псевдо местното пространство XY

мишена. въртене = трансформира. въртене;

мишена. превеждам # 40; Vector3. десен * - вход. GetAxis # 40; "Мишка X" # 41; * panSpeed # 41; ;

мишена. превеждам # 40; трансформира. нагоре * - вход. GetAxis # 40; "Мишка Y" # 41; * PanSpeed, Space. свят # 41; ;

// засегне желания Zoom разстоянието, ако пуснем колелце за превъртане

desiredDistance - = въвеждане. GetAxis # 40; "Мишка колелце за превъртане" # 41; * Time. deltaTime * * zoomRate Mathf. коремни мускули # 40; desiredDistance # 41; ;

// стяга увеличение мин / макс

desiredDistance = Mathf. скоба # 40; desiredDistance, minDistance, maxDistance # 41; ;

// За изглаждане на вариото, lerp разстояние

currentDistance = Mathf. Lerp # 40; currentDistance, desiredDistance, Time. deltaTime * zoomDampening # 41; ;

// изчисли позиция въз основа на новата currentDistance

позиция = мишена. позиция - # 40; въртене * Vector3. напред * currentDistance + targetOffset # 41; ;

трансформира. позиция = позиция;

частен статична плувка ClampAngle # 40; поплавък ъгъл, поплавък минути, макс поплавък # 41;

ако # 40; ъгъл <- 360 )

ако # 40; ъгъл> 360 # 41;

върнете Mathf. скоба # 40; ъгъл, минути, макс # 41; ;


Тъй като имам много малко (или по-скоро не на всички.) Запознат с програмирането, той не е в състояние да управлява. Единственото нещо, което е знаел да намерите във форума - това е по-добре да го направя през Raycast.
Как да се мотае един скрипт за всяко око.
Моля, кажете ми в коя посока се копае. Или вече има готови решения.
Може би това ще бъде достатъчно, за да се допълни сценария, който вече е с тегло на камерата и контролите е сега.

Намерени тук такъв код

обществени клас DebugScript. MonoBehaviour # 123;
частен булев _debug = вярно;
нищожен Актуализация # 40; # 41;
# 123;
ако # 40; Input. GetMouseButtonUp # 40; 0 # 41; # 41;
# 123;
Рей лъч = Камера. Основната. ScreenPointToRay # 40; Input. mousePosition # 41; ;
RaycastHit удари;
ако # 40; Физика. Raycast # 40; лъчи, от удари, 100 # 41; # 41;
# 123;
ако # 40; _debug # 41; Debug. DrawLine # 40; лъч. произход. удари. точка # 41; ;
ако # 40; удари. ускорител. gameObject. етикет == "MyTag" # 41;
удари. ускорител. gameObject. рендер. материал. цвят = цвят. зелен;
# 125;
# 125;
# 125;
# 125;

Но Unity кълне по линията:

Рей лъч = Камера. Основната. ScreenPointToRay # 40; Input. mousePosition # 41; ;

NullReferenceException
UnityEngine.Camera.ScreenPointToRay (Vector3 позиция) (в C: /BuildAgent/work/842f9557127e852/Runtime/ExportGenerated/Editor/UnityEngineCamera.cs: 267)

за съжаление не направих нищо, казва
example.Update () (в активи / example.cs: 10)

Може би това е, което е написано на кода за по-ранна версия на Unity. Сега имам версия 3.4

Сега също е на разположение), но не достатъчно е ускорител на обекта. Вече спечелил. Благодаря Ви много.
Сега ще бъде на пълнотата на първоначалния проблем и да се учат - за да изключите избора в първия избрания елемент при избора на следващия. включва прозрачност в обекти, да ги скрие, и е желателно да покажете всичко.
Може би, например, като се използва един и същ скрипт, но добавят към нея?

Zapialsya програмиране курс + HTML!


Аз е по-подходяща за по-лесно и работи, но не мога да намеря как да се върне оригиналния материал. Точно както не е възможно да се върне оригиналния материал, както и с помощта на: -

обществени клас DebugScript. MonoBehaviour # 123;
частен булев _debug = вярно;
нищожен Актуализация # 40; # 41;
# 123;
ако # 40; Input. GetMouseButtonUp # 40; 0 # 41; # 41;
# 123;
Рей лъч = Камера. Основната. ScreenPointToRay # 40; Input. mousePosition # 41; ;
RaycastHit удари;
ако # 40; Физика. Raycast # 40; лъчи, от удари, 100 # 41; # 41;
# 123;
ако # 40; _debug # 41; Debug. DrawLine # 40; лъч. произход. удари. точка # 41; ;
ако # 40; удари. ускорител. gameObject. етикет == "MyTag" # 41;
удари. ускорител. gameObject. рендер. материал. цвят = цвят. зелен;
# 125;
# 125;
# 125;
# 125;

Тази опция е удобна, тъй като не е необходимо да се мотае сценария за всяка мрежа.

Подкрепете проекта - споделете линка, благодаря!