Create, Compete & Win at Redbrick Connect 2024! πŸŽ‰
ν…μŠ€νŠΈ μ½”λ”©λ‚΄μž₯ λͺ¨λ“ˆTWEEN트윈 라이프사이클

트윈 라이프사이클

λ‹€μŒμ˜ ν•¨μˆ˜λ“€μ„ 트윈의 μ‹€ν–‰ 사이클 쀑간에 직접 μ •μ˜ν•œ ν•¨μˆ˜λ“€μ„ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” ν•¨μˆ˜λ“€μž…λ‹ˆλ‹€.

.onStart()

.onStart(callback)

트윈이 μ‹œμž‘ν•  λ•Œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

// onStart Example - GUI
let opacityTween;
 
function Start() {
  this.hide();
 
  const initialProperty = { opacity: 1 };
  opacityTween = new TWEEN.Tween(initialProperty);
  opacityTween.to({ opacity: 0 });
  // GUI shows when tween starts
  opacityTween.onStart(() => {
    this.show();
  });
}
 
function OnKeyDown(event) {
  if (event.code === "KeyM") {
    opacityTween.start();
  }
}

.onUpdate()

.onUpdate(callback)

트윈의 λŒ€μƒμ΄ λ˜λŠ” 객체의 값이 μ—…λ°μ΄νŠΈ 될 λ•Œλ§ˆλ‹€ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

// onUpdate Example - GUI
let opacityTween;
 
function Start() {
  this.hide();
 
  const initialProperty = { opacity: 1 };
  opacityTween = new TWEEN.Tween(initialProperty);
  opacityTween.to({ opacity: 0 });
  opacityTween.onStart(() => {
    this.show();
  });
  // opacity changes when the tween value is updated.
  opacityTween.onUpdate(() => {
    this.material.opacity = initialProperty.opacity;
  });
}
 
function OnKeyDown(event) {
  if (event.code === "KeyM") {
    opacityTween.start();
  }
}

.onComplete()

.onComplete(callback)

트윈이 끝날 λ•Œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

// onComplete Example - GUI
let opacityTween;
 
function Start() {
	this.hide();
 
	const initialProperty = {opacity: 1}
	opacityTween = new TWEEN.Tween(initialProperty);
	opacityTween.to({opacity: 0})
	opacityTween.onStart(() => {this.show()});
	opacityTween.onUpdate(() => {this.material.opacity = initialProperty.opacity});
	// GUI hides when tween ends
	opacityTween.onComplete(() => {this.hide()});
}
​
function OnKeyDown(event) {
    if (event.code === "KeyM") {
        opacityTween.start();
    }
}