Teachers open the door but You must enter by yourself.
using UnityEngine;
public class Arrow : MonoBehaviour
{
public float velocity=10f;
public float magnify=2f;
public bool flying=false;
public Horse horse;
public Transform bow;
float launchTime;//射出時刻
Vector3 Velocity=>Vector3.forward*horse.velocity + transform.up*velocity;
float FlyingTime=>Time.time-launchTime;
Vector3 FlyingScale=>Vector3.one * (1f + magnify*FlyingTime);
public void Ready(){
transform.localScale=Vector3.one;
GetComponent<Rigidbody>().linearVelocity=Vector3.zero;
transform.parent=bow;
transform.localPosition=new Vector3(0, 0, -0.3f);
transform.localRotation=Quaternion.Euler(90f, 0f, 0f);
flying=false;
}
public void Fire(){
transform.parent=null;
GetComponent<Rigidbody>().linearVelocity=Velocity;
launchTime=Time.time;
flying=true;
}
void Update()
{
if(flying){
transform.localScale=FlyingScale;
if(FlyingTime>3f) flying=false;
}
}
}
using UnityEngine;
using UnityEngine.InputSystem;
public class Bow : MonoBehaviour
{
public InputAction trigger;
public Transform leftController;
public Transform rightController;
public Arrow arrow;
enum State{Idle, Grab, Pull}
State state=State.Idle;
float Distance=>Vector3.Distance(leftController.position, rightController.position);
void Update()
{
switch(state){
case State.Idle:
if(Distance<0.4f && !arrow.flying){
arrow.Ready();
state=State.Grab;
}
break;
case State.Grab:
if(Distance>0.4f){
GetComponent<Animation>().Play("BowPullAnimation");
state=State.Pull;
}
break;
}
}
void OnFire(InputAction.CallbackContext c){
if(state==State.Pull){
GetComponent<Animation>().Play("BowReleaseAnimation");
arrow.Fire();
state=State.Idle;
}
}
・・・
}