Unity3D + C#、またはスクリプトの翻訳方法

画像



私は比較的最近Unity3Dに出会いましたが、それ以前はJava2MEを使用して携帯電話用の独自のエンジンを使用していましたが、それ以外は常習者です。



新しいプラットフォームに移行するとき、私はまず自分用の既製の技術プラットフォームを探しました。私にとっての主な基準は価格(手頃な価格/正当化された)と、可能であればマルチプラットフォームでしたので、一度書かれたコードは何度も変換せずに何度も使用できます。 すぐに、Unityに出会いました。



Unity全体はすでにここで記述されているので、繰り返しません。主なことに注意してください-開発したゲームはC#でスクリプト化できます( Monoのおかげです)。 唯一の制限は、.NET Framework 1.1内で記述する必要があることです。iPhoneでのみサポートされます。 [更新:この記事の執筆中に、.NET 2.1をサポートするiPhone用Unity3Dの新しいバージョンがリリースされました]



したがって、Unity全般、特にC#を使用することで得られる主な利点は次のとおりです。



もちろん、デメリットもありますが、スピーチはそれらのためではありません。利点は最終的には勝っていたからです。



スクリプティングには、 Scintillaに基づいたねじ込み式のUniSciTEエディターが使用されますが 、個人的には好きではありませんでしたが、すぐに古き良きVisual Studioを使用したかったためです。 以下は、C#でスクリプトを作成する方法です。



[upd:ゲーム開発に移植]







Unityの現在のバージョンは2.6.1であり、Visual Studioとの統合に問題はありません。プロジェクトブラウザーウィンドウを右クリックし、適切なメニュー項目を選択するだけです。 その後、Unityはソリューションを作成し、既に作成されている場合は更新します。 プロジェクトには、使用されているUnityEditorおよびUnityEngineライブラリへのリンクが既に含まれており、すべてのスクリプトファイル(言語に関係なく)がプロジェクトに追加されます。

Visualstudio



留意する必要があるもの:





他の微妙な点を説明するために、エンジンに付属し、FPSのようにナビゲートできる単純なスクリプトの例、つまり、wasd +ジャンプ用のスペース+マウスを用意します。 ユーザーのゲームアバターが床から落ちないようにするには、FPSWalkerエンティティを適用するときに自動的にゲームオブジェクトに付着する単純なコライダー-CharacterControllerでラップする必要があります。



// <br/>

var speed = 6.0 ; <br/>

var jumpSpeed = 8.0 ; <br/>

var gravity = 20.0 ; <br/>

<br/>

// <br/>

private var moveDirection = Vector3. zero ; <br/>

private var grounded : boolean = false ; <br/>

<br/>

// <br/>

function FixedUpdate ( ) { <br/>

// <br/>

if ( grounded ) { <br/>

// <br/>

moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>

// <br/>

moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>

// <br/>

moveDirection *= speed ; <br/>

<br/>

// - <br/>

if ( Input. GetButton ( "Jump" ) ) { <br/>

moveDirection. y = jumpSpeed ; <br/>

} <br/>

} <br/>

<br/>

// <br/>

moveDirection. y -= gravity * Time. deltaTime ; <br/>

<br/>

// <br/>

var controller : CharacterController = GetComponent ( CharacterController ) ; <br/>

// <br/>

var flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>

// , <br/>

grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>

} <br/>

// , , CharacterController <br/>

@ script RequireComponent ( CharacterController )





// <br/>

var speed = 6.0 ; <br/>

var jumpSpeed = 8.0 ; <br/>

var gravity = 20.0 ; <br/>

<br/>

// <br/>

private var moveDirection = Vector3. zero ; <br/>

private var grounded : boolean = false ; <br/>

<br/>

// <br/>

function FixedUpdate ( ) { <br/>

// <br/>

if ( grounded ) { <br/>

// <br/>

moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>

// <br/>

moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>

// <br/>

moveDirection *= speed ; <br/>

<br/>

// - <br/>

if ( Input. GetButton ( "Jump" ) ) { <br/>

moveDirection. y = jumpSpeed ; <br/>

} <br/>

} <br/>

<br/>

// <br/>

moveDirection. y -= gravity * Time. deltaTime ; <br/>

<br/>

// <br/>

var controller : CharacterController = GetComponent ( CharacterController ) ; <br/>

// <br/>

var flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>

// , <br/>

grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>

} <br/>

// , , CharacterController <br/>

@ script RequireComponent ( CharacterController )







したがって、上記に加えて、このスクリプトをC#に翻訳するときは、次のことを考慮する必要があります。



これらの単純なルールをすべて適用すると、クラスは次のようになります。



using UnityEngine ; <br/>

<br/>

// <br/>

[ RequireComponent ( typeof ( CharacterController ) ) ] <br/>

// <br/>

public class FPSWalkerInCS : MonoBehaviour { <br/>

// , float <br/>

public float speed = 6.0f ; <br/>

public float jumpSpeed = 8.0f ; <br/>

public float gravity = 20.0f ; <br/>

// - <br/>

private Vector3 moveDirection = Vector3. zero ; <br/>

private bool grounded = false ; <br/>

<br/>

// <br/>

void Start ( ) { <br/>

<br/>

} <br/>

<br/>

void FixedUpdate ( ) { <br/>

if ( grounded ) { <br/>

moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>

moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>

moveDirection *= speed ; <br/>

<br/>

if ( Input. GetButton ( "Jump" ) ) { <br/>

moveDirection. y = jumpSpeed ; <br/>

} <br/>

} <br/>

<br/>

moveDirection. y -= gravity * Time. deltaTime ; <br/>

// <br/>

CharacterController controller = ( CharacterController ) GetComponent ( typeof ( CharacterController ) ) ; <br/>

CollisionFlags flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>

grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>

} <br/>

}





using UnityEngine ; <br/>

<br/>

// <br/>

[ RequireComponent ( typeof ( CharacterController ) ) ] <br/>

// <br/>

public class FPSWalkerInCS : MonoBehaviour { <br/>

// , float <br/>

public float speed = 6.0f ; <br/>

public float jumpSpeed = 8.0f ; <br/>

public float gravity = 20.0f ; <br/>

// - <br/>

private Vector3 moveDirection = Vector3. zero ; <br/>

private bool grounded = false ; <br/>

<br/>

// <br/>

void Start ( ) { <br/>

<br/>

} <br/>

<br/>

void FixedUpdate ( ) { <br/>

if ( grounded ) { <br/>

moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>

moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>

moveDirection *= speed ; <br/>

<br/>

if ( Input. GetButton ( "Jump" ) ) { <br/>

moveDirection. y = jumpSpeed ; <br/>

} <br/>

} <br/>

<br/>

moveDirection. y -= gravity * Time. deltaTime ; <br/>

// <br/>

CharacterController controller = ( CharacterController ) GetComponent ( typeof ( CharacterController ) ) ; <br/>

CollisionFlags flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>

grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>

} <br/>

}







すべて、クラスの準備ができました。



All Articles