質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4501閲覧

敵を滑らかに移動させる。

ark-T

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

2クリップ

投稿2017/09/17 00:29

現在、Unityで3Dシューティングゲームを制作しています。そこで、敵をランダムに移動させようと思い、Vector3.Slerpで移動させようとしたのですが、瞬間移動のようになってしまいます。
滑らかに動かすことはできないのでしょうか。
敵のコードは以下です。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class BossPitControl : MonoBehaviour { public GameObject PitLaser; public GameObject Explosion; float point_X; float point_Y; float point_Z; float Z_Speed = 30; float attackintervalTime; float maxLife = 50; float life; float speed = 120; void Start () { life = maxLife; } void Update () { transform.position += transform.forward * Time.deltaTime * -1 * Z_Speed; attackintervalTime += Time.deltaTime; if (attackintervalTime >= 1) { attackintervalTime = 0.0f; Attack(); } if (life <= 0) { Instantiate(Explosion, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity); Destroy(this.gameObject); BossControl.PitRest -= 1; } } void Attack() { GameObject player = GameObject.FindWithTag("Player"); point_X = Random.Range(-30.0f, 30.0f); point_Y = Random.Range(-10.0f, 10.0f); point_Z = transform.position.z; transform.position = Vector3.Slerp(transform.position, new Vector3(point_X, point_Y, point_Z), Time.deltaTime * speed); Quaternion quat = Quaternion.Euler(0, 180, 0); Instantiate(PitLaser, new Vector3(transform.position.x, transform.position.y, transform.position.z), quat); } void OnTriggerEnter(Collider coll) { if (coll.gameObject.tag == "PlayerBullet") { life -= 10; } if (coll.gameObject.tag == "PlayerMissile") { life -= 20; } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Vector3.Slerp()の第3引数には、0~1の数値を入れてください。
例えば0.5とした場合、指定した2つのVector3の中心値が返されます。
0に近づくほど第1引数のVector3に、1に近づくほど第2引数のVector3に近い値が返されます。

投稿2017/09/17 03:56

fiveHundred

総合スコア9778

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ark-T

2017/09/17 06:43

すみません。教えていただいた通りやってみたのですが、やはり瞬間移動してしまいます。どうすればよいのでしょうか。
fiveHundred

2017/09/17 08:10

「教えていただいた通り」とのことですが、どのような感じでやったのでしょうか? 0に近いほど、移動前の座標に近い位置に設定されるため、できるだけ0に近い値で試してみてください。
ark-T

2017/09/17 09:21

すみませんでした。Update内に書いていなかったのが原因でした。Update内に書き直してやってみたところ、うまくいきました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問