01 Unity3D人工智能AI-靠近
来源:互联网 发布:淘宝标题修改降权 编辑:程序博客网 时间:2024/09/21 08:51
本文固定连接:http://blog.csdn.net/u013108312/article/details/52892210
1.新建场景
2.创建一个目标点
3.添加角色,添加Character Controller,AILocomotion.cs和SteeringForSeek.cs
using UnityEngine;using System.Collections;public abstract class Steering : MonoBehaviour { public float weight = 1; public virtual Vector3 Force() { return new Vector3(0,0,0); }}
using UnityEngine;using System.Collections;//using System.Collections.Generic;public class Vehicle : MonoBehaviour { private Steering[] steerings; public float maxSpeed = 10; public float maxForce = 100; protected float sqrMaxSpeed; public float mass = 1; public Vector3 velocity; public float damping = 0.9f; public float computeInterval = 0.2f; public bool isPlanar = true; private Vector3 steeringForce; protected Vector3 acceleration; //private CharacterController controller; //private Rigidbody theRigidbody; //private Vector3 moveDistance; private float timer; protected void Start () { steeringForce = new Vector3(0,0,0); sqrMaxSpeed = maxSpeed * maxSpeed; //moveDistance = new Vector3(0,0,0); timer = 0; steerings = GetComponents<Steering>(); //controller = GetComponent<CharacterController>(); //theRigidbody = GetComponent<Rigidbody>(); } void Update () { timer += Time.deltaTime; steeringForce = new Vector3(0,0,0); //ticked part, we will not compute force every frame if (timer > computeInterval) { foreach (Steering s in steerings) { if (s.enabled) steeringForce += s.Force()*s.weight; } steeringForce = Vector3.ClampMagnitude(steeringForce,maxForce); acceleration = steeringForce / mass; timer = 0; } } /* void FixedUpdate() { velocity += acceleration * Time.fixedDeltaTime; if (velocity.sqrMagnitude > sqrMaxSpeed) velocity = velocity.normalized * maxSpeed; moveDistance = velocity * Time.fixedDeltaTime; if (isPlanar) moveDistance.y = 0; if (controller != null) controller.SimpleMove(velocity); else if (theRigidbody == null || theRigidbody.isKinematic) transform.position += moveDistance; else theRigidbody.MovePosition(theRigidbody.position + moveDistance); //updata facing direction if (velocity.sqrMagnitude > 0.00001) { Vector3 newForward = Vector3.Slerp(transform.forward, velocity, damping * Time.deltaTime); newForward.y = 0; transform.forward = newForward; } }*/}
using UnityEngine;using System.Collections;public class AILocomotion : Vehicle { private CharacterController controller; private Rigidbody theRigidbody; private Vector3 moveDistance; public bool displayTrack; // Use this for initialization void Start () { controller = GetComponent<CharacterController>(); theRigidbody = GetComponent<Rigidbody>(); moveDistance = new Vector3(0,0,0); base.Start(); } void FixedUpdate() { velocity += acceleration * Time.fixedDeltaTime; if (velocity.sqrMagnitude > sqrMaxSpeed) velocity = velocity.normalized * maxSpeed; moveDistance = velocity * Time.fixedDeltaTime; if (isPlanar) { velocity.y = 0; moveDistance.y = 0; } if (displayTrack) //Debug.DrawLine(transform.position, transform.position + moveDistance, Color.red,30.0f); Debug.DrawLine(transform.position, transform.position + moveDistance, Color.black, 30.0f); if (controller != null) { //if (displayTrack) //Debug.DrawLine(transform.position, transform.position + moveDistance, Color.blue,20.0f); controller.SimpleMove(velocity); } else if (theRigidbody == null || theRigidbody.isKinematic) { transform.position += moveDistance; } else { theRigidbody.MovePosition(theRigidbody.position + moveDistance); } //updata facing direction if (velocity.sqrMagnitude > 0.00001) { Vector3 newForward = Vector3.Slerp(transform.forward, velocity, damping * Time.deltaTime); if (isPlanar) newForward.y = 0; transform.forward = newForward; } //gameObject.animation.Play("walk"); }}
using UnityEngine;using System.Collections;public class SteeringForSeek : Steering { public GameObject target; private Vector3 desiredVelocity; private Vehicle m_vehicle; private float maxSpeed; private bool isPlanar; void Start () { m_vehicle = GetComponent<Vehicle>(); maxSpeed = m_vehicle.maxSpeed; isPlanar = m_vehicle.isPlanar; } public override Vector3 Force() { desiredVelocity = (target.transform.position - transform.position).normalized * maxSpeed; if (isPlanar) desiredVelocity.y = 0; return (desiredVelocity - m_vehicle.velocity); }}
0 0
- 01 Unity3D人工智能AI-靠近
- 02 Unity3D人工智能AI-离开
- 03 Unity3D人工智能AI-抵达
- 04 Unity3D人工智能AI-追逐
- 05 Unity3D人工智能AI-逃避
- 06 Unity3D人工智能AI-随机徘徊
- 07 Unity3D人工智能AI-路径跟随
- 08 Unity3D人工智能AI-避开障碍
- 【Unity3D】学习笔记(第1记) 敌人AI之Seek(靠近)
- Unity3D研究院之游戏开发中的人工智能AI
- Unity3D研究院之游戏开发中的人工智能AI
- Unity3D游戏开发中的人工智能AI 简单实例
- 人工智能(AI)
- 人工智能(AI)
- AI-伪AI 人工智能 alphago
- Unity3D AI人工智能(坦克模型自动寻怪,自动追击)
- Unity3D AI人工智能(坦克模型自动寻怪,自动追击)
- Unity3D AI人工智能(坦克模型自动寻怪,自动追击)
- 分析以HTML5开发移动游戏的可行性
- iOS UIWebView 通过 cookie 完成自动登录验证
- cas单点登录手册
- tomcat8:虚拟目录配置及404bug
- 第八周拓展实践3换分币
- 01 Unity3D人工智能AI-靠近
- Java模板使用
- C随机数生成器的实现分析
- 通信
- 如何通过adb命令获取手机型号与设备信息
- 【CodeForces】237C - Primes on Interval(二分)
- shell判断3.case判断
- jqGrid动态获取列和列字段
- 如何获得Android设备名称(ADB命令详细介绍)