回転する箱からビームが出ていて、Player(YOU)がジャンプでよけるゲーム。
ビームに当たるとYOUは血(パーティクル)を吐く。
ビームと同じ方向にRayを発射することでヒットを取っている。
Playerのスクリプト(血パーティクルは事前にPrefabにしてから登録)
var speedX : float = 3; var jumpPower : float = 500; function Update() { Control(); } function Start(){ //emitBlood(); } function Control(){ //X var horMovement = Input.GetAxis("Horizontal"); if (horMovement) { transform.Translate(transform.right * horMovement * Time.deltaTime * -speedX); } //Jump if(Input.GetButtonUp("Jump")){ rigidbody.AddForce(Vector3.up * jumpPower); } } var bloodParticle_ : ParticleAnimator;//one shotにチェックしておこう function emitBlood(){ var obj = Instantiate( bloodParticle_, transform.position, transform.rotation); obj.autodestruct = true; }
ビームを出す箱のスクリプト
見所:Raycast, 他のオブジェクトの関数呼び出し
var rotateYspeed = 10; function Update () { //rotateY transform.Rotate( Vector3.up * Time.deltaTime * rotateYspeed, Space.Self); rayCast(); } function rayCast(){ //ray direction (local Z axis) //var localZdir = transform.InverseTransformDirection(Vector3.forward);//world to local var localZdir = transform.TransformDirection(Vector3.forward); //local to world Debug.DrawRay(transform.position, localZdir * 10, Color.red); //check hit var hit : RaycastHit; if(Physics.Raycast(transform.position, localZdir, hit, 10)){ if(hit.collider.gameObject.tag == 'Player'){ Debug.Log('hoge'); var obj = hit.collider.gameObject; obj.GetComponent('PlayerController_X_Jump').emitBlood(); //access player } } }
ローカルの軸を取得したいときは Transform.TransformDirection http://unity3d.com/support/documentation/ScriptReference/Transform.TransformDirection.html レーザーはLine Rendererで描画 Line Renderer http://unity3d.com/support/documentation/Components/class-LineRenderer.html マテリアルは青い光の玉テクスチャを設定。 Shader(Particles/Alpha Blended)
TODO : Line Renderの曲線版