[Tutorial] Öffnende Tür erstellen * |
Sorkan
Teetrinker
Dabei seit: 18.01.2006
Beiträge: 30
|
|
Es tut mir leid, aber ich raffs alleine nicht. Habe genau das unten stehende Script eins zu eins per copy and paste übertragen. Habe auch die Trigger in meinem Tür-Prefab so bezeichnet wie im Script, also trigger_1_tuer_, und trigger_2_tuer_1...
Jedoch bringt er mir jedesmal diesen Fehler, auch wenn ichs erstmal nur mit einer Tür probiere.
Ich möchte für meine Map eben solch einen Schiebetürmechanismus a la Supermarkt. Aber auch nachdem ich im Wiki die Rubrik Scripten mir angesehen habe, verstehe ich zwar,was da (also im Script) steht, kanns aber nicht nachvollziehen, bzw. den Fehler selbst lokalisieren.
Original von Nightwing
Script ist logischerweise auf mehrere Türen erweiterbar:
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
|
main(){
thread door1();
thread door2();
}
door1(){
level.door1_open = false;
thread door1_trigger_right();
thread door1_trigger_left();
}
door1_trigger_right(){
door1 = getent ("door1","targetname");
door1_trigger_right = getent ("trigger_1_tuer_1","targetname");
while (1){
door1_trigger_right waittill ("trigger");
if (level.door1_open == true){
thread door1_trigger_left();
return;
}
else if (level.door1_open == false){
level.door1_open = true;
door1 rotateroll(-90,3.8,0.5,0.5);
door1 playsound ("door_open");
door1 waittill ("rotatedone");
wait 5;
door1 rotateroll(90,3.3,0.5,0.5);
door1 playsound ("door_close");
door1 waittill ("rotatedone");
level.door1_open = false;
thread door1_trigger_right();
thread door1_trigger_left();
return;
}
}
}
door1_trigger_left(){
door1 = getent ("door1","targetname");
door1_trigger_left = getent ("trigger_2_tuer_1","targetname");
while (1){
door1_trigger_left waittill ("trigger");
if (level.door1_open == true){
thread door1_trigger_right();
return;
}
else if (level.door1_open == false){
level.door1_open = true;
door1 rotateroll(90,3.8,0.5,0.5);
door1 playsound ("door_open");
door1 waittill ("rotatedone");
wait 5;
door1 rotateroll(-90,3.3,0.5,0.5);
door1 playsound ("door_close");
door1 waittill ("rotatedone");
level.door1_open = false;
thread door1_trigger_left();
thread door1_trigger_right();
return;
}
}
}
door2(){
level.door2_open = false;
thread door2_trigger_right();
thread door2_trigger_left();
}
door2_trigger_right(){
door2 = getent ("door2","targetname");
door2_trigger_right = getent ("trigger_1_tuer_2","targetname");
while (1){
door2_trigger_right waittill ("trigger");
if (level.door2_open == true){
thread door2_trigger_left();
return;
}
else if (level.door2_open == false){
level.door2_open = true;
door2 rotateroll(-90,3.8,0.5,0.5);
door2 playsound ("door_open");
door2 waittill ("rotatedone");
wait 5;
door2 rotateroll(90,3.3,0.5,0.5);
door2 playsound ("door_close");
door2 waittill ("rotatedone");
level.door2_open = false;
thread door2_trigger_right();
thread door2_trigger_left();
return;
}
}
}
door2_trigger_left(){
door2 = getent ("door2","targetname");
door2_trigger_left = getent ("trigger_2_tuer_2","targetname");
while (1){
door2_trigger_left waittill ("trigger");
if (level.door2_open == true){
thread door2_trigger_right();
return;
}
else if (level.door2_open == false){
level.door1_open = true;
door2 rotateroll(90,3.8,0.5,0.5);
door2 playsound ("door_open");
door2 waittill ("rotatedone");
wait 5;
door2 rotateroll(-90,3.3,0.5,0.5);
door2 playsound ("door_close");
door2 waittill ("rotatedone");
level.door2_open = false;
thread door2_trigger_left();
thread door2_trigger_right();
return;
}
}
}
|
|
Anstelle des rotateRoll, rotateYaw oder rotatePitch kann man auch moveX, moveY oder moveZ eingeben für eine Schiebetür a la Supermarkt bzw einen Fahrstuhl.
Dann heissts eben waittill ("movedone"); anstelle von waittill ("rotatedone");
ToM
|
|
|
|
|
Sorkan
Teetrinker
Dabei seit: 18.01.2006
Beiträge: 30
|
|
Öhm, nö.
So sieht meine Tür aus: 2 Türhälften mit jeweils einem origin-dings verbunden (so wie in der anleitung beschrieben). Jede Türhälfte hat als targetname ihren eigenen, also ...1_tuer_1, ...2_tuer_1, ...1_tuer_2 und ...2_tuer_2. Weil ja jjede Hälfte ansteuerbar sein muss und 2 Siten hat, komme ich (so wie in Nightwings Script zumindest angedacht) auf 4 Trigger. Diese hab ich dann entsprechend auf dem Scriptmodel plaziert und den targetname eingetragen. 1_tuer1 auf die linke seite der tür, 2_tuer_1 auf die rechte seite...
Der Türrahmen ist selbst kein Scriptmodel, sondern nur die Türhälften, die sich so öffnen solen, wies z.B. auch bemi Kwik–E–Marts bei den Simpsons, oder Raumschiff Enterprise. Einzeln kann ich die Dinger mit der hier im Thread zuerstgenannten Scriptvorlage schön bewegen, aber sie sollen ja beide gleichzeitig aufgehen, quasi einmal aufmachen, egal ob rechte oder linke Hälfte, und schon öffnen sich beide gleichzeitig.
Mein Prefab:
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Sorkan: 24.05.2008 14:39.
|
|
|
|
|
|
Ich frage mich ernsthaft, wieso Du mit einer Doppeltür arbeitest? Es reicht doch völlig eine Tür. Ein Türblatt links und eins rechts. Hier mal ein einfacheres Script, rotate durch move ersetzen...
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
|
main(){
thread door1();
}
door1(){
level.door1_open = false;
thread door1_trigger_right();
thread door1_trigger_left();
}
door1_trigger_right(){
door1 = getent ("door1","targetname");
door1_trigger_right = getent ("trigger_1_tuer_1","targetname");
time = 5;
while (1){
door1_trigger_right waittill ("trigger");
if (level.door1_open == true){
thread door1_trigger_left();
return;
}
else if (level.door1_open == false){
level.door1_open = true;
door1 rotateroll(-90,3.8,0.5,0.5);
door1 playsound ("door_open");
door1 waittill ("rotatedone");
wait time;
door1 rotateroll(90,3.3,0.5,0.5);
door1 playsound ("door_close");
door1 waittill ("rotatedone");
level.door1_open = false;
thread door1_trigger_right();
thread door1_trigger_left();
return;
}
}
}
door1_trigger_left(){
door1 = getent ("door1","targetname");
door1_trigger_left = getent ("trigger_2_tuer_1","targetname");
time = 5;
while (1){
door1_trigger_left waittill ("trigger");
if (level.door1_open == true){
thread door1_trigger_right();
return;
}
else if (level.door1_open == false){
level.door1_open = true;
door1 rotateroll(90,3.8,0.5,0.5);
door1 playsound ("door_open");
door1 waittill ("rotatedone");
wait time;
door1 rotateroll(-90,3.3,0.5,0.5);
door1 playsound ("door_close");
door1 waittill ("rotatedone");
level.door1_open = false;
thread door1_trigger_left();
thread door1_trigger_right();
return;
}
}
} |
|
Viel Erfolg
ToM
__________________
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Nightwing: 24.05.2008 15:01.
|
|
|
|
|
Sorkan
Teetrinker
Dabei seit: 18.01.2006
Beiträge: 30
|
|
Dann habe ich mich unverständlich ausgedrückt. Ich arbeite mit 2 Türen (meintest du damit 2 Türblätter?). Diese sollen sich gleichzeitig öffnen. Die eine nach links, die andere nach rechts. Supermarkt halt. Habe Dein Script eben übernommen, dann in meinem Prefab den linken Trigger mit trigger_1_tuer_1 versehen und den rechten entsprechend anders. Habe also nun 2 Scriptbrushmodel mit jeweils einem Trigger. Scriptbrushmodel links (linke tür, also türhälfte der großen tür) ist mit Trigger ..._tuer_1 versehen, der andere brush entsprechend mit dem anderen Trigger. Habe dann in der gsc Dein Script eingefügt, alle betreffenden Dateien nochmal vorher gelöscht und neu erstellen lassen. Aber leider kommt noch immer dereingangs erwähnte Fehler. Ist es wichtig, dass ich mein Prefab mehrmals in der Map habe?
Es tut mir auch wirklich leid, dass ich da nicht alleine weiterkomme.
Vielen Dank für Eure Gedud.
Oder liegts daran, dass ich 2 Scriptbrushmodel habe und eigentlich nur eins bräuchte? Also nur einen, ich nenns mal, Originstreifen und nicht 2 (für jede Türhälfte einen)?
Selbst wenn ich alle Trigger von meinem Prefab entferne, gibts den Fehler.?
Edit: Gut, habe den Fehler lokalisiert. Es ist so, dass das Script für eine Tür funktioniert, sobald ich aber mehrere von diesen Türen in der Map plaziere, gehts nicht mehr, dann kommt dieser Fehler, also nun meine neue Frage:
Wie kann ich mehrere Türen (als Prefab) benutzen mit nur einem Script, das muss irgendwie mit arrays gehn, nur wie?
Und weiter:
Dein Script funzt mit den Schiebetüren separat. Wie kann ich aber mit der Aktivierung einer der Türen BEIDE gleichzeitig aktivieren?
Thx for all help.
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Sorkan: 24.05.2008 20:20.
|
|
|
|
|
|
Hey kann ich auch durch eingabe einer Variablen (z.B. Key = "rotation" und Value = "-90") die Rotation einer Türe einstellen oder muss ich für jede Türe nen eigendes _door script erstellen?
danke schonmal
|
|
|
|
|
|
|
|
Impressum ||Datenschutzerklärung
|