传送门教程-倒计时时钟

From Valve Developer Community
< Zh
Jump to navigation Jump to search
传送门关卡制作


本教程将展示如何创建在传送门portal(en)的第一个实验室中看到的时钟。时钟用于显示距离第一个房间中的传送门打开还剩多少时间。


创建

第一步

时钟的模型

创建一个prop_dynamic(en)实体,并将模型设定为models/props/clock.mdl,将其Pitch Yaw Roll改为-90 180 0并将禁用阴影设置为yes

第二步

创建一个对齐最左边的2w*10l*10h笔刷aligned to the left within the clock model. Texture the front side with signage/clock/clock_minutes and press "Fit" to fit the texture on the brush. Tie this brush to a func_brush(en) entity and set its Name to brush_clock_minutes.

Next create a 2w*2l*10h brush right next to the previous brush. Texture the front with signage/clock/clock_dots and fit the texture to the brush. Tie this brush to a func_detail(en) entity.

After that, create another 2w*10l*10h brush next to the previous brush and texture the front with signage/clock/clock_seconds and fit the texture to the brush. Tie this brush to a func_brush entity and set its Name to brush_clock_seconds.

Create another 2w*2l*10h brush with the front textured with signage/clock/clock_dots and tie it to a func_detail.

Now create another 2w*10l*10h brush and texture the front with signage/clock/clock_centiseconds. Tie it to a func_brush and set its Name to brush_clock_centiseconds.

Next create another 2w*2l*10h func_detail brush with the front textured with signage/clock/clock_dots.

Finally, create another 2w*10l*10h with the front textured with signage/clock/clock_milliseconds. Tie it to a func_brush and set its Name to brush_clock_milliseconds.


Step 3

Create an env_texturetoggle(en) entity. Set its Name to texturetoggle_clock_minutes and set its Target Brush(es) to brush_clock_minutes.

Next create another env_texturetoggle and set its Name to texturetoggle_clock_seconds and set its Target Brush(es) to brush_clock_seconds.

After that, create a material_modify_control(en) entity. Set its Name to mmc_clock_centiseconds, set its Parent to brush_clock_centiseconds, set its Material to modify. to signage/clock/clock_centiseconds, and set its Material variable to modify to $frame.

Finally, create another material_modify_control entity and set its Name to mmc_clock_milliseconds, set its Parent to brush_clock_milliseconds, set its Material to modify. to signage/clock/clock_milliseconds, and set its Material variable to modify to $frame.


Step 4

Create a logic_timer(en) entity. Set its Name to timer_clock_minutes, set Start Disabled to Yes and set its Refire Interval to 1. Next, give it the following outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer texturetoggle_clock_minutes IncrementTextureIndex   0.00 No
Io11.png OnTimer timer_clock_minutes Disable   0.10 No


Next, create another logic_timer entity and set its Name to timer_clock_seconds, set Start Disabled to Yes, and set its Refire Interval to 1. Add the following outputs to it:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer texturetoggle_clock_seconds IncrementTextureIndex   0.00 No
Io12.png OnTimer counter_clock Add 1 0.00 No
Io12.png OnTimer counter_clock_2 Add 1 0.00 No


After that, create another logic_timer entity. Set its Name to timer_clock_centiseconds, set Start Disabled to Yes, set its Refire Interval to 1, and add the following output to it:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer mmc_clock_centiseconds StartFloatLerp 0 59 1 0 0.00 No


Finally, create another logic_timer entity and set its Name to timer_clock_milliseconds, set Start Disabled to Yes, and set its Refire Interval to .1. Add the following output to it:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer mmc_clock_milliseconds StartFloatLerp 0 9 .1 1 0.00 No


Step 5

The counter_clock entity

Create a math_counter(en) entity. Set its Name to counter_clock, set its Maximum Legal Value to 60, and add the following outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnHitMax timer_clock_seconds Disable   0.00 No
Io11.png OnHitMax texturetoggle_clock_seconds SetTextureIndex 59 0.00 No
Io12.png OnHitMax timer_ticktock1 Disable   0.00 No
The counter_clock_2 entity

Next, create another math_counter and set its Name to counter_clock_2 and set its Maximum Legal Value to 59. Now add the following outputs to it:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnHitMax timer_clock_centiseconds Disable   0.00 No
Io11.png OnHitMax timer_clock_milliseconds Disable   1.00 No

Step 6

The sound_ticktock1 entity

Create a ambient_generic(en) entity. Set its Name to sound_ticktock1, set its Sound Name to Portal.room1_TickTock, set its Volume to 5 and set its Max Audible Distance to 441.

The timer_ticktock1 entity

Next, create a logic_timer entity, set its Name to timer_ticktock1, set Start Disabled to Yes, set its Refire Interval to 1 and add the following output to it:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer sound_ticktock1 PlaySound   0.00 No

Step 7

The logic_auto entity

Create a logic_auto(en) entity and add the following outputs to it:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMapSpawn mmc_clock_milliseconds SetMaterialVar 9 0.00 No
Io11.png OnMapSpawn mmc_clock_centiseconds SetMaterialVar 59 0.00 No
Io11.png OnMapSpawn texturetoggle_clock_seconds SetTextureIndex 59 0.00 No

Step 8

The relay_start_clock entity

Create a logic_relay(en) and set its Name to relay_start_clock. Add the following outputs to it:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger timer_clock_minutes Enable   0.00 No
Io11.png OnTrigger timer_clock_seconds Enable   0.00 No
Io11.png OnTrigger timer_clock_centiseconds Enable   0.00 No
Io11.png OnTrigger timer_ticktock1 Enable   0.00 No
Io11.png OnTrigger timer_clock_milliseconds Enable   0.90 No

The clock is now finished and ready to be implemented in a map.

Implementation

Step 1

Position the clock on the wall where it should be in the map.

Step 2

Send the Trigger input to the relay_start_clock relay when the countdown should begin.