VRMMORPGβ版

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>エルダークロニクル:VR超完全版 – ロードなし(拾う/装備修正)</title>
  <script src="https://aframe.io/releases/1.4.2/aframe.min.js"></script>
  <style>
    body, html { margin:0; padding:0; overflow:hidden; font-family:'Yu Gothic',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; background:#000;}
    #ui {
      position:absolute; top:20px; left:20px; z-index:10; width:400px; color:#fff;
      background:linear-gradient(180deg,rgba(0,0,0,.92),rgba(0,10,30,.85));
      border-radius:16px; padding:14px 16px; box-shadow:0 0 25px #0ff,0 0 18px #33f4; font-size:15px;
    }
    h2 { margin:0 0 8px 0; font-size:22px; letter-spacing:1px;}
    .row { display:flex; gap:8px; align-items:center; flex-wrap:wrap;}
    .row > * { flex: 1 1 auto; }
    input, select { width:100%; padding:6px 8px; border-radius:8px; border:1px solid #024; background:#00131f; color:#cfe9ff; }
    button {
      background:linear-gradient(90deg,#555,#222 80%);
      color:#fff; padding:10px; margin:5px 0; border:none; cursor:pointer; width:100%;
      border-radius:8px; font-weight:bold; letter-spacing:1px; box-shadow:0 1px 8px #0cf5; transition:background .25s;
    }
    button:hover { background:linear-gradient(90deg,#888 40%,#3cf); }
    .section-title { font-weight:bold; font-size:17px; margin-top:10px; border-bottom:2px solid #5ef; letter-spacing:1.2px; }
    .bar { height:14px; background:#13202a; border-radius:7px; overflow:hidden; margin:6px 0; box-shadow:0 1px 6px #0ff6 inset; }
    .bar-inner { height:100%; background:linear-gradient(90deg,#0f0,#3af); transition:width .25s; }
    .mana-bar .bar-inner { background:linear-gradient(90deg,#33d,#6ff); }
    .enemyhp-bar .bar-inner { background:linear-gradient(90deg,#f55,#fdd); }
    #scenario { margin:10px 0 6px 0; background:rgba(0,10,32,0.7); padding:8px 12px; border-radius:8px; min-height:44px; }
    .kbd { display:inline-block; padding:1px 6px; border-radius:6px; background:#0a2636; border:1px solid #124; font-family:monospace; }
    #hint {
      position:absolute; bottom:18px; left:50%; transform:translateX(-50%);
      color:#eaffff; background:rgba(0,20,35,.72); border:1px solid #0af; padding:8px 12px; border-radius:10px;
      box-shadow:0 0 18px #08f5; font-size:14px; z-index:10;
    }
    #pickupPrompt {
      position:absolute; bottom:70px; left:50%; transform:translateX(-50%);
      color:#fff; background:rgba(0,0,0,.7); border:1px solid #38f; padding:8px 12px; border-radius:10px;
      display:none; z-index:10;
    }
    .tag { display:inline-block; padding:2px 6px; border-radius:6px; background:#012233; border:1px solid #1a4e6c; margin-left:6px; font-size:12px; color:#bfe6ff;}
    .on { background:#0b3754; border-color:#3db3ff; color:#fff; }
  </style>
</head>
<body>
  <div id="ui">
    <h2>エルダークロニクルVR</h2>
    <div class="row">
      <span>プレイヤー名:</span>
      <input id="playerName" placeholder="名前を入力">
    </div>

    <div class="row"><span>レベル:</span><span id="level" class="tag on">1</span>
      <span>装備:</span><span id="equipment" class="tag">なし</span>
    </div>

    <div>HP: <span id="hpText">100</span></div>
    <div class="bar"><div id="hpBar" class="bar-inner" style="width:100%"></div></div>
    <div>魔力: <span id="manaText">100</span></div>
    <div class="bar mana-bar"><div id="manaBar" class="bar-inner" style="width:100%"></div></div>

    <div>敵HP: <span id="enemyHpText">120</span></div>
    <div class="bar enemyhp-bar"><div id="enemyHpBar" class="bar-inner" style="width:100%"></div></div>

    <div class="section-title">シナリオ</div>
    <div id="scenario"></div>

    <div class="section-title">行動</div>
    <button onclick="levelUp()">🎉 レベルアップ</button>
    <button onclick="castSpell()">🪄 魔法発動</button>
    <button onclick="choosePath('wizard')">🧙‍♂️ 魔導士に話す</button>
    <button onclick="choosePath('knight')">🛡️ 騎士に話す</button>
    <button onclick="receiveQuest()">📜 クエスト受注</button>
    <button onclick="toggleEnvironment()">🌄 昼夜切替</button>

    <div class="section-title">移動</div>
    <div class="row">
      <button onclick="changeField('town')">🏘️ 街</button>
      <button onclick="changeField('castle')">🏰 城</button>
    </div>
    <div class="row">
      <button onclick="changeField('cave')">🕳️ 洞窟</button>
      <button onclick="changeField('ruins')">🏛️ 遺跡</button>
    </div>
    <div class="row">
      <button onclick="changeField('dungeon')">🧩 ダンジョン</button>
    </div>

    <div class="section-title">操作</div>
    <div style="line-height:1.6">
      <span class="kbd">WASD</span> 移動 
      <span class="kbd">マウス</span> 視点 
      <span class="kbd">E</span> 拾う 
      <span class="kbd">1</span> 剣装備 
      <span class="kbd">2</span> 銃装備 
      <span class="kbd">クリック</span> 攻撃
    </div>
  </div>

  <div id="pickupPrompt">Eで拾う</div>
  <div id="hint">近くの武器に近づいて <span class="kbd">E</span> で拾い、<span class="kbd">1/2</span> で装備、クリックで攻撃!</div>

  <a-scene loading-screen="enabled:false" renderer="colorManagement:true" shadow="true">
    <a-sky id="sky" color="#0e163e"></a-sky>

    <a-entity id="starParticles" position="0 25 -40" visible="false">
      <a-entity geometry="primitive:sphere; radius:0.18" material="color:#fff; opacity:0.6" position="-10 3 0"></a-entity>
      <a-entity geometry="primitive:sphere; radius:0.12" material="color:#fff; opacity:0.8" position="7 2 -2"></a-entity>
      <a-entity geometry="primitive:sphere; radius:0.11" material="color:#eaf6ff; opacity:0.9" position="3 5 2"></a-entity>
      <a-entity geometry="primitive:sphere; radius:0.10" material="color:#ffe; opacity:0.7" position="13 3 5"></a-entity>
    </a-entity>
    <a-entity id="cloudParticles" position="0 30 -35" visible="true">
      <a-sphere radius="5" position="8 2 -8" color="#f6fbff" opacity="0.18"></a-sphere>
      <a-sphere radius="6" position="-7 3 5" color="#eefbff" opacity="0.14"></a-sphere>
    </a-entity>

    <a-light type="ambient" color="#fff" intensity="1"></a-light>
    <a-light id="sunlight" type="directional" intensity="1.6" position="20 25 -8" castShadow="true" shadow-mapWidth="1024" shadow-mapHeight="1024"></a-light>
    <a-light type="point" color="#cff" intensity="2.2" distance="50" position="2 9 -3"></a-light>
    <a-light type="spot" color="#55aaff" position="0 15 -10" intensity="1.2" angle="30" penumbra="0.7"></a-light>

    <a-plane id="ground" position="0 0 0" rotation="-90 0 0" width="120" height="120" color="#375047" shadow="receive:true"></a-plane>

    <a-entity id="field-town" visible="true">
      <a-circle position="0 0 -6" radius="4" color="#7d7d7d" material="roughness:.9; metalness:.05; opacity:.84; transparent:true"></a-circle>
      <a-entity position="-2 0 -7">
        <a-box width="3.6" height="2.6" depth="2.4" color="#c0a47b" material="roughness:0.3; metalness:0.05" position="0 1.3 0"></a-box>
        <a-cone position="0 3 -0.1" radius-bottom="2.1" height="1.4" color="#7b5322"></a-cone>
        <a-text value="街の家" position="0 3.7 0" color="#fff" width="5" align="center"></a-text>
      </a-entity>
      <a-entity position="2 0 -9">
        <a-box width="2.2" height="2.2" depth="2.4" color="#a86f23" position="0 1.1 0"></a-box>
        <a-cone position="0 2.6 0" radius-bottom="1.4" height="1.0" color="#5c3a12"></a-cone>
      </a-entity>
      <a-entity position="5 0 -5">
        <a-cylinder radius="0.25" height="4" color="#3a2a1a" position="0 2 0"></a-cylinder>
        <a-sphere radius="1.2" color="#174d1f" position="0 3.2 0"></a-sphere>
      </a-entity>
    </a-entity>

    <a-entity id="field-castle" visible="false">
      <a-box position="0 2.8 -12" depth="6" height="6" width="10" color="#ccd2df" material="roughness:0.25; metalness:0.12"></a-box>
      <a-cylinder position="-4 1.2 -13" radius="1.1" height="3.8" color="#858ca3"></a-cylinder>
      <a-cylinder position="4 1.2 -13" radius="1.1" height="3.8" color="#858ca3"></a-cylinder>
      <a-cone position="0 6.4 -12" radius-bottom="3.2" height="2" color="#dba"></a-cone>
      <a-entity geometry="primitive:torus; radius:2.5; tube:0.07" material="color:#66aaff; opacity:.25; transparent:true" position="0 4.5 -12"></a-entity>
      <a-text value="王の城" position="0 6.3 -12" color="#0bf" width="6" align="center"></a-text>
    </a-entity>

    <a-entity id="field-cave" visible="false">
      <a-torus position="2 1.1 -10" radius="1.8" tube="0.8" arc="230" color="#363636" rotation="40 0 90"></a-torus>
      <a-sphere position="2 0.4 -10" radius="1.1" color="#151515"></a-sphere>
      <a-entity position="-2 0 -8">
        <a-cone radius-bottom="0.8" height="2.2" color="#2a2a2a"></a-cone>
        <a-cone radius-bottom="0.5" height="1.4" color="#393939" position="0.7 0 0.4"></a-cone>
      </a-entity>
      <a-text value="洞窟の入口" position="2 2.9 -10" color="#fff" width="6" align="center"></a-text>
    </a-entity>

    <a-entity id="field-ruins" visible="false">
      <a-cylinder position="-2 1.1 -9" radius="0.8" height="2.6" color="#babbb2"></a-cylinder>
      <a-box position="-3.1 1.8 -9" width="3.5" height="0.32" depth="0.7" color="#e0dfc7"></a-box>
      <a-torus position="-2 2.3 -9" radius="0.6" tube="0.09" arc="340" color="#fffeee"></a-torus>
      <a-entity geometry="primitive:torusKnot; p:2; q:7; radius:0.7; tube:0.07" position="2 1.8 -8" material="color:#bcd; opacity:.7; transparent:true"></a-entity>
      <a-text value="古代の遺構" position="0 3.3 -8.5" color="#fff" width="6" align="center"></a-text>
    </a-entity>

    <a-entity id="field-dungeon" visible="false">
      <a-box position="2 1.2 -8.8" depth="3.3" height="2.3" width="3.6" color="#161651"></a-box>
      <a-torus-knot position="-1.5 2.7 -8.2" radius="0.9" tube="0.12" p="3" q="7" color="#64eaff"></a-torus-knot>
      <a-cylinder position="-3 0.7 -9.6" radius="0.8" height="1.2" color="#333"></a-cylinder>
      <a-entity geometry="primitive:torus; radius:1.4; tube:0.05" material="color:#aaeeff; opacity:.18; transparent:true" position="0 2.1 -8.6" rotation="90 0 0"></a-entity>
      <a-text value="ダンジョン入口" position="0 3.1 -8.4" color="#fff" width="6" align="center"></a-text>
    </a-entity>

    <!-- 武器ピックアップ -->
    <a-entity id="swordPickup" class="pickup" data-weapon="sword" position="-1 0 -5">
      <a-box width="0.16" height="1.3" depth="0.08" color="#cfe7ff" material="metalness:0.8; roughness:0.15" position="0 0.75 0"></a-box>
      <a-box width="0.5" height="0.08" depth="0.08" color="#333" position="0 0.1 0"></a-box>
      <a-cylinder radius="0.06" height="0.42" color="#7c5a2b" position="0 -0.1 0"></a-cylinder>
      <a-entity geometry="primitive:ring; radiusInner:0.45; radiusOuter:0.5" rotation="-90 0 0" position="0 0 0" material="color:#44d; opacity:.35; transparent:true"></a-entity>
      <a-text value="剣" color="#fff" position="0 1.7 0" align="center"></a-text>
    </a-entity>

    <a-entity id="gunPickup" class="pickup" data-weapon="gun" position="2 0 -5.5">
      <a-box width="0.7" height="0.18" depth="0.18" color="#222" position="0 0.4 0"></a-box>
      <a-box width="0.3" height="0.28" depth="0.18" color="#444" position="-0.2 0.2 0"></a-box>
      <a-box width="0.12" height="0.40" depth="0.16" color="#333" position="0.2 0.15 0"></a-box>
      <a-cylinder radius="0.06" height="0.28" color="#555" position="0.34 0.46 0" rotation="0 0 90"></a-cylinder>
      <a-entity geometry="primitive:ring; radiusInner:0.45; radiusOuter:0.5" rotation="-90 0 0" position="0 0 0" material="color:#0aa; opacity:.35; transparent:true"></a-entity>
      <a-text value="銃" color="#fff" position="0 1.0 0" align="center"></a-text>
    </a-entity>

    <!-- プレイヤー(リグが移動する:★修正) -->
    <a-entity id="rig" position="0 0 0" wasd-controls="acceleration:30">
      <a-entity id="cam" camera look-controls="pointerLockEnabled:true" position="0 1.6 3"></a-entity>
      <a-entity id="player" position="0 0 -1.5" rotation="0 180 0" shadow="cast:true">
        <a-sphere radius="0.18" color="#ffd7f0" position="0 1.58 0"></a-sphere>
        <a-cylinder radius="0.23" height="0.9" color="#9ad" position="0 1.02 0"></a-cylinder>
        <a-cylinder radius="0.08" height="0.55" color="#9ad" position="-0.16 0.74 0" rotation="0 0 18"></a-cylinder>
        <a-cylinder radius="0.08" height="0.55" color="#9ad" position="0.16 0.74 0" rotation="0 0 -18"></a-cylinder>
        <a-cylinder radius="0.09" height="0.7" color="#79b" position="-0.10 0.35 0"></a-cylinder>
        <a-cylinder radius="0.09" height="0.7" color="#79b" position="0.10 0.35 0"></a-cylinder>
      </a-entity>
    </a-entity>

    <!-- 敵 -->
    <a-entity id="enemy" position="0 0 -9" visible="true">
      <a-sphere id="enemyBody" radius="1.25" color="#9b1e1e" material="metalness:0.35; roughness:.25; emissive:#330000"></a-sphere>
      <a-entity geometry="primitive:torus; radius:1.4; tube:0.05" material="color:#ffeeaa; opacity:.18; transparent:true" position="0 0.3 0" rotation="90 0 0"></a-entity>
      <a-entity geometry="primitive:torusKnot; radius:0.45; tube:0.05; p:2; q:5" material="color:#ffa033; opacity:.22; transparent:true" position="0 1.0 0"></a-entity>
      <a-sphere position="-0.38 0.42 0.95" radius="0.14" color="#fff" material="metalness:.9; roughness:.05; emissive:#a0f"></a-sphere>
      <a-sphere position="0.38 0.42 0.95" radius="0.14" color="#fff" material="metalness:.9; roughness:.05; emissive:#a0f"></a-sphere>
      <a-cone position="-0.45 1.35 0.15" radius-bottom="0.16" height="0.62" color="#f5f3ff" rotation="15 0 60"></a-cone>
      <a-cone position="0.45 1.35 0.15" radius-bottom="0.16" height="0.62" color="#f5f3ff" rotation="15 0 -60"></a-cone>
      <a-text value="敵モンスター" position="0 2.15 0" align="center" color="#fff"></a-text>
    </a-entity>

    <a-entity id="spellEffect" geometry="primitive:sphere; radius:0.55"
              material="color:#72f3ff; opacity:.86; emissive:#88f; transparent:true"
              position="0 1.7 -3" visible="false"
              animation__move="property: position; to: 0 3.1 -6; dur:500; dir:alternate; loop:false">
      <a-entity geometry="primitive:torus; radius:0.7; tube:0.08" material="color:#fff; opacity:.3; transparent:true"></a-entity>
    </a-entity>

    <a-entity id="game" game-manager></a-entity>
  </a-scene>

<script>
let isDay=false, hp=100, mana=100, level=1;
let enemyHP=120, enemyHPMax=120;
function updateBars(){
  document.getElementById("hpText").innerText = Math.max(0,Math.floor(hp));
  document.getElementById("manaText").innerText = Math.max(0,Math.floor(mana));
  document.getElementById("hpBar").style.width = Math.max(0,Math.min(100,hp))+"%";
  document.getElementById("manaBar").style.width = Math.max(0,Math.min(100,mana))+"%";
  document.getElementById("level").innerText = level;
  document.getElementById("enemyHpText").innerText = Math.max(0,enemyHP);
  const w = Math.max(0, Math.min(100, enemyHP*100/enemyHPMax));
  document.getElementById("enemyHpBar").style.width = w+"%";
}
function levelUp(){ level++; hp=Math.min(100,hp+20); mana+=30; showScenario("🎉 レベルアップ!新しい力が湧いてくる!"); updateBars(); }
function castSpell(){
  if(mana<20){ showScenario("💤 魔力が足りない!"); return; }
  mana-=20; updateBars();
  const effect=document.getElementById("spellEffect");
  effect.setAttribute("visible","true");
  setTimeout(()=>{ effect.setAttribute("visible","false"); applyDamageToEnemy(30,"魔法ヒット"); },700);
}
function choosePath(choice){
  if(choice==="wizard"){ document.getElementById("equipment").innerText="魔導士のローブ"; mana+=50; showScenario("🧙‍♂️ 魔導士の試練が始まる…"); }
  else{ document.getElementById("equipment").innerText="騎士の剣"; hp+=30; showScenario("⚔️ 騎士と共に魔王城へ向かう!"); }
  updateBars();
}
function toggleEnvironment(){
  const sky=document.getElementById("sky");
  const star=document.getElementById("starParticles");
  const cloud=document.getElementById("cloudParticles");
  const ground=document.getElementById("ground");
  const sunlight=document.getElementById("sunlight");
  if(isDay){
    sky.setAttribute("color","#0e163e"); star.setAttribute("visible","false"); cloud.setAttribute("visible","true");
    ground.setAttribute("color","#375047"); sunlight.setAttribute("intensity","1.6"); showScenario("🌌 夜の世界へ…");
  }else{
    sky.setAttribute("color","#7ddfff"); star.setAttribute("visible","true"); cloud.setAttribute("visible","false");
    ground.setAttribute("color","#b8ffcc"); sunlight.setAttribute("intensity","2.1"); showScenario("🌞 昼の世界へ…");
  }
  isDay=!isDay;
}
function changeField(fieldName){
  const fields=['town','castle','cave','ruins','dungeon'];
  fields.forEach(name=>{
    const el=document.getElementById(`field-${name}`);
    el.setAttribute('visible', name===fieldName);
  });
  showScenario(`📍 ${fieldName} に移動しました`);
}
function receiveQuest(){
  const quests=[
    "魔導士の塔で失われた書を探せ!","騎士団の旗を取り戻せ!","洞窟の奥に眠る魔石を発見せよ!",
    "遺跡に隠された封印を解け!","ダンジョンの魔王を討伐せよ!"
  ];
  const index=Math.floor(Math.random()*quests.length);
  showScenario("📜 クエスト受注: "+quests[index]);
}

const scenarioList=[
  "目覚めたあなたは不思議な世界にいた。","最初のクエストを受注しよう。","フィールド移動で冒険の扉が開く。",
  "行動や魔法でストーリーが動く。","街で情報を集め、仲間と出会おう。","クエストを進め、魔王に立ち向かえ!"
];
let scenarioIndex=0;
function showScenario(text){ document.getElementById('scenario').innerHTML=text; }
function advanceScenario(){ if(scenarioIndex<scenarioList.length){ showScenario(scenarioList[scenarioIndex]); scenarioIndex++; } }
['levelUp','castSpell','choosePath','changeField','receiveQuest'].forEach(fn=>{
  const orig=window[fn]; window[fn]=function(){ orig.apply(this, arguments); advanceScenario(); }
});

/* ---- ここが拾う/装備の中核 ---- */
const rigEl=()=>document.getElementById('rig');
const camEl=()=>document.getElementById('cam');
const enemyEl=()=>document.getElementById('enemy');
const enemyBodyEl=()=>document.getElementById('enemyBody');

let hasSword=false, hasGun=false, equipped='none';
let attackCooldown=false;
const bullets=[];

function setEquipmentLabel(){
  let label="なし";
  if(equipped==='sword') label="剣";
  if(equipped==='gun') label="銃";
  document.getElementById('equipment').innerText=label;
}

function tryPickup(){
  const rpos=rigEl().object3D.position; // ★リグが移動するのでOK
  const items=[document.getElementById('swordPickup'),document.getElementById('gunPickup')];
  for(const it of items){
    if(!it.getAttribute('visible')) continue;
    const wpos=it.object3D.position;
    const d=rpos.distanceTo(wpos);
    if(d<2.0){
      const w=it.getAttribute('data-weapon');
      it.setAttribute('visible','false');
      if(w==='sword'){ hasSword=true; if(equipped==='none') equipped='sword'; showScenario("🗡️ 剣を拾った! 1で装備。"); }
      if(w==='gun'){ hasGun=true; if(equipped==='none') equipped='gun'; showScenario("🔫 銃を拾った! 2で装備。"); }
      setEquipmentLabel();
      return;
    }
  }
  showScenario("近くに拾えるものはない。");
}

function equipSword(){ if(hasSword){ equipped='sword'; setEquipmentLabel(); showScenario("🗡️ 剣を装備した。"); } else { showScenario("剣をまだ拾っていない。"); } }
function equipGun(){ if(hasGun){ equipped='gun'; setEquipmentLabel(); showScenario("🔫 銃を装備した。"); } else { showScenario("銃をまだ拾っていない。"); } }

function attack(){
  if(attackCooldown) return;
  if(equipped==='sword'){ swordSlash(); }
  else if(equipped==='gun'){ shootBullet(); }
  else{ showScenario("装備がありません。剣や銃を拾ってください。"); }
}

function swordSlash(){
  attackCooldown=true;
  const slash=document.createElement('a-entity');
  slash.setAttribute('geometry','primitive: torus; radius:0.9; tube:0.08; arc:200');
  slash.setAttribute('material','color:#fff; opacity:.6; transparent:true');
  const dir=new AFRAME.THREE.Vector3(); camEl().object3D.getWorldDirection(dir); dir.y=0; dir.normalize();
  const base=rigEl().object3D.position.clone().add(new AFRAME.THREE.Vector3(0,1.2,0)).add(dir.clone().multiplyScalar(0.8));
  slash.setAttribute('position',`${base.x} ${base.y} ${base.z}`);
  const rotY=Math.atan2(dir.x,dir.z)*AFRAME.THREE.MathUtils.RAD2DEG;
  slash.setAttribute('rotation',`0 ${rotY} 0`);
  slash.setAttribute('animation__fade','property: material.opacity; to:0; dur:200; easing:easeOutQuad');
  document.querySelector('a-scene').appendChild(slash);
  setTimeout(()=>slash.parentNode && slash.parentNode.removeChild(slash),220);

  const enemyPos=enemyEl().object3D.position.clone();
  const toEnemy=enemyPos.clone().sub(rigEl().object3D.position.clone().add(new AFRAME.THREE.Vector3(0,1.0,0)));
  const dist=toEnemy.length();
  toEnemy.y=0; toEnemy.normalize();
  const forward=dir.clone();
  const angle=forward.dot(toEnemy);
  if(dist<2.6 && angle>0.5 && enemyEl().getAttribute('visible')){
    applyDamageToEnemy(25,"斬撃");
  } else {
    showScenario("空振り…");
  }
  setTimeout(()=>attackCooldown=false,280);
}

function shootBullet(){
  attackCooldown=true;
  const bullet=document.createElement('a-sphere');
  bullet.setAttribute('radius','0.07');
  bullet.setAttribute('color','#e6f7ff');
  bullet.setAttribute('material','emissive:#88d; metalness:.6; roughness:.2');
  const dir=new AFRAME.THREE.Vector3(); camEl().object3D.getWorldDirection(dir); dir.normalize();
  const start=rigEl().object3D.position.clone().add(new AFRAME.THREE.Vector3(0,1.3,0)).add(dir.clone().multiplyScalar(0.9));
  bullet.setAttribute('position',`${start.x} ${start.y} ${start.z}`);
  document.querySelector('a-scene').appendChild(bullet);
  bullets.push({el:bullet, dir:dir.clone(), life:1800, speed:24});
  setTimeout(()=>attackCooldown=false,120);
}

function applyDamageToEnemy(dmg,label){
  if(!enemyEl().getAttribute('visible')) return;
  enemyHP=Math.max(0, enemyHP - dmg);
  updateBars();
  const origColor=enemyBodyEl().getAttribute('color');
  enemyBodyEl().setAttribute('color','#ffffff');
  setTimeout(()=>enemyBodyEl().setAttribute('color', origColor), 80);
  spawnDamageText(dmg,label);
  if(enemyHP<=0){ killEnemy(); }
}

function spawnDamageText(dmg,label){
  const t=document.createElement('a-text');
  t.setAttribute('value',`${label} -${dmg}`);
  t.setAttribute('color','#ffe6e6');
  t.setAttribute('align','center');
  const p=enemyEl().object3D.position.clone();
  t.setAttribute('position',`${p.x} ${p.y+2.4} ${p.z}`);
  t.setAttribute('animation__rise','property: position; to: '+`${p.x} ${p.y+3.2} ${p.z}`+'; dur:650; easing:easeOutQuad');
  t.setAttribute('animation__fade','property: opacity; to:0; dur:650; easing:easeOutQuad');
  document.querySelector('a-scene').appendChild(t);
  setTimeout(()=>t.parentNode && t.parentNode.removeChild(t),700);
}

function killEnemy(){
  enemyEl().setAttribute('visible','false');
  showScenario("✅ 敵を倒した! 5秒後に再出現する…");
  setTimeout(()=>respawnEnemy(), 5000);
}
function respawnEnemy(){
  enemyHP=enemyHPMax; updateBars();
  const e=enemyEl();
  const x = (Math.random()*6 - 3);
  const z = -8.5 + (Math.random()*3 - 1.5);
  e.setAttribute('position',`${x} 0 ${z}`);
  e.setAttribute('visible','true');
  showScenario("⚠️ 新たな敵が現れた!");
}

/* 入力(E/1/2 の互換強化:★修正) */
AFRAME.registerComponent('game-manager',{
  init:function(){
    window.addEventListener('keydown',(e)=>{
      const k=e.key;
      const c=e.code;
      if(c==='KeyE' || k==='e' || k==='E') tryPickup();
      if(c==='Digit1' || c==='Numpad1' || k==='1') equipSword();
      if(c==='Digit2' || c==='Numpad2' || k==='2') equipGun();
    });
    window.addEventListener('mousedown',()=>attack());
    updateBars(); advanceScenario(); setEquipmentLabel();
  },
  tick:function(time,dt){
    const delta=dt/1000;
    const prompt=document.getElementById('pickupPrompt');
    const rpos=rigEl().object3D.position;
    let near=false;
    ['swordPickup','gunPickup'].forEach(id=>{
      const el=document.getElementById(id);
      if(el.getAttribute('visible')){
        const d=rpos.distanceTo(el.object3D.position);
        if(d<2.0) near=true;
      }
    });
    prompt.style.display = near?'block':'none';

    // 弾
    for(let i=bullets.length-1;i>=0;i--){
      const b=bullets[i];
      if(!b.el.parentNode){ bullets.splice(i,1); continue; }
      b.life -= dt;
      const pos=b.el.object3D.position;
      pos.add(b.dir.clone().multiplyScalar(24*delta));
      if(b.life<=0){ b.el.parentNode.removeChild(b.el); bullets.splice(i,1); continue; }
      if(enemyEl().getAttribute('visible')){
        const d=pos.distanceTo(enemyEl().object3D.position);
        if(d<1.35){
          applyDamageToEnemy(15,"射撃");
          b.el.parentNode.removeChild(b.el);
          bullets.splice(i,1);
        }
      }
    }
    enemyEl().object3D.rotation.y += delta*0.3;
  }
});

updateBars();
advanceScenario();
</script>
</body>
</html>

『ファンタシースター2 VR(仮題)』企画書

『ファンタシースター2 VR(仮題)』企画書

1. 概要

タイトル名:ファンタシースター2 VR(仮)
ジャンル:VR対応3DアクションRPG(ダンジョン探索+戦術バトル)
対応機種:Meta Quest 3 / SteamVR / PS VR2(検討)
プレイ人数:1人(将来的にCO-OP対応を検討)
対象年齢:12歳以上


2. 開発コンセプト

名作『ファンタシースターⅡ』を現代VR技術で完全リメイク。
原作の世界観とキャラクター、シナリオを尊重しつつ、
・没入感ある一人称視点探索
・直感的なバトル操作(モーション・アクション)
・拡張された都市・バイオシステム・ダンジョンの再現
を実現する。


3. 特徴とVRならではの要素

A. 没入型探索

  • 一人称視点によるダンジョン探索
  • 全3D再構築された「モタビア」都市、研究所、バイオドーム、地下施設
  • 「パイプ・テレポーター」による瞬間移動ギミック(VR演出あり)

B. 戦闘システム

  • 武器の物理操作(ソード、ガン、テクニック発動)
  • 旧作のターン制をアレンジした**「ハイブリッド・リアルタイム戦闘」**
    (タイムゲージ制+行動入力:手をかざす/武器を振る/ボタンパネル操作)
  • パーティAI(仲間キャラは自動行動、状況に応じた戦略切替)

C. テクニック(魔法)演出

  • VRでの魔法詠唱アクション(ジェスチャー or インタラクション)
  • 代表例:「レスタ」(回復)、「ゾンデ」(雷撃)など

4. ストーリー概要(原作準拠+VR補完)

西暦1284年。モタビア星ではマザーブレインによる管理社会が完成していた。
だが、突如として現れたバイオモンスターの脅威、そして…
主人公ユーシス(VRではプレイヤー自身)は、恋人の死をきっかけに陰謀の核心へと迫る。

※VRでは原作イベントに新たな視点や演出を加え、臨場感を演出(例:ネイの死のシーンなど)


5. 対応予定機能

機能内容
VR移動方式スムーズ移動/テレポート移動(選択可)
UIホログラムUIパネル、音声ナビ
戦闘補助自動ロックオン、ジェスチャーガイド
サウンド原作BGMのVRリミックス+3D空間音響
コーディネート要素装備外観変更、第一人称での確認可

6. 開発スケジュール(想定)

フェーズ期間内容
企画・検証~2ヶ月原作調査、VRプロトタイプ制作
開発前半3ヶ月戦闘・探索システム実装
開発後半6ヶ月マップ・イベント実装、UI・ボイス収録
テスト2ヶ月VRチューニング、デバッグ、最終調整

7. 収益化・販売戦略(案)

  • 基本パッケージ売切型(4,980円想定)
  • DLC追加シナリオ(ネイ専用編、隠しボスなど)
  • コレクターズエディション(原作アートブック、BGM集)

8. ターゲット層

特徴
昔のPSシリーズファン懐かしさ+現代的な再体験
VR RPGプレイヤー没入感ある探索・バトル体験
SF好き/JRPG好き独特の世界観・設定・BGM

ご希望があれば、次の内容も追加できます:

  • マップ構成と画面イメージ図
  • ジェスチャー一覧
  • ストーリー詳細分岐
  • UIデザインのモックアップ

必要に応じて続き作成しますか?

🎮 ゲーム企画書:『カスタムロボ RE:BOOST(仮)』

🎮 ゲーム企画書:『カスタムロボ RE:BOOST(仮)』


1. タイトル案

  • 『カスタムロボ RE:BOOST』
  • 『カスタムロボ R:Reboot』
  • 『カスタムロボ∞(インフィニティ)』

2. コンセプト

「少年の夢が、再び現実になる。」

プレイヤーはカスタムロボのパイロットとして、機体を自由にカスタマイズし、リアルかつスピーディな戦闘を繰り広げる。かつてのロボットバトルの熱狂を、現代のビジュアルとシステムで完全再現し、シリーズ未体験の若年層と当時のファン両方に向けた“進化系リメイク”。


3. ターゲットユーザー

  • 【主】20~40代:旧作ファン層(N64 / GC / DSユーザー)
  • 【副】10~20代:現代のロボットアクションゲームファン(スプラトゥーン、ARMORED CORE、ガンダム系)

4. プラットフォーム

  • Nintendo Switch 2(想定)
  • PC(Steam)
  • PS5(マルチプラットフォーム想定)

5. ゲームジャンル

  • 対戦型ロボットカスタマイズバトルアクション
    (3Dアクション+パーツ収集+オンライン対戦)

6. 主なゲーム要素

要素内容
ロボットのカスタマイズ頭・胴・脚・ガン・ボム・ポッドなど1000種類以上のパーツ。性能とビジュアルに影響。
スピード感重視のバトル従来のダッシュ・ジャンプ・バーストに加え、新アクション「ブーストチェイン」導入。
シングルモードオリジナルストーリー+リメイク要素。「ラウンドダクロン」のようなドラマ展開。
オンライン対戦ランクマッチ・ルームマッチ・トーナメント。観戦モードあり。
ギルド/クラブ要素ユーザー同士でクランを組み、週替わりのイベントに参加。
スキン/アバターキャラやロボの見た目を変更できる。課金なしでも入手可能。

7. 世界観とストーリー(概要)

西暦2089年。AR空間で行われる仮想バトル「ホロロイド」が世界大会に昇格し、ロボット競技は再び脚光を浴びていた。
主人公は「伝説のロボ乗り」の息子として大会に挑む。背後には国家機密とされる人工知能兵器の陰謀が…。


8. ビジュアルイメージ

  • キャラデザイン:アニメ調+SFテイスト(イラスト例:天神英貴・貞本義行風)
  • ロボデザイン:トイ的なかわいさとメカのかっこよさを両立(例:LBX×AC)

9. 技術・開発情報

  • エンジン:Unreal Engine 5
  • ネットワーク:Photon Fusion / Epic Online Services
  • カスタムAI:バディAIとの協力バトルモードあり

10. マネタイズ・展開

方式内容
買い切り型基本価格:6,980円(DLCパックあり)
DLCストーリー拡張・新パーツセット(例:コラボ機体・歴代作品機体)
コラボ展開他ゲーム/玩具/アニメとコラボ(例:メダロット、LBX、ガンダム)
メディア展開アニメ化・コミカライズ・プラモデル販売(3Dプリント連携も)

11. 差別化ポイント

  • パーツごとの「フィジカル挙動」シミュレーションでリアル感UP
  • AIロボ同士のオート戦も可能(観戦専用モード)
  • 「仮想バトル空間」×「現実の世界」の行き来するハイブリッドストーリー

12. 開発スケジュール(案)

フェーズ内容期間
企画・プロトタイププロトタイピング/ビジュアル検証3ヶ月
α開発基本システム構築6ヶ月
β開発全体完成・バグ修正3ヶ月
PR・リリース体験版配布/事前登録/製品版発売2ヶ月

『デビルチルドレン リメイク』企画書

1. タイトル案

『デビルチルドレン:リバースコード』


2. 企画意図

2000年代初頭に登場し、少年少女が悪魔と契約して戦うという世界観で人気を博した『デビルチルドレン』シリーズを、現代の技術とニーズに合わせてリメイク。ペルソナやポケモン、デジモンの人気が再燃する中、悪魔との契約・育成・融合・人間ドラマを融合させたRPGとして、懐かしさと新しさを両立させます。


3. 想定プラットフォーム

  • Nintendo Switch
  • PlayStation 5
  • Steam(PC)
  • スマートフォン(クラウド連携 or 外伝展開)

4. ゲーム概要

ジャンル

  • 悪魔育成RPG+ダークファンタジーADV

主な要素

  • ターン制バトル(3対3)
  • 悪魔の仲間化・進化・合体(従来の悪魔合体に加え、個体ごとの性格やスキル成長分岐あり)
  • 悪魔と絆を深める「契約イベント」や「共鳴システム」
  • 選択によるストーリールート分岐(LAW / CHAOS / NEUTRAL)
  • ジュブナイル・ホラー要素(子供視点で描く社会の闇)

5. ストーリー構成(例)

あらすじ(リメイク用に刷新)

主人公(カイ / アミ)は、異世界「魔界」と現実世界の交差点である「黄昏区(たそがれく)」に迷い込む。悪魔と契約する能力を持つ「契約者」として覚醒し、2つの世界の崩壊を止める旅へ出る。だが、選ぶ道によって人類の運命も変わる──。


6. メインキャラクター(案)

  • カイ(主人公・男性)
  • アミ(主人公・女性)
  • ロキ(主人公に付き添う謎の悪魔)
  • セト(CHAOSルートの導き手)
  • メタトロン(LAWルートの守護天使)
  • ルシフェル(真実を知る者)

7. 主な新要素

項目内容
3Dグラフィック化Unity / Unreal Engineによるリアルタイム3D
悪魔フルボイス化合体時や契約時に専用セリフあり
難易度調整機能EASY〜CHAOSまで選択可能
マルチエンディングルート分岐と「真・人類ルート」追加
オンライン育成交換要素プレイヤー間で悪魔を交換できる

8. 想定スケジュール

フェーズ期間内容
企画・プリプロ3か月シナリオ/仕様書/キャラデザイン
開発12〜18か月モデリング/実装/収録/テスト
テスト・調整3か月バランス調整/デバッグ
発売XX年XX月パッケージ&DL版展開

9. 想定ターゲット

  • 元祖『デビチル』ファン(20〜40代)
  • 現代のRPGファン(ペルソナ、ポケモン、デジモン層)
  • ダークジュブナイルや退廃SFが好きなプレイヤー

10. プロモーション戦略案

  • 初報ティザーPV公開(『デビチル』ロゴを強調)
  • キャラ人気投票キャンペーン
  • 悪魔デザインコンテスト(ユーザー参加型)
  • オリジナルサウンドトラック配信
  • コラボカフェ、限定グッズ展開

 ゲーム企画書ChronoBlade

 ゲーム企画書

タイトル:「ChronoBlade(クロノブレイド)」

ジャンル:アクションRPG(時間操作×剣術バトル)

プラットフォーム:PC / コンシューマ(PS5 / Xbox) / Steam Deck

プレイ人数:1人(後に協力プレイモードを実装予定)

対象年齢:12歳以上


1. コンセプト

「時間を操る剣士」として、時を越えた世界を旅し、運命を断ち切る壮大な物語を描く。本作は、アクション性と戦略性を融合させた“時間干渉型アクションRPG”であり、時間を遅らせたり、停止したり、巻き戻す力を駆使して戦うのが最大の特徴である。


2. 世界観

――時空を壊された世界で、人々は「未来」を失った。
舞台は、時間軸が乱れた崩壊寸前の多元世界「テンペルクロノス」。各時代(中世・近未来・古代・終末世界など)を旅しながら、異なる歴史の分岐を巡り、「正しい未来」を見出していく。


3. 主人公・キャラクター

  • カイ=アルデン(CV案あり)
     失われた王国の騎士。時を断ち切る剣「クロノブレイド」を手に入れ、失った妹を取り戻すために旅に出る。
  • ティナ=リュミエール
     時の研究者。時間魔法を操ることができ、サポートキャラ兼ヒロイン。

4. ゲームシステム

バトル

  • 通常のアクションバトルに加え、「時間停止」「時間巻き戻し」「未来視(予知)」といったシステムを組み合わせる。
  • コンボ攻撃とタイムスキルの組み合わせで“時空コンボ”が発動。

フィールド探索

  • 各時代の世界を自由に探索。時間の干渉によって地形や人間関係が変化。
  • 例:古代で橋を作れば、未来で村が発展している、などの「因果リンク」要素。

成長・スキル

  • 剣術・時術の2つのスキルツリー。
  • 「記憶のかけら」を集めることで過去の真実や新たな能力を開放。

5. グラフィック・演出

  • セミリアルな3Dアニメ調。
  • UE5を使用、ナイアガラでの時間エフェクト演出を多用。
  • スロー演出や巻き戻しエフェクトなど、視覚的にも時間の影響を感じられる作り。

6. 音楽・効果音

  • テーマ曲は時を感じさせる幻想的な旋律。
  • バトル時には緊張感あるストリングスやピアノ、スロー時にはディレイ・リバース音使用。
  • サウンドディレクター案:古代祐三風を想定。

7. マネタイズ・展開案

  • 本編は買い切り型。
  • 追加DLC(過去の歴史エピソード)配信
  • 時代スキン、ボイスパック販売
  • アニメ化・小説・コミカライズメディア展開も視野に入れる

8. 想定スケジュール

フェーズ内容期間
企画・仕様設計ゲームコンセプト固め、仕様書作成1〜2ヶ月
プロトタイプ制作プレイヤー・バトルコアの試作2〜3ヶ月
本開発ストーリー・マップ制作・演出追加6ヶ月〜12ヶ月
テスト・調整QA・デバッグ・バランス調整2ヶ月
リリース国内外展開1ヶ月〜

9. 開発体制(案)

  • ディレクター:1名
  • プログラマー:2〜3名(UE5ブループリント& C++)
  • デザイナー:2D/3D各1名
  • サウンド:外注
  • シナリオ:1名(外注可)
  • デバッグ:クラウドQA導入想定

必要に応じて、企画書のPDF化・プレゼン用スライド化イラスト付き提案資料化なども可能です。
この内容でよければ続編やDLCの企画案も作成できます。
修正点や、ジャンル・世界観・主人公の変更などご希望があればお知らせください!

4o

ポケットモンスター ファイアレッド リ・イマジンド(Pokémon FireRed Re:Imagined)

【ゲーム企画書】

タイトル(仮)

ポケットモンスター ファイアレッド リ・イマジンド(Pokémon FireRed Re:Imagined)


【ジャンル】

RPG(ロールプレイングゲーム)


【企画意図・背景】

2004年に発売された『ポケットモンスター ファイアレッド』は、初代『赤・緑』のリメイクとして多くのファンに支持されました。本作はその精神を継承しつつ、現代のプレイヤーに向けてさらなる進化を遂げた新たなリメイクです。
「懐かしさ」と「革新」を融合させ、老若男女すべてのプレイヤーが楽しめる冒険体験を提供します。


【対応プラットフォーム】

Nintendo Switch 2(仮称)
※将来的にPCやスマートデバイス展開の可能性も視野


【ターゲットユーザー】

  • ポケモン赤・緑/ファイアレッド世代の20~40代
  • 現在のポケモンプレイヤー(全年齢層)
  • 海外のレトロゲームファン

【主なゲーム特徴】

1. グラフィック完全刷新

  • Unreal Engine 5によるHDグラフィック
  • カントー地方をオープンゾーンとして再構築
  • 天候/時間の概念を導入(リアルタイム連動も可能)

2. バトルシステム刷新

  • アクティブタイム制+クラシックターン制のハイブリッド
  • アニメーションと演出強化(例:ダイナミックカメラ、環境連動)
  • ダブルバトル導入、オンライン対戦完全対応

3. ストーリー拡張

  • ロケット団の過去やリーダー「サカキ」の内面に迫る追加エピソード
  • 主人公に「個別エンディング」導入(選択肢と関係性に応じて変化)

4. キャラ/モンスターの再構築

  • 初代151匹+ジョウト・ホウエンから一部登場(全300匹収録予定)
  • キャラクターボイス実装(重要キャラ中心)
  • 一部トレーナーのデザインを現代風にアップデート

5. 追加コンテンツ・DLC

  • 「オレンジ諸島編」や「ジョウト地方の序盤体験」などのDLC
  • 毎月の期間限定レイドバトルイベント開催

【基本仕様】

項目内容
プレイ人数1人(オンライン時最大4人協力・対戦)
セーブ方式オートセーブ+手動セーブ
ボイス一部フルボイス(メインキャラ)
対戦機能ランクマッチ、フリーバトル、カジュアルルーム
通信ローカル・Wi-Fi・Bluetooth対応
周辺機器対応Joy-Con振動、モーション操作(ポケモン捕獲時)

【開発スケジュール(例)】

フェーズ期間内容
企画・プリプロ3ヶ月仕様決定、アートテスト
α版開発6ヶ月システム実装、マップ構築
β版開発6ヶ月UI、ボイス、イベント追加
デバッグ/最終調整3ヶ月テスト・最適化・ローカライズ
合計約18ヶ月

【販売戦略】

  • 初回特典:特別デザインの「リザードン」配信コード
  • 限定版:設定資料集、サウンドトラック付き
  • コラボ展開:アニメ連動、リアルイベント(ポケモンセンター等)

【予想価格】

  • 通常版:6,980円(税込)
  • 限定版:9,980円(税込)

ドラゴンドライブVR

『ドラゴンドライブVR』企画書


1. タイトル

ドラゴンドライブVR(Dragon Drive VR)


2. ゲームジャンル

  • ジャンル:VRアクション・ドラゴンバトルRPG
  • プレイ方式:1人プレイ(将来的にオンライン対戦対応予定)
  • 対応ハード:Meta Quest 3 / PC VR(SteamVR対応) / PS VR2

3. コンセプト

「君と竜が一体となる、空中戦の限界へ。」

プレイヤーは“ドラゴンライダー”となり、現実世界とリンクした仮想空間でドラゴンを育成・騎乗し、空中戦・地上戦を体験。VRならではの臨場感で“ドラゴンと飛ぶ”夢を実現する。


4. 主なゲームシステム

● ドラゴン育成システム

  • タマゴから孵化→成長→進化(分岐進化あり)
  • 育成によってスキル・属性が変化(炎・氷・雷・闇・光など)
  • エサ・訓練・信頼度で個性が変化

● ライドバトル(空中戦)

  • フリーフライトで空を自由に飛ぶ
  • 射撃・ブレス攻撃・回避・突進などのバトルアクション
  • 一人称視点と三人称視点を切替可能

● 地上探索

  • 拠点となる街や遺跡を探索し、アイテムやミッションを獲得
  • ダンジョンはプレイヤー+ドラゴンで攻略(謎解き要素あり)

● VRインタラクション

  • ドラゴンとのふれあい:撫でる、餌をあげる、呼びかけるなど
  • 騎乗時のリアルな風・振動・高度変化演出

5. 世界観

かつて竜と人が共に生きていた「空界アルトレア」。
再び甦る邪竜の脅威に対抗するため、選ばれし“ライダー”たちが立ち上がる。


6. 想定ターゲット

  • VRユーザー(10代後半~30代前半)
  • ファンタジー・ドラゴン・育成ゲームファン
  • 『ドラゴンドライブ』『パンドラハーツ』『アバター』『竜とそばかすの姫』に魅力を感じる層

7. 収益モデル

  • 基本プレイ無料+アイテム課金(アバター/ドラゴンスキン)
  • 拡張DLC(新マップ、新ドラゴン、新ストーリー)
  • NFT連携によるドラゴン個体資産化(検討中)

8. 開発体制・ツール

  • エンジン:Unity(または Unreal Engine 5 + OpenXR)
  • ネットワーク:Photon Fusion または Mirror
  • VR対応:Meta SDK / OpenXR / SteamVR

9. 開発スケジュール(例)

フェーズ内容期間
企画・プロトタイプ世界観、コアシステム試作3か月
アルファ版飛行+戦闘+育成基本実装6か月
ベータ版UI/UX調整+コンテンツ拡充3か月
リリースマーケティング+ローンチ1か月

10. 補足・将来展望

  • マルチプレイヤーPvP空中戦の実装
  • ドラゴンコンテストイベント(飛行レース・育成大会)
  • AI搭載ドラゴンとの感情交流
  • Mixed Reality対応によるリアル環境でのドラゴン投影体験

デジモンVR – デジタルワールド体感プロジェクト


1. 概要

「デジモンVR」は、プレイヤーがパートナーデジモンとともにデジタルワールドを冒険する完全没入型VRゲームです。デジヴァイスを手に持ち、リアルタイムに進化・バトル・探索を体感できます。


2. コンセプト

  • 没入型デジモン体験:フル3Dで再現されたデジタルワールドをVRで歩き回り、実際にパートナーデジモンと交流。
  • リアル進化体験:デジヴァイスを模したVRインターフェースで、進化演出を自ら操作。
  • ソーシャル連携:他プレイヤーとの協力プレイ・バトル機能も搭載予定。

3. プラットフォーム

  • 対応予定:Meta Quest 3 / SteamVR / PSVR2
  • 必要環境:6DoF対応、両手コントローラー、ネット接続

4. 主なゲーム要素

要素内容
パートナーデジモンプレイヤーに寄り添い、育成・進化・会話が可能。
探索デジタルワールドを歩き回り、データ収集・イベント・素材採集など。
バトルリアルタイム・アクションバトル。手の動きで技を発動。
進化システム条件を満たすことで、進化演出をリアルタイム操作。
デジヴァイス連携ゲーム内HUDを通じたステータス管理・進化・装備管理。

5. 想定ユーザー

  • デジモンファン(10〜40代)
  • VRゲームファン
  • ソーシャルVR体験を求めるユーザー

6. 収益モデル

  • 基本プレイ無料 + アイテム課金(進化用素材・コスチュームなど)
  • 有料DLC(新エリア・新デジモン追加)
  • 限定コラボイベント(アニメ・映画連動)

7. 開発体制とスケジュール(想定)

フェーズ内容期間
企画・設計世界観・UI設計2ヶ月
プロトタイプMVP制作(移動・進化・バトル)3ヶ月
フル開発全コンテンツ制作8〜12ヶ月
テストクローズドβ、ユーザーテスト2ヶ月
リリースローンチ & プロモーション

8. プロモーション戦略

  • ティザー映像公開(進化演出などを強調)
  • VTuber・実況者とのコラボ体験配信
  • デジモンアニメ新作との連動キャンペーン

9. ビジュアルモック(イメージ)

  • ログイン画面:デジタルゲートをくぐる演出
  • バトル画面:等身大のグレイモンが目前で技を放つ
  • UI:腕についたデジヴァイス風デバイスで操作

10. 特記事項・注意点

  • 原作のIP利用には株式会社バンダイとの協議・許諾が必要
  • メタバース連携を想定する場合は将来的な拡張性も要検討

ロックマンEXE VR ― 企画書

ロックマンEXE VR ― 企画書


【タイトル】

ロックマンEXE VR(仮)


【コンセプト】

電脳世界と現実を融合させた「フルダイブ・ネットバトル体験」――
プレイヤーがナビゲーターを操作し、リアルタイムにネットバトルを行う、完全没入型VRアクションRPG。


【ジャンル】

  • フルダイブVRアクションRPG
  • オンラインネット対戦型コンテンツ
  • ストーリー付きシングルプレイキャンペーンモード

【プラットフォーム】

  • Meta Quest 3 / Quest Pro
  • SteamVR(PCVR)
  • 将来的にはApple Vision Pro、PlayStation VR2にも展開予定

【想定ターゲット】

  • 20代〜40代のロックマンEXEシリーズ経験者
  • VR体験に慣れているコアゲーマー層
  • 近未来・サイバーSF世界観が好きなユーザー

【主な特徴】

1. 電脳世界へのフルダイブ

  • プレイヤーは“オペレーター”として、VR空間から自分のナビ(ロックマンなど)を操作。
  • 視点はナビ視点とオペレーター視点を自由に切り替え可能。

2. リアルタイム・ネットバトル

  • 従来のマス目バトルにVRならではの要素を追加(例:手でチップを選び、発動動作を行う)。
  • 複数人の協力プレイやPvP対戦にも対応。

3. チップ実体化ギミック

  • 実際に手を伸ばして“バトルチップ”を物理的に選択・使用する没入型インターフェース。
  • チップの選択ミスやタイミングなど、直感操作が勝負の鍵に。

4. 電脳都市の探索

  • “ACDCタウン”や“電脳世界”を自由に歩き回り、NPCとの対話やミッション受注が可能。
  • 実世界(オペレータールーム)とネット世界(ナビ視点)を行き来して物語が展開。

【ゲームモード】

  • ストーリーモード
    原作シリーズを踏襲しつつ、オリジナル展開も用意。名シーンをVRで再現。
  • VR対戦モード
    フレンド・ランダム対戦機能付き。ランキングや報酬制度あり。
  • カスタムルームモード
    プレイヤーのVRオペレータールームを自由にカスタマイズ。

【開発スケジュール(案)】

フェーズ期間内容
企画・プロト制作0〜3ヶ月世界観設定、試作バトルシステム
アルファ版開発4〜8ヶ月探索・戦闘・UIの実装
ベータ版開発9〜12ヶ月ストーリー、マルチ対戦
リリース準備13〜15ヶ月デバッグ、配信準備、マーケ

【必要開発体制(最小構成)】

  • VRエンジニア(Unreal Engine or Unity XR経験者)
  • キャラクター/背景3Dモデラー
  • アニメーター
  • プランナー / シナリオライター
  • UI/UXデザイナー
  • ネットワークエンジニア

【将来的展開】

  • DLC:フォルテ、サーチマン、ブルース編など
  • eスポーツ大会の開催
  • コラボイベント(EXEシリーズ20周年企画など)
  • AR版ロックマンペットの開発(スマホ連携)

【ビジュアルモック・参考資料】

※必要であれば後日、UI/UX・ワールドデザインのモックアップをご用意します。


【備考】

※本企画はファン提案ベースであり、カプコン社の正式な許諾が必要です。商業化にあたってはライセンス取得が前提条件となります。

Unity C# Stats.cs

using UnityEngine;

[System.Serializable]
public class Stats // ← MonoBehaviourを削除
{
    public int Level = 1;
    public int maxHp = 1;
    public int atk = 1;
    public int def = 1;
    public int mana = 1;
    public int manaXSecond = 5;
    public CharacterClass charClass = CharacterClass.warrior;
}

public enum CharacterClass
{
    warrior,
    maga,
    priest,
    paladin,
    shamano,
    druid,
    rogue,
    ranger
}