ソースはこちらで公開しています。
https://github.com/matsushima-terunao/unity-chan
実際のゲームはこちら
http://ter.dip.jp/blog_unity/unity-chan/build/web/web.html
引いた状態でプレイヤーに追従する視点に変更します。
Main Camera を unitychan_dynamic_locomotion 配下に移動
Scene 上の視点を調整し、Main Camera を選択した状態で GameObject メニュー -> Align With View
Inspector タブ -> Third Person Camera (Script) のチェックを外す
また、Tag に Enemy を追加し、bear に設定します。
前回と同様の方法でプレイヤーに Damage アクションを追加します。
State
Damage
Motion: DAMAGED00
Parameters
Damage Trigger
Transition
Any State -> Damage
Conditions: Damage
Damage -> Idle
Conditions: Exit Time 0.82
UnityChanScript に衝突時のコードを追加します。
Cube オブジェクトを作成し、名前を Attack とし、unitychan_dynamic_locomotion の子に移動
Position: 0 0.5 1, Scale: 1 1 1
画面に描画されないように、Mesh Renderer のチェックを外す
Inspector に Rigidbody を追加し、移動しないように Constraints にチェックを入れる
Ctrl を押して1秒間だけ有効にするようにします。
攻撃オブジェクトに衝突したときの処理を追加します。
この状態で再生してみます。
攻撃が敵にヒットして消えれば OK です。
→ 3-4. Unity でユニティちゃんアクションゲームを作る - 敵の生成と武器の追加
← 3-2. Unity でユニティちゃんアクションゲームを作る - アニメーションの追加
↑ 一覧
https://github.com/matsushima-terunao/unity-chan
実際のゲームはこちら
http://ter.dip.jp/blog_unity/unity-chan/build/web/web.html
前準備
視点の変更
引いた状態でプレイヤーに追従する視点に変更します。
Main Camera を unitychan_dynamic_locomotion 配下に移動
Scene 上の視点を調整し、Main Camera を選択した状態で GameObject メニュー -> Align With View
Inspector タブ -> Third Person Camera (Script) のチェックを外す
Main Camera に MainScript を付ける
/**
* メインスクリプト。
*
* @author 2014/08/30 matsushima
*/
#pragma strict
/** デバッグテキスト */
static var debugTexts:Hashtable = new Hashtable();
function Start () {
}
function Update () {
}
function OnGUI() {
// デバッグテキスト表示
var y:int = 0;
for (var k:Object in debugTexts.Keys) {
GUI.Label(Rect(0, y * 20, 400, 20), k + ":" + debugTexts[k].ToString());
++ y;
}
}
static function Log(key:String, text:Object) {
// デバッグテキスト表示登録
debugTexts[key] = text;
// デバッグテキストログ出力
print(key + ":" + text);
}
敵キャラに当たり判定を追加
bear を選択し、Inspector タブ -> Add Component で Rigidbody と Capsule Collider を追加します。パラメータを写真の通りに修正します。また、Tag に Enemy を追加し、bear に設定します。
前回と同様の方法でプレイヤーに Damage アクションを追加します。
State
Damage
Motion: DAMAGED00
Parameters
Damage Trigger
Transition
Any State -> Damage
Conditions: Damage
Damage -> Idle
Conditions: Exit Time 0.82
UnityChanScript に衝突時のコードを追加します。
function OnCollisionEnter (collision: Collision) {
MainScript.Log("player", collision.gameObject.name);
if (collision.gameObject.CompareTag("Enemy")) {
animator.SetTrigger("Damage");
}
}
ここまでで再生してきます。プレイヤーが敵と接触時にアクションを起こせば OK です。攻撃に当たり判定を付ける
ダミーのオブジェクトを作って、攻撃中に衝突したら当たりとします。オブジェクト作成
Cube オブジェクトを作成し、名前を Attack とし、unitychan_dynamic_locomotion の子に移動
Position: 0 0.5 1, Scale: 1 1 1
画面に描画されないように、Mesh Renderer のチェックを外す
Inspector に Rigidbody を追加し、移動しないように Constraints にチェックを入れる
UnityChanScript
Ctrl を押して1秒間だけ有効にするようにします。
/**
* ユニティちゃんスクリプト。
*
* @author 2014/08/31 matsushima
*/
#pragma strict
/** アニメーター */
var animator: Animator;
/** 攻撃時刻 */
var attackTime: float = 0;
function Start () {
animator = gameObject.GetComponent(Animator); // アニメーター
transform.Find("Attack").gameObject.SetActive(false); // 攻撃オブジェクト
}
function Update () {
// 攻撃
if (Input.GetButtonDown ("Fire1")) {
animator.SetTrigger("Attack");
transform.Find("Attack").gameObject.SetActive(true);
attackTime = Time.time;
}
// 攻撃終了
if (Time.time >= attackTime + 1) {
transform.Find("Attack").gameObject.SetActive(false);
}
}
function OnCollisionEnter (collision: Collision) {
MainScript.Log("player", collision.gameObject.name);
// 敵と衝突
if (collision.gameObject.CompareTag("Enemy")) {
animator.SetTrigger("Damage");
}
}
EnemyScript
攻撃オブジェクトに衝突したときの処理を追加します。
function OnCollisionEnter (collision: Collision) {
MainScript.Log("enemy", collision.gameObject.name);
if ("Attack" == collision.gameObject.name) {
Damage();
}
}
function Damage() {
animator.SetTrigger("Damage");
Destroy(gameObject, 0.5f);
}
この状態で再生してみます。
攻撃が敵にヒットして消えれば OK です。
このアセットは、『ユニティちゃんライセンス』で提供されています。このアセットをご利用される場合は、『キャラクター利用のガイドライン』も併せてご確認ください。
→ 3-4. Unity でユニティちゃんアクションゲームを作る - 敵の生成と武器の追加
← 3-2. Unity でユニティちゃんアクションゲームを作る - アニメーションの追加
↑ 一覧
0 件のコメント:
コメントを投稿