본문 바로가기
가상세계 산사VR

가상세계도 지진이 있나요?

가상세계 산사VR의 크레이 월드에서는 가끔 지진이 일어납니다.

가상세계의 지진

물론 인위적이긴 하지만요 ㅎㅎ
크레이 월드 어딘가 이런 표지판이 있을텐데요.
지진을 일으키는 방법이 소개되어 있습니다.

가상세계의 지진

스크립트 소스입니다 :)

using Sansar;
using Sansar.Script;
using Sansar.Simulation;
using System.Runtime.Serialization;
using System;

public class earthquakeScript : SceneObjectScript
{
    public double earthQuakeTime=0.0;

    [DisplayName("강도")]
    [DefaultValue(0.4)]
    public double strength = 0;
    public override void Init()
    {
        // 채팅 채널 0번으로부터 메시지 송신을 대기하고 메시지가 송신되면 
        // ChatMessage 콜백함수를 실행합니다.
        ScenePrivate.Chat.Subscribe(0, null, ChatMessage, true);
        
    }

    // ChatMessage 콜백 함수
    private void ChatMessage(int Channel, string Source, SessionId SourceId, ScriptId SourceScriptId, string Message)
    {
        if(Message.Equals("/earthquake"))
        {
            earthQuakeTime = 2;
            earthquake();
        }
    }

    void earthquake()
    {
        // 0번 좌표부터 시작
        Vector step1;
        Vector step2;

        double strength_p = strength;

        // 무한반복
        while (true)
        {
            if (earthQuakeTime <= 0) break;
                        
            step1 = new Vector(0, (float)strength_p, 0);
            step2 = new Vector(0, (float)-strength_p, 0);


            WaitFor(
                ObjectPrivate.Mover.AddTranslate, // 좌표 이동
                ObjectPrivate.Position + step1 ,  // 이동할 위치
                0.1,     // 이동에 소요하게 할 시간
                MoveMode.Linear); // 죽각이동모드

            WaitFor(
                ObjectPrivate.Mover.AddTranslate, // 좌표 이동
                ObjectPrivate.Position + step2,  // 이동할 위치
                0.1,     // 이동에 소요하게 할 시간
                MoveMode.Linear); // 죽각이동모드

            earthQuakeTime -= 0.2;
            strength_p *= 0.7;
        }
    }
}