ソースはこちらで公開しています。
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 でユニティちゃんアクションゲームを作る - アニメーションの追加
↑ 一覧